kubeadm安装kubernetes pod ip无法访问

问题

通过 kubeadm v1.14.0 版本安装kubernetes

并 通过容器的方式启动calico

也就是使用 calico.yaml 版本: v3.1.3

安装完成,并加入各个节点测试后发现

在各台Node上 都无法ping通pod IP

解决方案

calico.yaml 文件官方位置: calico.yaml

calico.yaml文件中的calico-node部分加入环境变量IP_AUTODETECTION_METHOD,并设置值为:can-reach=x.x.x.x

注意:请将 can-reach=x.x.x.xx.x.x.x设置为你们集群中一个可以访问的IP地址,或者域名。
|
一般选择使用 网关的地址

calico.yaml如下:

spec:
  hostNetwork: true
  serviceAccountName: calico-node
  terminationGracePeriodSeconds: 0
  containers:
    - name: calico-node
      image: quay.io/calico/node:v3.1.3
      env:
        - name: IP_AUTODETECTION_METHOD
          value: can-reach=172.22.203.1

172.22.203.1 是我的网关地址

重新apply calico.yaml

ping pod的IP 发现联通!

解决思路

我通过重启 calico 并在启动时候查看它的日志发现日志,选用了一个奇怪的网卡作为启动的网卡

kubectl delete -f /etc/kubernetes/addons/calico.yaml
kubectl apply -f /etc/kubernetes/addons/calico.yaml
kubectl get pods -n kube-system

kubectl log calico-node-hkcvz -c calico-node -n kube-system

calico-node-hkcvz 是我的calico pod名称,请按照实际情况修改。这个日志滚动比较快请尽快查看,一般在日志开始的一屏位置。

日志中选择出一个叫做br-b733428777f6的网卡,这个网卡估计是bird产生的


2019-08-15 04:39:10.859 [INFO][8] startup.go 564: Using autodetected IPv4 address on interface br-b733428777f6: 172.19.0.1/16

很明显这个网卡是无法用来联通网络的

查阅了下 calico的官网 config

发现calico 默认以 first-found 的方式来检测网卡,也就是把找到的一个网卡作为calico的工作网卡,这就导致上面的问题。

所以需要在calico-node启动时,根据文档我们可以找到can-reach的参数,该参数表明通过,否能到达某个ip作为检测手段。

因此我们可以将该检测地址设为 网关IP

在calico node下面加入如下环境变量

name: calico-node
image: quay.io/calico/node:v3.1.3
env:
 - name: IP_AUTODETECTION_METHOD
    value: can-reach=172.22.203.1

172.22.203.1 是我这几台机器网关的地址

这样删除calico后,重启启动calico,再次查看启动日志

2019-08-15 04:50:27.942 [INFO][10] reachaddr.go 46: Auto-detected address by connecting to remote Destination="172.22.203.1" IP=172.22.203.10
2019-08-15 04:50:27.943 [INFO][10] reachaddr.go 55: Checking interface CIDRs Name="cali7b8c9bd2e1f"
2019-08-15 04:50:27.943 [INFO][10] reachaddr.go 55: Checking interface CIDRs Name="veth24c7125"
2019-08-15 04:50:27.943 [INFO][10] reachaddr.go 55: Checking interface CIDRs Name="br-0b07d34c53b5"
2019-08-15 04:50:27.943 [INFO][10] reachaddr.go 57: Checking CIDR CIDR="172.18.0.1/16"
2019-08-15 04:50:27.943 [INFO][10] reachaddr.go 55: Checking interface CIDRs Name="tunl0"
2019-08-15 04:50:27.943 [INFO][10] reachaddr.go 57: Checking CIDR CIDR="111.111.1.1/32"
2019-08-15 04:50:27.943 [INFO][10] reachaddr.go 55: Checking interface CIDRs Name="docker0"
2019-08-15 04:50:27.943 [INFO][10] reachaddr.go 57: Checking CIDR CIDR="172.17.0.1/16"
2019-08-15 04:50:27.943 [INFO][10] reachaddr.go 55: Checking interface CIDRs Name="enp0s20u1u5"
2019-08-15 04:50:27.943 [INFO][10] reachaddr.go 55: Checking interface CIDRs Name="eno4"
2019-08-15 04:50:27.943 [INFO][10] reachaddr.go 55: Checking interface CIDRs Name="eno3"
2019-08-15 04:50:27.943 [INFO][10] reachaddr.go 55: Checking interface CIDRs Name="eno2"
2019-08-15 04:50:27.943 [INFO][10] reachaddr.go 55: Checking interface CIDRs Name="eno1"
2019-08-15 04:50:27.943 [INFO][10] reachaddr.go 57: Checking CIDR CIDR="172.22.203.10/24"
2019-08-15 04:50:27.943 [INFO][10] reachaddr.go 59: Found matching interface CIDR CIDR="172.22.203.10/24"
2019-08-15 04:50:27.943 [INFO][10] startup.go 590: Using autodetected IPv4 address 172.22.203.10/24, detected by connecting to 172.22.203.1

可以发现calico依次遍历各个网卡,尝试连接 网关IP172.22.203.1 最终找到一个能到达指定IP的网卡 eno1

参考文献

[1]. calico . v2.2 . https://docs.projectcalico.org/v2.2/reference/node/configuration

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值