Kubernetes Ingress配置后ArgoCD访问返回200但显示空白页问题咨询
问题根因
你遇到的问题由三处配置错误共同导致:
- 注解冲突:
nginx.ingress.kubernetes.io/ssl-passthrough: "true"与nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"互斥。SSL透传模式下Ingress Controller不会解密TLS流量,路径重写、后端协议配置等需要解析流量的规则全部失效,同时日志中出现的SSL_do_handshake() failed报错,是因为你用HTTPS协议请求了ArgoCD服务的HTTP端口。 - 重写规则无效:你未开启
nginx.ingress.kubernetes.io/use-regex正则匹配注解,路径规则也没有设置捕获组,rewrite-target: /argo-cd/$2中的$2无法匹配到任何路径参数,重写后的路径不符合后端服务要求。 - ArgoCD未配置子路径支持:ArgoCD默认以根路径提供服务,你通过
/argo-cd子路径访问时,ArgoCD返回的页面中静态资源(CSS、JS)的引用路径都是/开头,浏览器会从站点根路径请求资源,资源加载失败就会出现返回200但页面空白的问题。
修复步骤
1. 配置ArgoCD子路径支持
修改ArgoCD Server的启动参数,添加--rootpath=/argo-cd,或直接修改ArgoCD ConfigMap中的server.rootpath字段为/argo-cd,重启ArgoCD Server Pod生效。这一步是子路径访问ArgoCD的必填配置,不可省略。
2. 修正Ingress配置
删除冲突的ssl-passthrough注解,补全正则匹配规则,参考配置如下:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: argocd-server-ingress namespace: argocd annotations: kubernetes.io/ingress.class: nginx nginx.ingress.kubernetes.io/force-ssl-redirect: "true" nginx.ingress.kubernetes.io/backend-protocol: "HTTPS" nginx.ingress.kubernetes.io/use-regex: "true" nginx.ingress.kubernetes.io/rewrite-target: /$2 spec: rules: # 建议配置专属host避免路径匹配冲突,不需要可删除host字段 - host: argocd.example.com http: paths: - path: /argo-cd(/|$)(.*) pathType: Prefix backend: service: name: argocd-server port: number: 443
如果你必须使用SSL透传模式,则不能使用路径区分服务,需要单独给ArgoCD配置专属域名,删除backend-protocol、rewrite-target、use-regex等注解即可。
3. 校验ArgoCD Service端口映射
确认argocd-server服务的443端口对应的Pod端口是ArgoCD的HTTPS端口(默认是8443),避免误映射到8080的HTTP端口导致SSL握手失败。
内容的提问来源于stack exchange,提问作者X T
相关产品推荐
相关产品推荐

