Kubernetes 以后的入口子路径能否覆盖以前的入口父路径?
我有一个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
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问题上。