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

时间:2020-09-16 03:24:55

标签: kubernetes kubernetes-ingress nginx-ingress

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

如何配置入口以达到所需的结果?

1 个答案:

答案 0 :(得分:1)

在运行多个ingress-nginx控制器时,只有其中一个控制器使用默认的@media screen and (min-width: 992px) { body { background-color: blue; color: white; } } @media screen and (max-width: 992px) { body { background-color: olive; color: white; } } 值(请参阅--ingress-class中的IsValid方法)时,它才会处理未设置的类注释。该类注释成为必需。

如果将internal/ingress/annotations/class/main.go设置为默认值--ingress-class,则控制器将监视没有类注释的Ingress和将注释类设置为nginx的Ingress 。为nginx使用非默认值,以确保控制器仅满足特定的Ingress类。

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

看看:multiple-ingressingress-nginx-traffic