K8S 一次排错calico网络
现象
[root@k8s-master1 k8s]# kubectl get pods -o wide -n kube-system
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
calico-kube-controllers-78d6f96c7b-4gfls 1/1 Running 0 104s 10.244.159.129 k8s-master1 <none> <none>
calico-node-gdcv2 0/1 Running 0 105s 192.168.1.12 k8s-node2 <none> <none>
calico-node-sh7cg 0/1 Running 0 105s 192.168.1.11 k8s-master1 <none> <none>
排查分析
kubectl describe pod calico-node-6v4k8 -n kube-system
Readiness probe failed: caliconode is not ready: BIRD is not ready
调整calicao网络插件的网卡发现机制,修改IP_AUTODETECTION_METHOD对应的value值。官方提供的yaml文件中,ip识别策略(IPDETECTMETHOD)没有配置,即默认为first-found,这会导致一个网络异常的ip作为nodeIP被注册,从而影响node-to-node
mesh。我们可以修改成can-reach或者interface的策略,尝试连接某一个Ready的node的IP,以此选择出正确的IP
解决问题
- name: IP_AUTODETECTION_METHOD
value: "interface=ens.*" # ens 根据实际网卡开头配置,支持正则表达式
- name: CLUSTER_TYPE
value: "k8s,bgp"
- name: IP_AUTODETECTION_METHOD
value: "interface=ens.*"
# Auto-detect the BGP IP address.
- name: IP
value: "autodetect"
# Enable IPIP
- name: CALICO_IPV4POOL_IPIP
value: "Always"
- kubectl delete -f calico.yaml
- kubectl apply -f calico.yaml
参考文献