Kubernetes 使用同一主机的多个入口控制器
我有两个入口控制器(用于公共/内部流量),我希望所有端点都使用公共入口,但/metrics除外,它应该是内部的,并且都使用相同的主机 例如 这就是我尝试过的: 内部入口Kubernetes 使用同一主机的多个入口控制器,kubernetes,kubernetes-ingress,nginx-ingress,Kubernetes,Kubernetes Ingress,Nginx Ingress,我有两个入口控制器(用于公共/内部流量),我希望所有端点都使用公共入口,但/metrics除外,它应该是内部的,并且都使用相同的主机 例如 这就是我尝试过的: 内部入口 apiVersion: extensions/v1beta1 kind: Ingress metadata: name: example-metrics-ingress annotations: kubernetes.io/ingress.class: ingress-internal spec: rules
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: example-metrics-ingress
annotations:
kubernetes.io/ingress.class: ingress-internal
spec:
rules:
- host: example.com
http:
paths:
- path: /metrics
backend:
serviceName: example-servicename
servicePort: 80
和公众进入
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: example-ingress
annotations:
kubernetes.io/ingress.class: nginx
spec:
rules:
- host: example.com
http:
paths:
- path:
backend:
serviceName: example-servicename
servicePort: 80
当我访问example.com/metrics时,内部入口当前被忽略(它使用公共入口)
如果我将内部入口更改为使用与公共入口相同的入口控制器,并将服务端口更改为81(例如),这将提供一个错误(这是预期的),这表明正在使用两个不同的入口。然而,只要我使用两个不同的入口控制器,那么一个入口的规则就不会被接受
如何配置ingress以获得所需的结果?当运行多个ingress nginx控制器时,如果其中一个控制器使用默认的
--ingress class
值(请参见内部/ingress/annotations/class/main.go
中的IsValid
方法),它将只处理未设置的类注释,否则,将需要类注释
如果--入口类
设置为nginx
的默认值,则控制器将监控无类别注释的入口和注释类设置为nginx
的入口。为--入口等级使用非默认值,以确保控制器仅满足特定的入口等级
在您的情况下,使用注释kubernetes.io/ingres.class:“外部|内部”
和标志--ingres class=EXTERNAL |内部
的组合可以过滤nginx入口控制器应选择的入口规则
看一看:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: example-ingress
annotations:
kubernetes.io/ingress.class: nginx
spec:
rules:
- host: example.com
http:
paths:
- path:
backend:
serviceName: example-servicename
servicePort: 80