如何将Nginx配置转换为入口kubernetes yaml配置?

时间:2019-05-13 07:43:47

标签: nginx url-rewriting kubernetes-ingress nginx-ingress

我在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

2 个答案:

答案 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;
    } 
...