最近发现k8s容器内无法访问内网的负载均衡,直接访问后端CVM也不行。
使用的是腾讯云的TKE和clb,clb后端负载了三个CVM服务器。
其他集群容器内部都可以通过内网访问这个clb和cvm。
在排查了所有的安全组,防火墙限制,以及容器节点组件问题以后给腾讯云提交了一个工单。
最终原因是因为TKE容器的网段和CVM里面的docker网段冲突了导致无法访问。
TKE的GlobalRouter网络插件是让容器内网络和VPC在同一个层面,这就导致了网络并不是独立的,所以和CVM里面的docker网段冲突了。
GlobalRouter 网络模式是容器服务 TKE 基于底层私有网络 VPC 的全局路由能力,实现了容器网络和 VPC 互访的路由策略。该网络模式特征包含以下几点:
容器路由直接通过 VPC。
容器与节点分布在同一网络平面。
容器网段分配灵活,容器 IP 段不占用 VPC 的其他网段。
我也看了下关于GlobalRouter的限制:
我在使用阿里云ACK的Terway网络插件也是遇到过类似的问题,所以使用GlobalRouter、Terway这种类似插件尽量还是单独用一个网段,不要使用172.16网段。
我的解决方案是配置CVM的公网IP进行访问或者更改docker容器网段。