k8s集群三个节点,一个master node, 两个worker node。
我们可以看到prometheus以NodePort方式把服务暴露出来。
1 | kubectl get svc -n monitoring |
我们通过<worker-node-ip>:30090
的方式,可以正确访问到页面,但通过<master-node-ip>:30090
,却不能正常访问页面。
随即,我查看了calico网络插件的运行情况。
1 | kubectl get po -n kube-system |
其中一个pod,并未通过健康检查。
查看一下这个pod的详情信息。
1 | kubectl describe po calico-node-jt4fz -n kube-system |
错误的原因是:
Readiness probe failed: calico/node is not ready: BIRD is not ready: BGP not established with 172.16.64.232,172.16.64.2352020-02-12 12:36:36.591 [INFO][12943] health.go 156: Number of node(s) with BGP peering established = 0
解决方案:
调整calico网络插件的网卡发现机制,修改IP_AUTODETECTION_METHOD对应的value值。
官方提供的yaml文件中,ip识别策略(IPDETECTMETHOD)没有配置,即默认为first-found,这会导致一个网络异常的ip作为nodeIP被注册,从而影响node-to-node mesh。
我们可以修改成can-reach或者interface的策略,尝试连接某一个Ready的node的IP,以此选择出正确的IP。
在calico.yaml
文件中添加如下两行内容
1 | - name: IP_AUTODETECTION_METHOD |
配置如下:
1 | # Cluster type to identify the deployment type |
修改后重新应用一下calico.yaml文件。
1 | kubectl apply -f calico.yaml |
我们发现calico所有pod都已经成功启动了。
1 | kubectl get po -n kube-system |
此时,通过<master-node-ip>:30090
,即可以成功访问到页面了。