我已在 GKE 集群上设置了 NGINX Ingress Controller。我可以获得 IP 地址并成功将其映射到我的域。但是,我无法加载静态文件,这些文件是我的父图像的一部分:
europe-west1-docker.pkg.dev/cloud-workstations-images/predefined/code-oss:latest
这些静态文件无法加载:
https://example.com/cde-760a98e0f62f1b63edd3544c6547f81ba446e8c8/static/out/vs/code/browser/workbench/workbench.css
https://example.com/cde-760a98e0f62f1b63edd3544c6547f81ba446e8c8/static/out/vs/code/browser/workbench/workbench.js
https://example.com/cde-760a98e0f62f1b63edd3544c6547f81ba446e8c8/static/out/nls.messages.js
但是,通过我的 NodePort 服务 URL 访问时,相同的文件可以正确加载:
http://node-ip:30953/cde-760a98e0f62f1b63edd3544c6547f81ba446e8c8/static/out/vs/code/browser/workbench/workbench.css
http://node-ip:30953/cde-760a98e0f62f1b63edd3544c6547f81ba446e8c8/static/out/vs/code/browser/workbench/workbench.js
http://node-ip:30953/cde-760a98e0f62f1b63edd3544c6547f81ba446e8c8/static/out/nls.messages.js
这是我当前的 Ingress 配置:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ms-ingress # Reference the first ingress item
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
这是 pod 容器内的文件路径:
要访问容器,我使用以下命令:
kubectl exec -it vfb-pod-one-754c874778-qxqkv -n code-oss -- /bin/bash
pod 默认路径为
/home/user/vfb-contrib
,我的静态文件位于该路径之外。请参阅下图了解文件位置。
我在这里缺少什么?我认为我的 Ingress 配置中忽略了一些东西,但我不确定它是什么。
这很奇怪。添加默认路径后它就起作用了。
default:
path: /(.*)
pathType: ImplementationSpecific
backend:
serviceName: vfb-pod-one
servicePortNumber: 8000