【问题标题】:Multiple ingress controllers using same host使用同一主机的多个入口控制器
【发布时间】:2020-09-16 03:24:55
【问题描述】:

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


    【解决方案1】:

    当运行多个 ingress-nginx 控制器时,如果其中一个控制器使用默认的--ingress-class 值(参见internal/ingress/annotations/class/main.go 中的IsValid 方法),它将只处理未设置的类注释,否则需要类注释。

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

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

    看看:multiple-ingress,ingress-nginx-traffic

    【讨论】:

      猜你喜欢
      • 2018-07-22
      • 2021-12-24
      • 1970-01-01
      • 1970-01-01
      • 2018-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多