15.5 节点与Pod的通信

经过简单的测试,我们发现,这个问题实际上是API Server和Metrics Server Pod之间的通信问题。在阿里云Kubernetes集群环境里,API Server使用的是主机网络,即ECS的网络,而Metrics Server使用的是Pod网络。这两者之间的通信,依赖于VPC路由表的转发,如图15-5所示。

以图15-5为例,如果API Server运行在Node A上,那它的IP地址就是192.168.0.193。假设Metrics Server的IP是地址172.16.8.249,那么从API Server到Metrics Server的网络连接,必须要通过VPC路由表第一条路由规则转发。

检查集群VPC路由表,发现指向Metrics Server所在节点的路由表项缺失,所以API Server和Metrics Server之间的通信出了问题。

为了维持集群VPC路由表项的正确性,阿里云在Cloud Controller Manager内部实现了Route Controller。这个Controller在时刻监听着集群节点状态,以及VPC路由表状态。当发现路由表项缺失的时候,它会自动把缺失的路由表项填写回去。

图15-5 集群网络概览

现在的情况和预期不一致,Route Controller显然没有正常工作,这可以通过查看Cloud Controller Manager日志来确认。在日志中我们发现,Route Controller在使用集群VPC ID去查找VPC实例的时候,没有办法获取到这个实例的信息。

● 路由控制器无法获取VPC实例。

但是集群还在,ECS还在,所以VPC不可能不在了。这一点我们可以通过VPC ID在VPC控制台确认。那下面的问题,就是为什么Cloud Controller Manager没有办法获取到这个VPC的信息。