通过内部NLB暴露ArgoCD时NLB目标组健康检查失败
解决ArgoCD内部NLB目标组健康检查失败问题
排查与修复步骤
1. 修正Service端口映射
ArgoCD Server默认监听的HTTP端口为8080,你当前Service配置中targetPort: 80与Pod实际端口不匹配,这是健康检查失败的常见原因。修改Service配置:
apiVersion: v1 kind: Service metadata: name: argocd-server-nlb namespace: argocd annotations: service.beta.kubernetes.io/aws-load-balancer-type: nlb service.beta.kubernetes.io/aws-load-balancer-internal: "true" spec: ports: - port: 80 targetPort: 8080 # 改为ArgoCD Server默认HTTP端口 protocol: TCP type: LoadBalancer selector: app.kubernetes.io/name: argocd-server
2. 确认ArgoCD Pod就绪状态
NLB会同步K8s Pod的就绪状态到目标组,先检查Pod是否正常就绪:
kubectl describe pods -n argocd -l app.kubernetes.io/name=argocd-server
查看输出中Conditions部分的Ready状态是否为True。如果Pod未就绪,优先排查ArgoCD Server启动日志,解决容器本身的问题:
kubectl logs -n argocd -l app.kubernetes.io/name=argocd-server
3. 检查安全组与网络连通性
- 确保NLB安全组允许入站TCP 80端口流量,同时允许出站到Pod 8080端口的流量。
- 确保EKS节点安全组允许NLB所属私有子网的IP段访问节点上的
8080端口(ArgoCD Pod的暴露端口)。 - 验证私有子网路由表:确保NLB所在子网能路由到EKS节点子网,无路由阻断。
4. 验证NLB目标组配置
AWS会自动为NLB创建目标组,检查目标组的健康检查设置:
- 健康检查端口需设置为
8080(对应Pod端口)。 - 若使用HTTP健康检查,路径需指定为
/healthz(ArgoCD Server内置的健康检查端点);若使用TCP检查,确保端口连通即可。
5. 集群内测试服务可用性
在集群内创建临时测试Pod,直接访问ArgoCD服务,确认服务本身正常:
kubectl run -it --rm test-pod --image=busybox:1.36 --restart=Never -- wget -qO- http://argocd-server.argocd.svc.cluster.local:8080/healthz
若返回ok,说明服务本身正常,问题集中在NLB或目标组的外部配置。
内容的提问来源于stack exchange,提问作者Reid123
相关产品推荐
相关产品推荐

