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

Helm Chart测试连接失败:mysvc:443连接被拒绝求助

问题排查与解决方案

核心原因分析

你遇到的Connection refused和nmap显示443/tcp closed,本质是Service的443端口没有关联到后端Pod的Endpoint——虽然Pod的3000端口正常、探针工作,但Service无法找到对应的Pod来转发流量。

排查步骤与修复方案

1. 检查Service与Pod的Label匹配

执行命令查看当前Service的Endpoint状态:

kubectl get endpoints <你的Service名称> -n <部署namespace>

如果输出中ENDPOINTS列是空的,说明Service的selector没有匹配到Pod的labels。

修复:
确保Service的selector完全匹配Pod的labels。比如helm create生成的默认Pod labels通常是app.kubernetes.io/name: <chart名>,你需要同步修改Service的selector:

# Service.yaml 片段
selector:
  app.kubernetes.io/name: <你的chart名称>

2. 验证Service端口配置正确性

检查Service的port定义是否包含必要字段,避免语法或逻辑错误:

# Service.yaml 正确示例
ports:
  - port: 443               # 对外暴露的端口
    targetPort: 3000        # 转发到Pod的端口
    protocol: TCP           # 明确指定协议(默认是TCP,但显式定义更稳妥)
    name: https             # 端口名称(可选,但Ingress引用时可能需要)

注意:targetPort可以是数字或字符串(如果Pod的containers.ports定义了name),但必须和Pod实际监听的端口一致。

3. 确认测试Pod与Service的Namespace一致性

helm test默认在Release对应的Namespace中运行测试Pod,若Service部署在其他Namespace,需使用FQDN访问:

wget mysvc.<Service所在Namespace>.svc.cluster.local:443

4. 排查NetworkPolicy限制

如果集群启用了NetworkPolicy,需确认是否存在规则阻止测试Pod访问Service的443端口。执行命令查看当前Namespace的NetworkPolicy:

kubectl get networkpolicy -n <部署namespace>

若存在拒绝访问的规则,需添加允许测试Pod(或所有Pod)访问Service的策略。

5. 验证kube-proxy状态

如果以上步骤都正常,检查节点上的kube-proxy是否正常运行,确保Service的IP和端口规则已正确同步:

kubectl get pods -n kube-system -l k8s-app=kube-proxy

若kube-proxy异常,重启对应Pod即可。

内容的提问来源于stack exchange,提问作者Vana

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 23:03:16