蓝盾公共构建机(Docker)超时问题排查

在使用蓝盾公共构建机(Docker)时,我们发现构建机偶尔无法就绪。排查后发现,问题出在拉起的 Pod 在安装蓝盾 Agent 时卡住。经进一步分析,这是由于该 Pod 与 Nginx Ingress Pod 被调度到了同一节点,而同节点访问异常。

背景

在阿里云ACK集群中,出现同节点访问异常的网络现象:

场景流量路径结果
同节点Pod → CLB VIP → 同节点 NodePort → 被 CLB 丢弃(回环限制)❌ 超时
跨节点Pod → CLB VIP → 其他节点 NodePort → Ingress Pod✅ 正常
  • 跨节点访问正常:业务 Pod 与 Nginx Ingress Controller 部署在不同节点时,通过 CLB 访问服务完全正常。
  • 同节点访问超时:当业务 Pod 与 Ingress Controller 调度到同一节点时,TCP 连接超时:
    # 在Pod内测试
    curl http://devops.bk.xxx.xxx/static/local/files/docker_init.sh
    # 返回错误
    curl: (28) Failed to connect to devops.bk.xxx.xxx port 80: Connection timed out

关键组件

  • Kubernetes 1.20.11 + Terway网络插件(非ENITrunking模式)
  • Nginx Ingress 0.44.0(externalTrafficPolicy: Local)
  • CLB 类型:四层TCP监听(端口80)
  • 服务转发模式:IPVS

排查过程

基础检查

网络连通性测试:

# DNS解析正常
ping devops.bk.xxx.xxx # 返回CLB VIP 10.200.x.x

# TCP连接失败(同节点)
telnet 10.200.x.x 80 # Connection timed out

安全组验证:

已确认放行VPC内网段(10.200.0.0/16, 100.100.0.0/16),排除ACL拦截。

流量路径分析

CLB后端健康状态:

kubectl get endpoints -n kube-system nginx-ingress-controller
ENDPOINTS: 10.212.x.x:80,10.212.x.x:443 # 正常

Ingress Controller配置:
externalTrafficPolicy: Local导致 CLB 只会将流量转发到有 Ingress Pod 的节点。

节点网络抓包:
在Ingress节点执行抓包后,发现 CLB 的请求包能到达节点,但未转发到 Ingress Pod。

根因定位

阿里云 CLB 对四层TCP监听器默认禁止回环流量(即后端服务器通过 CLB VIP访问自身服务),相关阿里云文档

解决方案

当前使用修改CoreDNS配置的临时方案,其他方案待评估后实施。

修改CoreDNS配置(临时)

将相关域名解析到 Ingress Service 的内网IP(如ClusterIP),绕过 CLB。

更新集群组件

  • 升级 Nginx Ingress :使用新版本,已修复兼容性问题。
  • 升级 Terway 插件:使用最新版本,优化节点内流量路由。

参考