我有一个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-ing
和special-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/