我有两个入口控制器(用于公共/内部流量(,我希望所有端点都使用公共入口,但/metrics除外,它应该是内部的,都使用同一主机。
例如
example.com/ -> public ingress
example.com/metrics -> internal ingress
这就是我尝试过的:
内部入口
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 nginx控制器时,只有其中一个控制器使用默认的--ingress-class
值时,它才会处理未设置的类注释(请参阅internal/ingress/annotations/class/main.go
中的IsValid
方法(,否则需要类注释。
如果--ingress-class
设置为默认值nginx
,则控制器将监视没有类注释的入口和注释类设置为nginx
的入口。为--ingress-class
使用非默认值,以确保控制器只满足特定类别的入口。
在您的情况下,使用注释kubernetes.io/ingress.class: "EXTERNAL|INTERNAL"
和标志--ingress-class=EXTERNAL|INTERNAL
的组合可以过滤nginx入口控制器应该选择哪些Ingress规则。
看看:多入口,入口nginx流量。
我在AKS(K8s版本1.22.4(上遇到过这样的问题。我有两个Nginx入口控制器,内部和外部。
一次只有一个工作,内部或外部。
在为每个指定一个唯一的election-id
之后,问题就解决了。
以下帖子可能会有所帮助:https://stackoverflow.com/a/72591382/4049017