我已经部署了几种不同的服务,并且总是收到相同的错误。
可以从运行Pod的计算机的节点端口上访问该服务。在另外两个节点上,我超时了。
kube-proxy在所有工作程序节点上运行,我可以从kube-proxy的日志文件中看到已添加服务端口并且已打开节点端口。 在这种情况下,我已经部署了印花布上的星星演示
Kube-proxy日志输出:
Mar 11 10:25:10 kuben1 kube-proxy[659]: I0311 10:25:10.229458 659 service.go:309] Adding new service port "management-ui/management-ui:" at 10.32.0.133:9001/TCP
Mar 11 10:25:10 kuben1 kube-proxy[659]: I0311 10:25:10.257483 659 proxier.go:1427] Opened local port "nodePort for management-ui/management-ui:" (:30002/tcp)
kube-proxy正在侦听端口30002
root@kuben1:/tmp# netstat -lanp | grep 30002
tcp6 0 0 :::30002 :::* LISTEN 659/kube-proxy
还定义了一些iptable规则:
root@kuben1:/tmp# iptables -L -t nat | grep management-ui
KUBE-MARK-MASQ tcp -- anywhere anywhere /* management-ui/management-ui: */ tcp dpt:30002
KUBE-SVC-MIYW5L3VT4JVLCIZ tcp -- anywhere anywhere /* management-ui/management-ui: */ tcp dpt:30002
KUBE-MARK-MASQ tcp -- !10.200.0.0/16 10.32.0.133 /* management-ui/management-ui: cluster IP */ tcp dpt:9001
KUBE-SVC-MIYW5L3VT4JVLCIZ tcp -- anywhere 10.32.0.133 /* management-ui/management-ui: cluster IP */ tcp dpt:9001
有趣的是,我可以从任何工作节点访问服务IP
root@kubem1:/tmp# kubectl get svc -n management-ui
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
management-ui NodePort 10.32.0.133 <none> 9001:30002/TCP 52m
如果我执行“ curl http://10.32.0.133:9001”,则可以从任何工作程序节点访问服务IP /端口
我不明白为什么kube-proxy无法正确“路由”这个问题...
有没有人暗示我可以找到错误?
以下是一些群集规格:
这是一个手工构建的集群,灵感来自Kelsey Hightower的“艰难的Kubernetes”指南。
主节点上的组件状态看起来还可以
root@kubem1:/tmp# kubectl get componentstatus
NAME STATUS MESSAGE ERROR
controller-manager Healthy ok
scheduler Healthy ok
etcd-0 Healthy {"health":"true"}
etcd-1 Healthy {"health":"true"}
etcd-2 Healthy {"health":"true"}
如果我信任kubectl,工作节点就可以了
root@kubem1:/tmp# kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
kuben1 Ready <none> 39d v1.13.0 192.168.178.77 <none> Ubuntu 18.04.2 LTS 4.15.0-46-generic docker://18.9.3
kuben2 Ready <none> 39d v1.13.0 192.168.178.78 <none> Ubuntu 18.04.2 LTS 4.15.0-46-generic docker://18.9.3
kuben3 Ready <none> 39d v1.13.0 192.168.178.79 <none> Ubuntu 18.04.2 LTS 4.15.0-46-generic docker://18.9.3
P Ekambaram要求:
root@kubem1:/tmp# kubectl get po -n kube-system
NAME READY STATUS RESTARTS AGE
calico-node-bgjdg 1/1 Running 5 40d
calico-node-nwkqw 1/1 Running 5 40d
calico-node-vrwn4 1/1 Running 5 40d
coredns-69cbb76ff8-fpssw 1/1 Running 5 40d
coredns-69cbb76ff8-tm6r8 1/1 Running 5 40d
kubernetes-dashboard-57df4db6b-2xrmb 1/1 Running 5 40d
答案 0 :(得分:1)
我找到了解决“问题”的方法。
此行为是由Docker v1.13.x中的更改引起的,此问题已在版本1.8的kubernetes中修复。
简单的解决方案是通过iptables更改转发规则。
在所有工作节点上运行以下cmd:“ iptables -A FORWARD -j ACCEPT”
要正确解决此问题,我必须告诉kube-proxy Pod的cidr。 理论上可以通过两种方式解决:
在我的情况下,cmd行参数无效。
当我将行添加到我的kubeconfig文件中并在所有工作节点上重新启动kube-proxy时,一切正常。
以下是此“ FORWARD”问题的github合并请求:link