【问题标题】:Cannot connect to kubernetes pod from master: i/o timeout无法从 master 连接到 kubernetes pod:i/o 超时
【发布时间】:2018-12-25 23:05:22
【问题描述】:

我用一个master和一个node配置了kubernetes集群,运行master和node的机器不在同一个网络中。对于网络,我安装了 calico,所有的 pod 都在运行。为了测试集群,我使用了get shell example,当我从主机运行以下命令时:

kubectl exec -it shell-demo -- /bin/bash

我收到了错误:

Error from server: error dialing backend: dial tcp 10.138.0.2:10250: i/o timeout

ip 10.138.0.2 在节点机器的 eth0 接口上。

我需要进行什么配置才能从 master 访问 pod?

编辑

kubectl 获取所有 --all-namespaces -o 宽输出:

default       shell-demo                           1/1       Running   0          10s       192.168.4.2   node-1
kube-system   calico-node-7wlqw                    2/2       Running   0          49m       10.156.0.2    instance-1
kube-system   calico-node-lnk6d                    2/2       Running   0          35s       10.132.0.2    node-1
kube-system   coredns-78fcdf6894-cxgc2             1/1       Running   0          50m       192.168.0.5   instance-1
kube-system   coredns-78fcdf6894-gwwjp             1/1       Running   0          50m       192.168.0.4   instance-1
kube-system   etcd-instance-1                      1/1       Running   0          49m       10.156.0.2    instance-1
kube-system   kube-apiserver-instance-1            1/1       Running   0          49m       10.156.0.2    instance-1
kube-system   kube-controller-manager-instance-1   1/1       Running   0          49m       10.156.0.2    instance-1
kube-system   kube-proxy-b64b5                     1/1       Running   0          50m       10.156.0.2    instance-1
kube-system   kube-proxy-xxkn4                     1/1       Running   0          35s       10.132.0.2    node-1
kube-system   kube-scheduler-instance-1            1/1       Running   0          49m       10.156.0.2    instance-1

谢谢!

【问题讨论】:

  • 这听起来像是需要修改防火墙规则以允许从您希望使用execlogs 的任何机器访问端口 10250,因为这两个命令都直接连接到 @节点上的 987654327@
  • 所有防火墙规则都被禁用。我尝试从 master 访问 pod。我认为问题在于 kubernetes 试图通过私有 IP“10.138.0.2”访问 pod。
  • 显示kubectl get all --all-namespaces=true 命令的输出
  • 我在上面加了。谢谢!
  • kubernetes 尝试通过私有 ip "10.138.0.2" 访问 pod,那么您更喜欢它使用什么 IP?只是为了非常清楚:execlogs 不使用 SDN,它们总是通过“主机”网络传输,因为它们被设计为由您的工作站访问,而不是从集群内部访问。

标签: kubernetes


【解决方案1】:

在查看您在 Master 上的状态之前,请确认以下事项。

请运行以下命令检查集群信息:

setenforce 0
firewall-cmd --permanent --add-port=6443/tcp
firewall-cmd --permanent --add-port=2379-2380/tcp
firewall-cmd --permanent --add-port=10250/tcp
firewall-cmd --permanent --add-port=10251/tcp
firewall-cmd --permanent --add-port=10252/tcp
firewall-cmd --permanent --add-port=10255/tcp
firewall-cmd --reload
modprobe br_netfilter
echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables

在主节点和工作节点上运行上述命令。

然后运行下面的命令来检查节点状态。

kubectl 获取节点

【讨论】:

  • 我运行了所有命令,但收到了同样的错误。我认为问题在于 kubernetes 试图通过私有 ip“10.138.0.2”访问 pod
【解决方案2】:

我也有这个问题。不知道你是否在 Azure 上,但我在,我通过删除 tunnelfront pod 并让 Kubernetes 重新启动它解决了这个问题:

kubectl -n kube-system delete po -l component=tunnel

这是我从here得到的解决方案

【讨论】:

    【解决方案3】:

    我们遇到了同样的问题,最后我们发现每个主机有2个Nic,它们有2个不同的IP,路由也乱了。所以当这个超时发生时,检查你的网络设置,确保你的网络是健康的,这应该会给你一些很好的线索。

    【讨论】:

      猜你喜欢
      • 2015-06-06
      • 2020-08-26
      • 2018-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多