我正在尝试安装和使用nginx-ingress公开在kubernetes集群下运行的服务,我正在关注此instructions。
在步骤4 中,请注意:
这意味着守护程序将监听端口80和443,以将传入流量转发到由ingress.yaml配置文件映射的服务。
但是,在运行了 3.2 kubectl apply -f daemon-set/nginx-ingress.yaml
指令之后,就创建了守护程序集,但是在集群的所有节点中都没有侦听80或443的事件。
安装说明是否有问题,或者我是否在其中缺少任何内容。
最佳答案
从netstat的输出中可以得到的不是典型的Listen。它被iptables“侦听”。以下是群集节点上的入口 Controller 的iptables规则。
-A CNI-DN-0320b4db24e84e16999fd -s 10.233.88.110/32 -p tcp -m tcp --dport 80 -j CNI-HOSTPORT-SETMARK
-A CNI-DN-0320b4db24e84e16999fd -p tcp -m tcp --dport 80 -j DNAT --to-destination 10.233.88.110:80
-A CNI-DN-0320b4db24e84e16999fd -s 10.233.88.110/32 -p tcp -m tcp --dport 443 -j CNI-HOSTPORT-SETMARK
-A CNI-DN-0320b4db24e84e16999fd -p tcp -m tcp --dport 443 -j DNAT --to-destination 10.233.88.110:443
10.233.88.110是在该节点上运行的入口 Controller 的IP地址。
$ kubectl get pod -n ingress-nginx -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
ingress-nginx-controller-5rh26 1/1 Running 1 77d 10.233.83.110 k8s-master3 <none> <none>
ingress-nginx-controller-9nnwl 1/1 Running 1 77d 10.233.88.110 k8s-master2 <none> <none>
ingress-nginx-controller-ckkb2 1/1 Running 1 77d 10.233.68.111 k8s-master1 <none> <none>
编辑
当请求到达端口80/443时,iptables会将DNAT规则应用于该请求,从而将目标IP修改为入口 Controller 的ip地址。实际的侦听是在入口 Controller 容器内部。
关于docker - 将Nginx入口 Controller 公开为Daemonset,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58001524/