Kubernetes 以后的入口子路径能否覆盖以前的入口父路径?

Kubernetes 以后的入口子路径能否覆盖以前的入口父路径?,kubernetes,nginx-ingress,Kubernetes,Nginx Ingress,我有一个Kubernetes入口,我希望它是一组主机上所有路径的默认入口,前提是没有更具体的匹配: apiVersion: extensions/v1beta1 kind: Ingress metadata: name: default-ing spec: rules: - host: host1.sub.example.com http: paths: - backend: serviceName: my-default-serv

我有一个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
我希望添加/删除入口的顺序无关紧要,或者至少我可以用某种方式指示
默认ing中的
路径:/
始终是最后一个顺序

当我尝试上述操作时,只要我在
默认ing
之前添加
特殊ing
(或者,添加
默认ing
,然后添加
特殊ing
,然后删除
默认ing
,然后重新添加),路由就可以了。当我将它们添加为
默认ing
,然后添加为
特殊ing
,对
/special的请求将被路由到
我的默认服务
,而不是
特殊服务

我希望添加/删除的顺序独立于nginx入口控制器生成的路由,以便我的kubectl操作更加健壮,并且如果重新创建一个入口,则不会有任何中断

我使用的是
nginx入口控制器:0.19.0


谢谢你能提供的任何帮助

简短的回答是否定的。我认为您的配置应该被nginx入口控制器禁止或记录在某个地方。基本上,当您有两个具有相同值的
hosts
规则时会发生什么:
host1.sub.example.com
一个正在覆盖您的nginx入口控制器正在管理的
nginx.conf
块中的另一个

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

  • 添加
    特殊ing
    ,配置如下所示:

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

     server {
         server_name host1.sub.example.com;
         ...
         location /special {
                            ...
         }
         location / { # default backend
                     ...
         }
         ...            
    }
    
    server {
         server_name host1.sub.example.com;
         ...
         location /route/path/to/default {
                                         ...
         }
         location / { # default backend
                     ...
         }
         ...
    }
    
  • 如果您以另一种方式添加它们,则配置将类似于1。最后

    您可以通过炮击nginx入口控制器吊舱并查看
    nginx.conf
    文件找到更多信息

     $ kubectl -n <namespace> exec -it nginx-ingress-controller-pod sh
     # cat /etc/nginx/nginx.conf
    
    $kubectl-n exec-it nginx入口控制器吊舱sh
    #cat/etc/nginx/nginx.conf
    
    我将检查nginx.conf实际上是什么,如果我想要的东西可以很容易地描述的话,我将把它带到Github问题上。