【问题标题】:Supporting wildcard domains for TLS: Kubernetes Ingress on GKE支持 TLS 的通配符域:GKE 上的 Kubernetes Ingress
【发布时间】:2020-09-08 19:04:19
【问题描述】:

我正在开发一个动态部署 kubernetes 资源的应用程序,我希望能够为所有这些资源配置共享 SSL 证书。在任何给定时间,所有服务都具有路径*.*.*.example.com

我听说 cert-manager 会自动配置/重新配置证书,但如果开销太大,我不一定需要自动配置。该解决方案还需要能够处理这些嵌套的 url 子域。

对最简单的方法有什么想法吗?

【问题讨论】:

  • 您不能为*.*.*.example.com 创建证书,因为您只能有一个通配符。所以你可以有*.example.com,但它只会匹配foobar.example.com而不是plop.foobar.example.com。如果您需要更多级别,则需要显式枚举它们。
  • @PatrickMevzek 所以如果我在入口的hosts 中枚举*.one.example.com*.two.example.com 等,然后获得one.example.comtwo.example.com 的证书,它应该可以工作?

标签: ssl kubernetes https kubernetes-ingress nginx-ingress


【解决方案1】:

看看nginx-ingress,它是一个 Kubernetes 入口控制器,基本上可以在 Kubernetes 上运行 Nginx 反向代理/Web 服务器/负载平衡器。

nginx-ingress 是围绕Ingress 资源构建的。它将监视 Ingress 对象并在配置映射中管理 nginx 配置。您可以通过 Kubernetes Ingress 资源规则和nginx specific annotations 定义强大的流量路由规则、缓存、url 重写等等。

这是一个带有一些路由的 Ingress 示例。你可以用它做更多的事情,and it does support wildcard domain routing

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/rewrite-target: /$1
    cert-manager.io/cluster-issuer: letsencrypt-prod
  name: my-ingress
spec:
  rules:
  - host: app1.domain.com
    http:
      paths:
      - backend:
          serviceName: app1-service
          servicePort: http
        path: /(.*)

  - host: app2.sub.domain.com
    http:
      paths:
      - backend:
          serviceName: app2-service
          servicePort: http
        path: /(.*)
  tls:
  - hosts:
    - app1.domain.com
    secretName: app1.domain.com-tls-secret
  - hosts:
    - app2.sub.domain.com
    secretName: app2.sub.domain.com-tls-secret

注释部分非常重要。上面表明 nginx-ingress 应该管理这个 Ingress 定义。这个 annotations 部分允许指定额外的 nginx 配置,在上面的例子中它指定了一个 url 重写目标,可以用来重写规则部分中的 url。

请参阅this community post 在 GKE 上安装 nginx-ingress。

您会注意到注释还有一个证书管理器特定的注释,如果安装了该注释,它将指示证书管理器根据在 tls 部分下定义的主机和机密颁发证书。

使用cert-manager 结合 nginx-ingress,这并不复杂,您可以设置自动创建/更新证书。

很难知道部署动态应用程序的设置的确切性质。但实现配置的一些可能方法是:

  • 让每个应用使用自己的路由规则和 TLS 配置定义自己的 Ingress,每次部署应用时都会安装/更新这些配置
  • 每个域/子域都有一个入口。然后,您可以使用该子域的路由规则指定通配符子域和 tls 部分
  • 或者您可能拥有一个处理所有域和路由的 uber Ingress。

粒度越细,控制越多,但活动部件也越多。我不认为这是一个问题。对于最后两个选项,它实际上取决于您的动态应用程序部署的性质。

【讨论】:

    猜你喜欢
    • 2021-10-22
    • 2016-11-10
    • 1970-01-01
    • 2021-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-03
    • 1970-01-01
    相关资源
    最近更新 更多