2

我有一个 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: /indefault-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

谢谢你尽你所能的帮助!

4

1 回答 1

2

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

因此,如果您default-ing之前的添加special-ingspecial-ing是实际的配置。当您在special-ing此之前添加default-ing时,这default-ing将是您唯一的配置,special-ing根本不应该工作。

  1. 添加special-ing,配置看起来像这样:

     server {
         server_name host1.sub.example.com;
         ...
         location /special {
                            ...
         }
         location / { # default backend
                     ...
         }
         ...            
    }
    
  2. 现在添加default-ing,配置将更改为:

    server {
         server_name host1.sub.example.com;
         ...
         location /route/path/to/default {
                                         ...
         }
         location / { # default backend
                     ...
         }
         ...
    }
    

如果你以另一种方式添加它们,配置将看起来像 1. 最后。

您可以通过打开您的 nginx 入口控制器 pod 并查看nginx.conf文件来找到更多信息。

 $ kubectl -n <namespace> exec -it nginx-ingress-controller-pod sh
 # cat /etc/nginx/nginx.conf
于 2018-10-16T23:51:25.463 回答