Kubernetes Pod 无法访问外部 IP 地址

All*_*len 4 kubernetes

我正在搭建k8s测试集群环境。但是k8s部署的pod无法访问外部ip地址。

Pod ip 地址为 173.16.2.5/24 该节点在接口 eth0 上具有 ip 10.168.99.198/24,在 cni 网络上具有 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
Run Code Online (Sandbox Code Playgroud)
  1. 但是从 busybox pod ping 相同的 IP 失败:
#ping 10.168.99.197
PING 10.168.99.197 (10.168.99.197): 56 data bytes
<-- no response
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

如果我启动一个不是由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
Run Code Online (Sandbox Code Playgroud)
# 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
Run Code Online (Sandbox Code Playgroud)

节点上的路由表:

# 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
Run Code Online (Sandbox Code Playgroud)

如何解决这个问题,让k8s创建的pod到达外部ip?

All*_*len 8

pod无法访问外部ip的原因是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"
      }
    }
...
Run Code Online (Sandbox Code Playgroud)

  • 你是说flannel网络需要匹配CNI网络,还是需要与CNI网络不同? (3认同)