【问题标题】:Which Kubernetes ingress "wins" (tls and multiple ingresses for same host)?哪个 Kubernetes 入口“获胜”(同一主机的 tls 和多个入口)?
【发布时间】:2020-03-25 15:11:15
【问题描述】:

假设我有两个入口 ingress-aingress-b 用于同一主机但路径不同:

ingress-a

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: nginx
  name: app-a
  namespace: namespace-a
spec:
  rules:
  - host: myhost.com
    http:
      paths:
      - backend:
          serviceName: app-a
          servicePort: 8080
        path: /path-a
  tls:
  - hosts:
    - myhost.com
    secretName: tls-a

ingress-b

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: nginx
  name: app-b
  namespace: namespace-b
spec:
  rules:
  - host: myhost.com
    http:
      paths:
      - backend:
          serviceName: app-b
          servicePort: 8080
        path: /path-b
  tls:
  - hosts:
    - myhost.com
    secretName: tls-b

现在我需要更新证书。假设我在 tls-new 中创建了新秘密,但只更新了 ingress-a 以指向它。这两个入口中的哪一个会获胜

我想我应该简单地覆盖现有的秘密,但我试图了解入口规则在上述情况下如何工作,即为同一主机引用两个不同的 tls 秘密。

【问题讨论】:

  • 你是 Kubernetes Nginx 入口控制器还是 nginxinc 入口控制器?这个设置真的有效吗?
  • 是的,使用 Nginx 入口控制器可以正常工作
  • secret tls-a 和 tls-b 是否包含相同的证书?拥有两个 Ingress 有什么意义,因为在您的情况下,在我看来,您都可以拥有一个 Ingress 和两条路径。我认为您不能在不同的 Ingress 对象中使用相同的主机名(仅使用合并选项,但有 TLS 限制)。我一直在尝试,但它不起作用。

标签: ssl kubernetes kubernetes-ingress


【解决方案1】:

NGINX 和 NGINX Plus Ingress controller for Kubernetes 支持可合并的 Ingress 类型。

使用nginx.org/mergeable-ingress-type: master 声明Master。 Master 将在主机级别处理所有配置,包括 TLS 配置,以及将应用于完整主机的任何注释。在包含主值的唯一主机上只能有一个入口资源。路径不能是入口资源的一部分。

使用 nginx.org/mergeable-ingress-type: minion 声明 Minion。 Minion 将用于将不同的位置附加到具有 Master 值的入口资源。不允许 TLS 配置。每个 master 可以应用多个 minions,只要它们没有冲突的路径。如果存在冲突路径,则将使用在最旧的 minion 上定义的路径。

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: cafe-ingress-master
  annotations:
    kubernetes.io/ingress.class: "nginx"
    nginx.org/mergeable-ingress-type: "master"
spec:
  tls:
  - hosts:
    - cafe.example.com
    secretName: cafe-secret
  rules:
  - host: cafe.example.com

---

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: cafe-ingress-coffee-minion
  annotations:
    kubernetes.io/ingress.class: "nginx"
    nginx.org/mergeable-ingress-type: "minion"
spec:
  rules:
  - host: cafe.example.com
    http:
      paths:
      - path: /coffee
        backend:
          serviceName: coffee-svc
          servicePort: 80

minion 不能有 TLS,只有 master 可以有 TLS,你在 master 中更改 TLS。

【讨论】:

  • 好的,那么它将从我描述的示例中选择哪一个?
  • 取决于创建的顺序。最后创建的将覆盖以前的
  • 好的,所以由创建日期决定哪个“获胜”是一个简单的答案
  • 可合并入口类型的语法和规则链接:github.com/nginxinc/kubernetes-ingress/tree/v1.8.1/examples/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-24
  • 2018-09-23
  • 2021-05-31
  • 1970-01-01
  • 1970-01-01
  • 2018-07-22
相关资源
最近更新 更多