【问题标题】:intermittent timeout on Service(NodePort)服务(NodePort)间歇性超时
【发布时间】:2019-12-03 09:38:59
【问题描述】:

我们正在尝试手动设置一个 kubernetes 集群,其中控制器和主服务器在三个不同的数据中心中运行。

数据中心A: 控制器IP:10.0.1.11 工作子网:10.0.2.0/24

数据中心 B: 控制器IP:10.1.1.11 工作子网:10.1.2.0/24

数据中心 C: 控制器IP:10.2.1.11 工作子网:10.2.2.0/24

现在我们可以启动集群,并且工作人员可以加入控制器节点。

root@ip-10-0-1-11:/# kubectl get componentstatus
NAME                 STATUS    MESSAGE             ERROR
controller-manager   Healthy   ok
scheduler            Healthy   ok
etcd-0               Healthy   {"health":"true"}
root@ip-10-0-1-11:/# kubectl get nodes
NAME                            STATUS   ROLES    AGE   VERSION
worker-30838.example.com   Ready    <none>   15h   v1.15.3
worker-9120.example.com    Ready    <none>   15h   v1.15.3

我们创建了一个包含 5 个副本集的示例服务“hello-world”。:

kubectl apply -f https://k8s.io/examples/service/load-balancer-example.yaml
root@ip-10-0-1-11:/# kubectl get deployments
NAME          READY   UP-TO-DATE   AVAILABLE   AGE
hello-world   5/5     5            5           8m30s
nginx         1/1     1            1           15h

部署后我们创建了服务(NodePort):

root@ip-10-0-1-11:/# kubectl expose deployment hello-world --type=NodePort --name=my-service
root@ip-10-0-1-11:/# kubectl get svc
NAME         TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)          AGE
kubernetes   ClusterIP   10.32.0.1     <none>        443/TCP          15h
my-service   NodePort    10.32.0.145   <none>        8080:30960/TCP   9m2s

现在,当我们尝试使用如下所示的 NodePort 直接连接到工作节点时。我们间歇性地超时:

root@ip-10-0-1-11:/# curl http://10.0.2.31:30960




^C
root@ip-10-0-1-11:/# curl http://10.0.2.31:30960
^C
root@ip-10-0-1-11:/# curl http://10.0.2.31:30960
Hello Kubernetes!root@ip-10-0-1-11:/# curl http://10.0.2.31:30960



^C
root@ip-10-0-1-11:/# curl http://10.0.2.31:30960





^C
root@ip-10-0-1-11:/# curl http://10.0.2.31:30960
Hello Kubernetes!root@ip-10-0-1-11:/#
root@ip-10-0-1-11:/#
root@ip-10-0-1-11:/#
root@ip-10-0-1-11:/#
root@ip-10-0-1-11:/# ^C
root@ip-10-0-1-11:/# curl http://10.0.2.31:30960



^C
root@ip-10-0-1-11:/# curl http://10.0.2.31:30960
^C
root@ip-10-0-1-11:/# curl http://10.1.2.41:30960




^C
root@ip-10-0-1-11:/# curl http://10.1.2.41:30960
Hello Kubernetes!root@ip-10-0-1-11:/#
root@ip-10-0-1-11:/#
root@ip-10-0-1-11:/# curl http://10.1.2.41:30960
Hello Kubernetes!root@ip-10-0-1-11:/#
root@ip-10-0-1-11:/#
root@ip-10-0-1-11:/# curl http://10.1.2.41:30960
Hello Kubernetes!root@ip-10-0-1-11:/#
root@ip-10-0-1-11:/#
root@ip-10-0-1-11:/#
root@ip-10-0-1-11:/# curl http://10.1.2.41:30960
curl: (7) Failed to connect to 10.1.2.41 port 30960: Connection timed out

期待有关我们如何调试或解决问题的建议或指导。

【问题讨论】:

    标签: kubernetes kubernetes-pod kubernetes-service


    【解决方案1】:

    我建议您使用网络故障排除工具,例如:tcpdumpnetboxSatellite。看看:kubernetes-networking-troubleshooting.

    还要注意有关Source IP for Services with Type=NodePort的信息。

    您也可以尝试使用 Wave 以不同方式安装 Kubernetes:firekube

    【讨论】:

    • 我没有发现 iptables 有任何问题。使用 tcpdump 检查时,请求正在等待 SYN 数据包确认。但它永远不会到达。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-19
    • 2017-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多