使用同一主机的多个入口规则

问题描述 投票:0回答:2

我有两个入口规则(用于公共/内部流量),我希望所有端点都使用公共入口,除了 /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(作为示例),则会出现错误(这是预期的),这表明正在使用两个不同的入口。然而,一旦我使用两个不同的入口控制器,那么一个入口的规则就不会被采用。

如何配置我的入口以达到我想要的结果?

kubernetes kubernetes-ingress nginx-ingress
2个回答
4
投票

当运行多个 ingress-nginx 控制器时,如果其中一个控制器使用默认的

--ingress-class
值(请参阅
IsValid
中的
internal/ingress/annotations/class/main.go
方法),它将仅处理未设置的类注释,否则需要类注释。

如果

--ingress-class
设置为默认值
nginx
,控制器将监控没有类注释的Ingress 注释类设置为
nginx
的Ingress。使用
--ingress-class
的非默认值,以确保控制器仅满足特定类别的 Ingresses。

在您的情况下,使用注释

kubernetes.io/ingress.class: "EXTERNAL|INTERNAL"
和标志
--ingress-class=EXTERNAL|INTERNAL
的组合允许您过滤 nginx 入口控制器应选择哪些入口规则。

看一下:multiple-ingressingress-nginx-traffic


0
投票

我在 AKS(K8s 版本 1.22.4)上遇到过类似的问题。我有两个 Nginx 入口控制器,内部和外部。

一次只有一个人在工作,无论是内部还是外部。

为每个人指定唯一的

election-id
后,问题就解决了。

以下帖子可能会有所帮助:https://stackoverflow.com/a/72591382/4049017

© www.soinside.com 2019 - 2024. All rights reserved.