我有一个Kubernetes入口,如果没有更具体的匹配,我想成为一组主机上所有路径的默认入口:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: default-ing
spec:
  rules:
  - host: host1.sub.example.com
    http:
      paths:
      - backend:
          serviceName: my-default-service
          servicePort: http
        # Note: here we specify the root path intended as a default
        path: /
      - backend:
          serviceName: my-default-service
          servicePort: http
        path: /route/path/to/default

第二个入口定义用于特定路径的自定义服务:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: special-ing
spec:
  rules:
  - host: host1.sub.example.com
    http:
      paths:
      - backend:
          serviceName: special-service
          servicePort: http
        path: /special

我希望添加/删除入口的顺序无关紧要,或者至少我可以通过某种方式表明path: /中的default-ing始终排在最后。

当我尝试上述方法时,路由就可以了,只要我在special-ing之前添加default-ing(或者,先添加default-ing,然后添加special-ing,然后删除default-ing并再次重新添加)。当我将它们添加为default-ingspecial-ing时,将对/special are的请求路由到my-default-service而不是special-service

我希望添加/删除的顺序独立于nginx-ingress-controller生成的路由,以便我的kubectl操作更可靠,并且如果重新创建入口之一,则不会中断任何操作。

我正在使用nginx-ingress-controller:0.19.0
谢谢你尽你所能的帮助!

最佳答案

最简洁的答案是不。我相信您的配置应该被nginx入口 Controller 禁止或记录在某处。基本上,当您拥有两个具有相同值的hosts规则时,会发生什么:host1.sub.example.com一个正在覆盖您的Nginx入口 Controller 正在管理的server {}中的 nginx.conf 块中的另一个。

因此,如果您在default-ing之前添加special-ing,则special-ing将是实际配置。当您在special-ing之前添加default-ing时,default-ing将是您唯一的配置,special-ing根本不起作用。

  • 添加special-ing,配置如下所示:
     server {
         server_name host1.sub.example.com;
         ...
         location /special {
                            ...
         }
         location / { # default backend
                     ...
         }
         ...
    }
    
  • 现在添加default-ing,配置将更改如下:
    server {
         server_name host1.sub.example.com;
         ...
         location /route/path/to/default {
                                         ...
         }
         location / { # default backend
                     ...
         }
         ...
    }
    

  • 如果您添加它们,则配置周围的其他方式最终将类似于1.。

    您可以通过将它们插入您的nginx入口 Controller 容器中并查看nginx.conf文件来找到更多信息。
     $ kubectl -n <namespace> exec -it nginx-ingress-controller-pod sh
     # cat /etc/nginx/nginx.conf
    

    关于kubernetes - 以后的入口子路径可以覆盖以前的入口父路径吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52844089/

    10-12 23:37