使用同一主机的多个入口控制器



我有两个入口控制器(用于公共/内部流量(,我希望所有端点都使用公共入口,但/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

相关内容

  • 没有找到相关文章

最新更新