Kubernetes Ingress

Kubernetes Ingress 通常用来以 L7 LoadBalance 的形式对外暴露服务,这里就不再赘述了

这里只是为了尽量清晰的描述一下 Ingress本身一些让人忽略的问题

Ingress是Kubernetes API的标准资源类型之一,它其实就是一组基于DNS名称(host)或URL路径把请求转发到指定的Service资源的规则

Ingress 的实现分为两个部分 Ingress Controller 和 Ingress .

  1. Ingress Controller 是流量的入口,是一个实体软件, 一般是Nginx 和 Haproxy 。
  2. Ingress 描述具体的路由规则。

因为内容比较乱,所以这里分成几个具体的真实Case来讨论

K3s的情况

最近尝试了 K3s,K3s 的默认实现(不需要安装rancher,裸K3s)竟然不是 Nginx Ingress 而是 traefik

安装集群之后,我遇到了一个很诡异的问题,以往使用Kubernetes的时候,只要加入了一个Ingress规则,那么DNS只要指向任意节点都可以访问到这个 deployment,可是在 K3s 下竟然只有一个节点可以正常访问,例如

  • 192.168.204.165
  • 192.168.204.166
  • 192.168.204.167
  • 192.168.204.168

只有192.168.204.168才能访问到Ingress

检查ingress-nginx-controller发现RKE2 并不像RKE1 一样,使用DaemonSet来部署这个controller,而是莫名其妙的使用了普通的 Deployment, 这就导致只有部署了 ingress controller 的 168 能正常接收请求

RKE1 的情况就好很多,因为是 DaemonSet 所以每个节点都可以正常工作

这里我们手动把部署数量改成4,很顺利的 controller 被分布在了4个节点上

在这种情况下任意节点都可以正常接收请求

ADDRESS 显示了全部地址

Send a Message