【问题标题】:Letsencrypt/Cert Manager workflow for apps served through Istio VirtualService/Gateway通过 Istio VirtualService/Gateway 服务的应用程序的 Letsencrypt/Cert Manager 工作流程
【发布时间】:2020-05-10 04:01:23
【问题描述】:

是否有一个通用(或任何)工作流程来为在 Istio VirtualService & Gateway 中配置的应用程序颁发和更新 LE 证书? Istio 文档仅涵盖 Ingress 用例,我认为它不涵盖处理续订。

我的实际用例是使用通配符证书和自定义应用程序来实现这一点,但为了简单起见,我想使用安装在 Istio 演示中的 Prometheus 服务来解决这个问题。 VirtualService 和 Gateway 对于我的实际用例来说是必需的。

这是我目前通过 https 使用自签名证书为 Prometheus 提供服务的方式。我在 GKE K8s 版本 1.15.11 上运行 Istio 版本 1.5.2。证书管理器也已安装。

那么我该如何调整它以使用 Cert Manager 为 prom.example.com 颁发和更新 LE 证书?

---
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: prometheus-gateway
  #namespace: istio-system
spec:
  selector:
    istio: ingressgateway
  servers:
    - port:
        number: 443
        name: http-prom
        protocol: HTTPS
      hosts:
        - "prom.example.com"
      tls:
        mode: SIMPLE # enables HTTPS on this port
        serverCertificate: /etc/istio/ingressgateway-certs/tls.crt
        privateKey: /etc/istio/ingressgateway-certs/tls.key
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: prometheus-vs
spec:
  hosts:
    - "prom.example.com"
  gateways:
    - prometheus-gateway
  http:
    - match:
        - port: 443
      route:
        - destination:
            host: prometheus
            port:
              number: 9090

【问题讨论】:

    标签: kubernetes lets-encrypt istio cert-manager


    【解决方案1】:

    TL;DR

    配置cert-manager与DNS域验证颁发证书,自动处理续订。

    关于 Istio 文档中示例的一些注释有望阐明工作流程:

    • cert-manager 对 Istio 一无所知,它的关键作用是颁发和更新证书,然后将它们保存到 kubernetes 中的秘密对象中。

      • LE ACME 验证通常使用 DNS,例如AWS Route53

      • 颁发的证书机密将位于特定 k8s 命名空间中,并且在该命名空间之外不可见。

    • Istio 对证书管理器一无所知,它所需要的只是在网关中使用 SDS 配置的已颁发证书机密。这意味着两件事:

      • SDS 密钥的名称必须与 cert-manager 生成的一个匹配(这是它们之间的唯一链接)

      • 密钥必须与 Istio 网关所在的命名空间相同。

    • 最后,您的 VirtualServices 只需要一个如上所述正确配置的网关。好消息是,如果您使用完整的限定名称,VirtualService 可以链接到任何命名空间中的网关。

    因此,您可以将网关放在您颁发证书对象的同一命名空间中,以避免复制秘密,然后您的 VirtualServices 可以位于任何命名空间中,只需使用完整的网关名称。

    【讨论】:

    • 如何接受这个答案?问题是“我如何使用 certmanager 更新letsencrypt 证书”。这没有说明证书更新......
    • 你没有做任何特别的事情,cert-manager 目的是自动颁发和更新证书!
    【解决方案2】:

    在 istio 中有一个 example documentation

    此示例演示了如何使用 Istio 作为安全的 Kubernetes Ingress 控制器,并使用由 Let’s Encrypt 颁发的 TLS 证书。

    您将从干净的 Istio 安装开始,创建一个示例服务,使用 Kubernetes Ingress 资源公开它,并通过指示 cert-manager(与 Istio 捆绑)管理 TLS 证书的颁发和更新来确保其安全,这将进一步传送到 Istio 入口 gateway 并根据需要通过 Secrets Discovery Service (SDS) 进行热交换。

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-16
      • 1970-01-01
      • 2019-07-27
      • 2016-07-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多