腾讯云kubernetes集群网络打通的核心难点在于协议层与配置层隐性拦截:etcd需直连内网ip(2379/2380不走clb),kubelet出方向6443须放行,主机名解析缺失致tls拒绝;clb必须关闭proxy协议、设tcp健康检查、均等权重;跨可用区需开启同地域内网互通并验证cni隧道;kubeconfig中server必须填clb内网vip且证书san包含该ip。

腾讯云服务器上装 Kubernetes 集群,网络打通的核心难点不是“能不能通”,而是“怎么通得稳、管得住、扩得开”——尤其当控制平面节点跨可用区、工作节点混用公网/内网、CLB 后端又挂了多个 kube-apiserver 时,etcd 成员间心跳、kubelet 上报状态、Pod 跨节点通信这三件事最容易集体失联。
为什么腾讯云 CLB + 堆叠 etcd 组合下,节点间连通性常被误判为“网络不通”
实际多数故障不是物理链路断了,而是协议层或配置层的隐性拦截:
-
etcd成员使用https://:2380通信,但腾讯云 CLB 默认只转发6443(API Server),2379/2380端口根本没走 CLB,必须直连节点内网 IP;若节点间未配置内网互通(比如跨可用区未选“同地域内网互通”),etcd就会卡在starting状态 -
kubelet向https://<clb-vip>:6443</clb-vip>上报时,如果节点安全组没放行出方向的6443(注意:是出方向!),会出现Unable to connect to the server: net/http: request canceled while waiting for connection - 节点主机名解析失败(
/etc/hosts没配或 DNS 不一致)会导致kubeadm init生成的证书 SAN 中缺失对应 IP,后续kubeletTLS 握手直接被拒绝
CLB 四层 TCP 转发必须绕开的三个配置陷阱
腾讯云 CLB 默认开启“获取真实 IP”(PROXY 协议),但 kube-apiserver 不支持 PROXY 协议头,会导致连接直接 reset:
腾讯云通用文字识别(高精度版)技能包。用户发送/粘贴图片、提供图片URL或要求识别图片文字时自动调用。支持中文、英文、中英混合、数字及特殊符号的检测与识别,返回文字框位置与内容。适用于文字较多、版式复杂、准召率要求高的场景。
- 务必在 CLB 控制台关闭“启用 PROXY 协议”,否则所有
kubectl请求都会失败,错误日志里反复出现http: proxy error: EOF - CLB 健康检查必须设为 TCP 模式,目标端口填
6443,不能用 HTTP 检查(kube-apiserver的/healthz在未就绪前返回 500,CLB 会误判节点下线) - 后端服务器权重必须手动设为相同值,避免 CLB 轮询导致某节点
etcd成员因负载高而响应延迟,触发member x is unreachable
跨可用区节点如何确保 Pod 网络真正打通
即使所有节点能 ping 通,Calico/Flannel 的 CNI 插件仍可能无法建立隧道——因为腾讯云默认关闭了跨可用区的“内网互通”开关:
- 登录腾讯云控制台 → 云服务器 CVM → 左侧“网络与安全” → “私有网络” → 找到集群使用的 VPC → 点击“可用区互通” → 开启“同地域内网互通”
- 确认每个节点的安全组入方向放行:
UDP 8472(Flannel VXLAN)、IP Protocol 4(Calico IPIP)或TCP/UDP 51820(WireGuard,如用 k3s) - 执行
ip route show table all | grep tunl0(Calico)或ip -d link show flannel.1(Flannel),看隧道设备是否 UP 且 peer 地址指向其他节点内网 IP,而不是0.0.0.0
本地 kubectl 连接集群时,kubeconfig 里的 server 地址该填什么
填错一个字符就会连不上,且错误提示极其模糊(比如 x509: certificate is valid for ... not <your-input></your-input>):
- 绝对不要填 CLB 的公网域名或 IP —— 公网访问需额外开通且走安全组限制,调试阶段优先走内网
- 填 CLB 的内网 VIP(例如
https://10.0.1.100:6443),这个地址必须出现在kubeadm init的--apiserver-advertise-address或controlPlaneEndpoint中,否则证书不包含它 - 生成 kubeconfig 后,用
openssl x509 -in /etc/kubernetes/pki/apiserver.crt -text -noout | grep DNS核对 SAN 列表,确保含 CLB VIP 和所有节点内网 IP
最易被跳过的一步:CLB 后端节点健康检查通过后,必须手动在每台控制平面节点上执行 curl -k https://127.0.0.1:6443/healthz,确认本地 apiserver 真正就绪——否则 CLB 认为节点健康,实际流量进来就被 503。










