GKE集群中NGINX Ingress静态文件无法加载问题排查
问题根源
你的Ingress配置仅匹配了/vfb-pod-one/开头的请求路径,但静态文件的请求路径以/cde-760a98e0f62f1b63edd3544c6547f81ba446e8c8/开头,没有对应的Ingress路径规则,导致这些请求无法转发到后端服务,因此加载失败。NodePort能正常访问是因为请求直接打到服务,不需要经过Ingress的路径匹配逻辑。
解决方案
需要在Ingress的paths中添加匹配静态文件前缀的规则,分两种场景处理:
场景1:前缀为固定值(cde-760a98e0f62f1b63edd3544c6547f81ba446e8c8不会变化)
在rules.http.paths下新增一条路径规则:
- path: /cde-760a98e0f62f1b63edd3544c6547f81ba446e8c8(/|$)(.*) pathType: ImplementationSpecific backend: service: name: vfb-pod-one port: number: 8000
场景2:前缀为动态生成值(每次部署会生成新的cde-xxx字符串)
用正则匹配所有以cde-开头、后跟十六进制字符的路径:
- path: /cde-[a-f0-9]+(/|$)(.*) pathType: ImplementationSpecific backend: service: name: vfb-pod-one port: number: 8000
修改后的完整Ingress配置示例
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: ms-ingress namespace: code-oss annotations: cert-manager.io/cluster-issuer: letsencrypt-prod nginx.ingress.kubernetes.io/add-headers: 'Cache-Control: max-age=31536000; public' nginx.ingress.kubernetes.io/enable-access-log: "true" nginx.ingress.kubernetes.io/enable-debug: "true" nginx.ingress.kubernetes.io/proxy-buffering: "on" nginx.ingress.kubernetes.io/rewrite-target: /$2 nginx.ingress.kubernetes.io/ssl-redirect: "true" nginx.ingress.kubernetes.io/use-regex: "true" spec: ingressClassName: nginx tls: - hosts: - example.com - www.example.com secretName: ms-app-tls rules: - host: example.com http: paths: - path: /vfb-pod-one(/|$)(.*) pathType: ImplementationSpecific backend: service: name: vfb-pod-one port: number: 8000 # 新增静态文件路径匹配规则 - path: /cde-[a-f0-9]+(/|$)(.*) pathType: ImplementationSpecific backend: service: name: vfb-pod-one port: number: 8000
注意事项
- 保留
nginx.ingress.kubernetes.io/use-regex: "true"配置,确保正则路径能被NGINX Ingress正确解析 rewrite-target: /$2的配置会将路径中(/|$)之后的部分转发到后端服务,和现有规则的转发逻辑一致,保证后端服务能正确处理请求路径
内容的提问来源于stack exchange,提问作者Umamaheswararao Meka
相关产品推荐
相关产品推荐

