ArgoCD结合Istio在AKS环境下访问/argo返回404问题排查
解决ArgoCD通过Istio网关带/argo前缀访问时静态资源404的问题
问题根源
当前VirtualService使用uri: "/"的重写规则会将所有匹配/argo前缀的请求URI完全替换为/,比如请求/argo/css/main.css会被改成/,导致ArgoCD返回首页而非对应静态资源;同时需确保ArgoCD的启动参数与Istio配置匹配,保证静态资源路径正确映射。
修复步骤
1. 修正VirtualService的重写规则
将原有的rewrite.uri替换为rewrite.prefixRewrite,仅替换URI前缀部分,而非整个路径:
apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: argocd-server namespace: argocd spec: hosts: - <FQDN> gateways: - istio-system/global-gateway http: - match: - uri: prefix: "/argo" rewrite: prefixRewrite: "/" # 替换前缀而非整个URI route: - destination: host: argocd-server.argocd.svc.cluster.local port: number: 80
2. 确保ArgoCD Deployment启动参数正确
验证argocd-server的Deployment args包含以下配置(若缺失则添加):
args: - --insecure # 适配网关SSL终止后的HTTP访问 - --staticassets /usr/share/argocd/ui # 指定静态资源目录 - --server.basehref /argo # 匹配Istio的前缀路径
3. 配置DestinationRule禁用后端TLS
确保Istio与ArgoCD后端通信使用HTTP,避免TLS握手问题:
apiVersion: networking.istio.io/v1alpha3 kind: DestinationRule metadata: name: argocd-server namespace: argocd spec: host: argocd-server.argocd.svc.cluster.local trafficPolicy: tls: mode: DISABLE
验证操作
- 应用更新后的配置:
kubectl apply -f argocd-virtualservice.yaml kubectl apply -f argocd-destinationrule.yaml kubectl rollout restart deployment argocd-server -n argocd
- 访问
<FQDN>/argo,打开Chrome开发者工具的网络面板,确认所有静态资源(CSS、JS等)返回200状态码。
内容的提问来源于stack exchange,提问作者user1314147
相关产品推荐
相关产品推荐

