两套k8s集群,A集群访问B集群,其中,B集群部署了keepalive,有vip地址。初始,A集群可以访问通B集群的实ip和对应的服务端口,也可以访问通vip地址及其服务端口。

现象:

在最开始的测试结束,对B集群进行逐台开关机的高可用测试时,发现B集群,第一台机器关机后,出现了vip地址ping不通,对应的端口服务也访问不通的情况,并且A机器部分机器也访问不通B集群的实IP及其端口。

排查思路:

1、网络问题

2、服务问题

3、k8s组件问题

网络问题:

针对网络问题,逐台机器进行ping和telnet,并通过抓包,对TCP的连接情况做网络判断:

k8s edge 网络安全 k8s 网络问题_k8s edge 网络安全

上图可以看出,A机器中的70,访问B机器的K8s02,是有正常的TCP三次握手连接的,但A机器中的72,则没有回包了。

这个很离奇。。。,

经过路由的排查,路由也没有增加限制。

k8s edge 网络安全 k8s 网络问题_docker_02

 所以,网络的问题就排除了

服务问题:

鉴于部分A机器能访问通B机器端口,并且,B机器第一台机器开机后,服务都正常,且查询对应pods状态也都是正常的,也可以排除。

k8s组件问题:

kubectl get pods -n kube-system

 通过以上命令,查询组件发现calico-kube-controllers服务的镜像拉下来,对应的服务挂掉了,没起来,还有相关的metrics-server。

k8s edge 网络安全 k8s 网络问题_kubernetes_03

其中,calico-kube-controllers服务是用户在k8s集群中设置了Pod的Network Policy之后,calico-kube-controllers就会自动通知各个Node上的calico-node服务,在宿主机上设置相应的iptables规则,完成Pod间网络访问策略的设置。

metrics-server服务提供容器基础资源监控能力。

反正就是这两个服务挂掉了。

找对应的组件同事重新拉了一下镜像就,网络就好了。

就是这样。

总结:

对于k8s服务,排查思路就是以上的情况,组件的问题经常会出现,这是我遇到的第三四次了,要有一定的排查方向意识。