Kubernetes Pod 无法访问外部IP地址。

4

我正在设置一个k8s测试集群环境。但是由k8s部署的pod无法访问外部ip地址。

pod的ip地址为173.16.2.5/24,节点在eth0接口上具有IP地址10.168.99.198/24,在cni网络上具有IP地址173.16.2.1/24。

  1. 从节点ping 10.168.99.197可以正常工作:
#ping 10.168.99.197
PING 10.168.99.197 (10.168.99.197) 56(84) bytes of data.
64 bytes from 10.168.99.197: icmp_seq=1 ttl=64 time=0.120 ms

但是从busybox pod ping相同的ip失败了:
#ping 10.168.99.197
PING 10.168.99.197 (10.168.99.197): 56 data bytes
<-- no response

k8s创建的busybox容器上的路由:

# ip route
default via 173.16.2.1 dev eth0
10.244.0.0/16 via 173.16.2.1 dev eth0
173.16.2.0/24 dev eth0 scope link  src 173.16.2.5

如果我启动一个不是由k8s创建的busybox容器,网络就正常:

由docker创建的busybox容器上的路由信息:

# ip route
default via 172.17.0.1 dev eth0
172.17.0.0/16 dev eth0 scope link  src 172.17.0.2

# ping 10.168.99.197
PING 10.168.99.197 (10.168.99.197): 56 data bytes
64 bytes from 10.168.99.197: seq=0 ttl=63 time=0.554 ms

节点上的路由表:
# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         localhost       0.0.0.0         UG    0      0        0 eth0
10.168.99.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
link-local      0.0.0.0         255.255.0.0     U     1002   0        0 eth0
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0
173.16.0.0      173-16-0-0.clie 255.255.255.0   UG    0      0        0 flannel.1
173.16.1.0      173-16-1-0.clie 255.255.255.0   UG    0      0        0 flannel.1
173.16.2.0      0.0.0.0         255.255.255.0   U     0      0        0 cni0

如何解决此问题以使k8s创建的pod能够达到外部IP?
1个回答

7

无法访问外部IP的Pod的原因是Flannel网络配置与CNI网络不匹配。更改Flannel设置以解决此问题:

# kubectl get configmap -n kube-system -o yaml kube-flannel-cfg
...
  net-conf.json: |
    {
      "Network": "172.30.0.0/16",
      "Backend": {
        "Type": "vxlan"
      }
    }
...

3
你是在说Flannel网络需要与CNI网络匹配,还是需要与CNI网络不同? - JDS

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接