EKS上ArgoCD Server Ingress返回404问题排查求助
结合你提供的Terraform配置、Helm Values文件及Ingress描述信息,可能的原因及修复建议如下:
1. Ingress Class 未正确关联NGINX控制器
从kubectl describe ingress结果可见Ingress Class: <none>,但你的Helm Values中仅使用了旧版注解kubernetes.io/ingress.class: "nginx"。在Kubernetes 1.19+版本中,官方已推荐使用ingressClassName字段替代该注解,若集群使用较新版本K8s,旧注解可能无法被NGINX Ingress控制器识别,导致Ingress未绑定到正确的控制器,从而返回404。
修复建议:
在Helm Values的server.ingress节点下添加ingressClassName字段:
server: ingress: enabled: true ingressClassName: "nginx" # 新增该行,优先使用此字段绑定控制器 annotations: kubernetes.io/ingress.class: "nginx" # 可保留以兼容旧版本 # 其他原有注解...
2. SSL Passthrough功能未启用或端口映射冲突
你的Ingress配置了nginx.ingress.kubernetes.io/ssl-passthrough: true注解,该功能要求NGINX Ingress控制器启动时必须添加--enable-ssl-passthrough参数,若控制器未开启此参数,会导致SSL流量无法正确转发到ArgoCD Server,进而出现404。
另外,从Ingress描述的Backend信息argocd-server:443 (172.31.100.155:8080)可见:ArgoCD Server的Service 443端口映射到了容器的8080端口,但ArgoCD Server默认8080是HTTP端口,8443才是HTTPS端口。若启用SSL Passthrough,需确保Service端口与容器端口匹配正确。
检查与修复:
- 执行
kubectl get deployment nginx-ingress-controller -n <ingress-namespace>,查看控制器启动参数是否包含--enable-ssl-passthrough - 执行
kubectl get svc argocd-server -n argocd,确认Service的443端口是否映射到容器的8443端口(而非8080)
3. Ingress路径规则配置异常
当前Ingress仅配置了根路径/,虽然端口转发正常,但如果NGINX Ingress的路径匹配模式存在异常(如精确匹配而非前缀匹配),也可能导致子路径请求返回404。
验证建议:
临时添加以下注解到Ingress配置中测试:
nginx.ingress.kubernetes.io/use-regex: "true" nginx.ingress.kubernetes.io/rewrite-target: /$1
4. 次要配置问题(需修正但不直接导致404)
你的Helm Values中kustomize.buildOptions: "--enable_apha_plugins"存在拼写错误,应为--enable_alpha_plugins,该错误会导致Kustomize插件功能异常,建议修正。
内容的提问来源于stack exchange,提问作者albeiro

