先验证本地kubectl能否真正访问tke集群:下载匹配网络类型的kubeconfig(外网/内网)并保存至$home/.kube/config,运行kubectl cluster-info和kubectl get nodes -o wide确认连通;常见失败包括i/o timeout(网络或安全组问题)和forbidden(权限配置错误或过期)。

确认 TKE 集群已就绪且 kubectl 可连通
没连上集群,后面所有操作都无效。先验证本地 kubectl 是否能真正访问目标 TKE 集群。
登录腾讯云容器服务控制台 → 进入目标集群详情页 → 点击「获取 KubeConfig」→ 下载并保存到 $HOME/.kube/config(或指定路径)。注意:下载时请选择「外网访问」或「内网访问」与你执行 kubectl 的机器网络匹配;若用跳板机或 CI 环境,需确保该机器能直连集群 API Server 地址(通常是公网 VIP 或 VPC 内网地址)。
运行以下命令验证:
kubectl cluster-info kubectl get nodes -o wide
常见失败现象:Unable to connect to the server: dial tcp xxx:443: i/o timeout —— 多半是网络不通或安全组未放行 443 端口;Forbidden: User "system:anonymous" cannot ... —— KubeConfig 权限配置错误或过期,需重新下载。
Go 应用必须监听 0.0.0.0:8080 而非 127.0.0.1:8080
Kubernetes Pod 内部网络模型要求容器进程绑定到 0.0.0.0,否则 Service 流量无法进入容器。Go 默认的 http.ListenAndServe(":8080", nil) 是 OK 的(它等价于 0.0.0.0:8080),但若显式写了 "127.0.0.1:8080" 就会失败。
检查你的 main.go:
http.ListenAndServe(":8080", nil) // ✅ 正确
http.ListenAndServe("127.0.0.1:8080", nil) // ❌ Pod 内其他容器/Service 访问不到
另外,确保 Dockerfile 中 EXPOSE 8080 与代码监听端口一致;Kubernetes containerPort 必须与之相同,否则 readiness/liveness 探针或 Service 转发可能失效。
腾讯云通用文字识别(高精度版)技能包。用户发送/粘贴图片、提供图片URL或要求识别图片文字时自动调用。支持中文、英文、中英混合、数字及特殊符号的检测与识别,返回文字框位置与内容。适用于文字较多、版式复杂、准召率要求高的场景。
Deployment YAML 中必须显式设置 readinessProbe 和 livenessProbe
TKE 集群默认不强制健康检查,但生产环境 Go 应用一旦启动慢、卡死或 panic 后不退出,没有探针会导致流量持续打到异常 Pod,引发雪崩。
最小可行探针配置示例(假设你在 /health 提供 HTTP 健康端点):
livenessProbe:
httpGet:
path: /health
port: 8080
initialDelaySeconds: 30
periodSeconds: 10
readinessProbe:
httpGet:
path: /health
port: 8080
initialDelaySeconds: 5
periodSeconds: 5
关键点:
-
initialDelaySeconds要大于 Go 应用冷启动耗时(比如加载配置、连 DB),否则 Pod 可能反复被杀 - 避免用 TCP 探针代替 HTTP 探针——Go net/http 服务即使 panic 也可能还占着端口,TCP 能通但 HTTP 已不可用
- 不要省略
port字段,它必须是containerPort的数值,不能写成字符串
镜像拉取失败?优先检查命名空间 + Secret + 镜像地址格式
TKE 集群拉不到私有镜像,90% 情况不是网络问题,而是认证或路径错误。
如果你用的是腾讯云 Tencent Hub(ccr.ccs.tencentyun.com)或其他私有仓库,必须:
- 在目标 Namespace(如
default或自建的go-prod)中创建docker-registry类型的 Secret:kubectl create secret docker-registry tcr-secret --docker-server=ccr.ccs.tencentyun.com --docker-username=xxx --docker-password=xxx --docker-email=unused - Deployment YAML 中引用该 Secret:
imagePullSecrets: [{name: tcr-secret}] - 镜像地址必须完整:例如
ccr.ccs.tencentyun.com/your-namespace/go-app:v1.2.3,漏掉命名空间或写错 registry 域名都会报ImagePullBackOff
临时调试可先把镜像推到公开仓库(如 Docker Hub),或改用 imagePullPolicy: IfNotPresent + 手动 docker load 到节点(仅限测试)。
最易被忽略的一点:TKE 控制台创建的集群默认启用「节点池自动伸缩」和「VPC-CNI 网络插件」,但如果你的应用依赖 hostNetwork、特权模式或特定 sysctl 参数,这些默认策略会静默拒绝 Pod 创建——此时 kubectl describe pod 的 Events 里会出现 FailedCreatePodSandBox 或 Forbidden,而不是镜像或探针类错误。遇到 Pod 卡在 Pending,第一反应不该是查镜像,而是看 Events。










