我部署了一个 AWS EKS 集群,然后部署了一个 nginx-ingress-controller。
然后我尝试在集群上部署ArgoCD。入口似乎工作正常,当我尝试 myloadbalancerDNS.com/argo 时,对我的负载均衡器 DNS 主机名的请求返回 200
但是没有加载任何静态资源,我的路线/路径规则有问题。
这是我的入口
alb.ingress.kubernetes.io/ssl-passthrough: "true"
kubernetes.io/ingress.class: nginx
meta.helm.sh/release-name: argocd
meta.helm.sh/release-namespace: argo
nginx.ingress.kubernetes.io/backend-protocol: HTTP
nginx.ingress.kubernetes.io/force-ssl-redirect: "false"
nginx.ingress.kubernetes.io/rewrite-target: /$1
nginx.ingress.kubernetes.io/use-regex: "true"
creationTimestamp: "2024-02-27T17:22:38Z"
generation: 7
labels:
app.kubernetes.io/component: server
app.kubernetes.io/instance: argocd
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/name: argocd-server
app.kubernetes.io/part-of: argocd
app.kubernetes.io/version: v2.10.1
helm.sh/chart: argo-cd-6.2.3
name: argocd-server
namespace: argo
resourceVersion: "302643"
uid: 09919fd3-d032-4dba-9fa7-0e693e797357
spec:
ingressClassName: nginx
rules:
- host: a3d5ec6525a3642b1a50bc17d3e46b34-221545762.eu-west-1.elb.amazonaws.com
http:
paths:
- backend:
service:
name: argocd-server
port:
number: 443
path: /argo/?(.*)
pathType: Exact
请注意,当我运行
curl a3d5ec6525a3642b1a50bc17d3e46b34-221545762.eu-west-1.elb.amazonaws.com/argo/assets/fonts.css
时它可以工作,但是当我在浏览器 a3d5ec6525a3642b1a50bc17d3e46b34-221545762.eu-west-1.elb.amazonaws.com/argo 上访问该页面时,它会为所有静态资产返回 404 错误
所以 TL;DR
当我访问 myLoadBalancer.com/argo 时,我希望我的 nginx-ingress-controller 从 myLoadBalancer.com/argo/assets/etc 加载资产,但它会直接查找 myLoadBalancer.com/assets
您的问题似乎与 Nginx Ingress Controller 为您的 ArgoCD 实例重写路径的方式有关。
您当前的
pathType
是 Exact
,这意味着它只会匹配确切的路径 /argo/?(.*)
https://kubernetes.io/docs/concepts/services-networking/ingress/#path-types。这可能不是您想要的,因为您需要处理 /argo
下的路径,例如 /argo/assets/fonts.css
。考虑将 pathType
更改为 Prefix
或调整路径正则表达式以正确处理子路径:
path: /argo(/|$)(.*)
pathType: Prefix
您可以使用
curl
测试各种路径,以确保入口按预期路由流量,并检查 Nginx 入口控制器的日志以查看请求的处理方式以及请求的转发位置。