1、问题发生
因node的两个节点故障,删除该节点,并重新加入新的节点,集群恢复正常后,发现之前配置的Ingress都无法访问。
解析域名配置的是coredns,将域名解析的地址还是原来的Node节点地址。
新加入的Node节点的IP地址没有变,但是域名就是无法访问。
2、排查
查看ingress-nginx的pod信息

发现ingress-nginx-controller只运行在一个节点上,并不是coredns解析的地址。
查看标签,
bash
kubectl get nodes --show-labels | grep ingress=true

之所以目前只跑在一个节点上,是因为它被部署成了 DaemonSet,并且设置了 节点选择器(Node Selector)
bash
NODE SELECTOR: ingress=true
如何让 Ingress Controller 运行在多个节点上?
给多个节点打上 ingress=true 标签
bash
kubectl label node k8s-node04 ingress=true
kubectl label node k8s-node05 ingress=true
kubectl label node k8s-node06 ingress=true
观察 DaemonSet 自动扩展
bash
kubectl get pods -n ingress-nginx -o wide
看到每个打了标签的节点上都跑起了一个 Ingress Controller Pod。

再次访问域名就恢复正常了