我们已经建立了一个裸机非云kubernetes集群,该集群具有通过hostNetwork: true
指令绑定到端口443的nginx-ingress控制器。
重新启动后,我们遇到一个奇怪的“没有通往主机的路由”错误:
$ curl http://127.0.0.1:443
curl: (7) Failed connect to 127.0.0.1:443; No route to host
$ curl http://127.0.0.1:444
curl: (7) Failed connect to 127.0.0.1:444; Connection refused
我永远都不会想到这样的错误可能在端口级甚至127.0.0.1上发生。
有趣的是,curl -g http://[::1]:443
确实有效;-)
使用lsof
,我确实看到nginx在许多进程中都在监听端口443。我不知道那是可能的。显然,Linux始终没有这种机制SO_REUSEPORT
来实现针对子工作进程的高效网络流量。请参阅https://lwn.net/Articles/542629/
$ kubectl version
Client Version: version.Info{Major:"1", Minor:"19", GitVersion:"v1.19.0", GitCommit:"e19964183377d0ec2052d1f1fa930c4d7575bd50", GitTreeState:"clean", BuildDate:"2020-08-26T14:30:33Z", GoVersion:"go1.15", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.6", GitCommit:"dff82dc0de47299ab66c83c626e08b245ab19037", GitTreeState:"clean", BuildDate:"2020-07-15T16:51:04Z", GoVersion:"go1.13.9", Compiler:"gc", Platform:"linux/amd64"}
我们正在使用法兰绒作为CNI网络覆盖图,
quay.io/coreos/flannel:v0.12.0-amd64
Nginx入口图像:
k8s.gcr.io/ingress-nginx/controller:v0.35.0@sha256:fc4979d8b8443a831c9789b5155cded454cb7de737a8b727bc2ba0106d2eae8b
我该怎么做进一步排除故障?
我已经删除了整个ingress-nginx
名称空间,但仍然会发生这种情况。
lsof
未显示443的任何监听。
操作系统:RedHat Enterprise Linux 7.8
防火墙已关闭。