Kubernetes Ingress 通常用来以 L7 LoadBalance 的形式对外暴露服务,这里就不再赘述了
这里只是为了尽量清晰的描述一下 Ingress本身一些让人忽略的问题
Ingress是Kubernetes API的标准资源类型之一,它其实就是一组基于DNS名称(host)或URL路径把请求转发到指定的Service资源的规则
Ingress 的实现分为两个部分 Ingress Controller 和 Ingress .
- Ingress Controller 是流量的入口,是一个实体软件, 一般是Nginx 和 Haproxy 。
- 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 显示了全部地址