我正在尝试安装和使用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/

10-16 07:15