我创建了一个链接到两个服务的 nginx 入口 Controller 。网站工作正常,但 js 和 css 文件未加载到 HTML 页面 (404) 错误中。我使用 helm 创建了 nginx pod,并将 nginx 配置包含在 ingress.yaml 中。当我使用 nginx 时出现错误,我在本地运行 docker 镜像,它工作正常。另外,如果我将服务类型设置为负载均衡器,则应用程序可以正常工作。
![here is the error in the webpage ] 1
这是 GKE 服务:
入口.yaml:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
creationTimestamp: 2019-07-08T08:35:52Z
generation: 1
name: www
namespace: default
resourceVersion: "171166"
selfLink: /apis/extensions/v1beta1/namespaces/default/ingresses/www
uid: 659594d6-a15b-11e9-a671-42010a980160
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/rewrite-target: /
nginx.ingress.kubernetes.io/ssl-redirect: "true"
spec:
rules:
- host: twitter.domain.com
http:
paths:
- backend:
serviceName: twitter
servicePort: 6020
- host: events.omarjs.com
http:
paths:
- backend:
serviceName: events
servicePort: 6010
- http:
paths:
- backend:
serviceName: twitter
servicePort: 6020
path: /twitter
- backend:
serviceName: events
servicePort: 6010
path: /events
tls:
- secretName: omarjs-ssl
status:
loadBalancer: {}
twitter.yaml:
apiVersion: v1
kind: Service
metadata:
creationTimestamp: 2019-07-07T20:43:49Z
labels:
run: twitter
name: twitter
namespace: default
resourceVersion: "27299"
selfLink: /api/v1/namespaces/default/services/twitter
uid: ec8920ca-a0f7-11e9-ac47-42010a98008f
spec:
clusterIP: 10.7.253.177
externalTrafficPolicy: Cluster
ports:
- nodePort: 31066
port: 6020
protocol: TCP
targetPort: 3020
selector:
run: twitter
sessionAffinity: None
type: NodePort
status:
loadBalancer: {}
apiVersion: v1
kind: Service
metadata:
creationTimestamp: 2019-07-07T20:43:49Z
labels:
run: twitter
name: twitter
namespace: default
resourceVersion: "27299"
selfLink: /api/v1/namespaces/default/services/twitter
uid: ec8920ca-a0f7-11e9-ac47-42010a98008f
spec:
clusterIP: 10.7.253.177
externalTrafficPolicy: Cluster
ports:
- nodePort: 31066
port: 6020
protocol: TCP
targetPort: 3020
selector:
run: twitter
sessionAffinity: None
type: NodePort
status:
loadBalancer: {}
最佳答案
您可能可以通过添加额外的入口规则来解决您的问题,这些规则会将静态文件的请求路由到正确的目录。据我在所附的打印屏幕上看到,您的静态文件分别放置在 css
和 js
目录中,因此您需要向您的 添加 4 个附加规则>ingress.yaml
。该片段的最终版本可能如下所示:
- http:
paths:
- backend:
serviceName: twitter
servicePort: 6020
path: /twitter
- backend:
serviceName: twitter
servicePort: 6020
path: /css
- backend:
serviceName: twitter
servicePort: 6020
path: /js
- backend:
serviceName: events
servicePort: 6010
path: /events
- backend:
serviceName: events
servicePort: 6010
path: /css
- backend:
serviceName: events
servicePort: 6010
path: /js
关于kubernetes - nginx 入口 Controller 忽略 css 和 js 文件 - google kuberenetes 引擎,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56932751/