原文参考 https://zhuanlan.zhihu.com/p/681717520
问题
最近安装 1.28 版本的 k8s,使用 ingress(nginx)暴露某个后端服务,然后使用 netstat -ntlp 看不到 80 端口在监听;使用浏览器又可以访问,觉得不可理解。
原因
github 上有说明:在新版本中已经删除了 kube-proxy 打开端口套接字部分,但是会在 iptables 中进行转发,故不影响访问。
https://github.com/kubernetes/kubernetes/issues/115568
https://github.com/kubernetes/kubernetes/pull/108496

验证
netstat -ntlp | grep 80 看不到 80 端口有监听
iptables -S -t nat | grep 80 观察到端口流量由 iptables 转发

能访问到 nginx

拔高
ingress(nginx)默认监听的 80、443 端口是可以修改的,由 nginx-ingress-controller 的配置文件定义,以避免潜在的端口冲突
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: nginx-ingress-controller
...
ports:
- containerPort: 80
hostPort: 80 # 可以修改为180
name: http
protocol: TCP
- containerPort: 443
hostPort: 443 # 可以修改为1443
name: https
protocol: TCP
