我在kubernetes上部署了Vue JS。而且我需要像在此页面上那样配置nginx路由:
https://router.vuejs.org/guide/essentials/history-mode.html#example-server-configurations
配置如下:
location / {
try_files $uri $uri/ /index.html;
}
如何将该配置转换为入口kubernetes yaml配置?
我尝试了这个,但是没用
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /index.html
name: backoffice
namespace: default
selfLink: /apis/extensions/v1beta1/namespaces/default/ingresses/backoffice
spec:
rules:
- host: dev.abc.com
http:
paths:
- backend:
serviceName: backoffice-svc
servicePort: 443
path: /
我尝试使用此批注,但仍然无法正常工作:
nginx.ingress.kubernetes.io/app-root: /app1
答案 0 :(得分:1)
很可能,我今天遇到的情况与您相同。由于 nginx 入口控制器位于另一个隔离的 pod 中,因此 nginx 入口控制器中生成的 nginx 规则无法检测您服务上的文件和资源。它只是将请求转发给您的服务。放置 try_files 指令的正确位置应该在您的服务的 pod 中。
我的工作案例如下: 我的服务 pod 中有一个 nginx 容器,我将“try_files $uri $uri/ /index.html;”放在 /etc/nginx/conf.d/default.conf
答案 1 :(得分:0)
Ingress可能如下所示:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: some-nice-server
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/ssl-redirect: "false"
nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
rules:
- host: "some.nice.server.com"
http:
paths:
- path: /something1/?(.*)
backend:
serviceName: something-1
servicePort: 8080
Kubernetes Ingress-Nginx文档中对此进行了很好的解释。
或者,您也可以在注释中使用Configuration snippet:
...
nginx.ingress.kubernetes.io/configuration-snippet: |
location / {
try_files $uri $uri/ /index.html;
}
...