You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kubernetes单Deployment第二个容器端口访问Connection refused问题

问题原因定位

首先明确核心认知:Kubernetes Pod 定义中的 containerPort 是纯声明性字段,不会实际执行端口开放、防火墙放行或端口映射操作。你遇到的 Connection refused 错误说明网络链路已经通达 Pod 所在网络命名空间,问题根源是 81 端口没有进程正常监听,和 K8s 层面的配置缺失无关。

排查&解决步骤
  • 第一步:确认第二个容器的端口监听状态
    执行以下命令进入 container2 查看实际端口监听情况:

    # 用netstat查看
    kubectl exec -it <你的Pod名称> -c container2 -- netstat -tulpn | grep 81
    # 如果镜像里没有netstat可以用ss
    kubectl exec -it <你的Pod名称> -c container2 -- ss -tulpn
    

    正常情况下应该能看到业务进程绑定在 0.0.0.0:81 的监听记录,如果没有记录直接走第二步排查。

  • 第二步:检查container2的启动参数配置
    你提到两个容器使用完全相同的镜像,仅通过 command/args 区分业务逻辑,90% 以上的此类问题都是启动参数配置错误:你给 container2 传入的参数没有把业务进程的监听端口改成81,业务默认还是尝试监听80端口。
    注意:同一个Pod内的所有容器共享网络命名空间,端口是全局唯一的,container1 已经占用了80端口,container2 如果尝试绑定80会直接失败,最终不会监听任何端口。
    可以直接查看容器日志确认启动异常:

    kubectl logs <你的Pod名称> -c container2
    

    找到业务启动时的端口配置项,把监听端口改成81重新发布即可。

  • 第三步:确认监听地址配置
    如果第一步查到进程确实在监听81端口,检查监听地址是不是 127.0.0.1:如果进程只绑定了回环地址,Pod外部、甚至同Pod的其他容器访问PodIP的81端口都会被拒绝,需要把监听地址改成 0.0.0.0。

你当前贴出的Deployment配置没有缺失K8s层面的必填项,不需要额外补充端口相关的K8s配置,问题完全出在第二个容器内部的业务启动逻辑上。


内容的提问来源于stack exchange,提问作者Yashasvi Raj Pant

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 19:03:49