Cert Manager

这篇文章最初发表在 Istio 官方文档

cert-manager 是一个自动管理证书的工具。它可以与 Istio 网关集成,管理 TLS 证书。

配置

请查阅 cert-manager 安装文档以开始使用。无需特殊更改即可与 Istio 一起使用。

用法

Istio Gateway

cert-manager 可以用于向 Kubernetes 写入机密,然后网关可以引用它。首先Certificate,请按照cert-manager 文档配置资源。本Certificate应在相同的命名空间创建istio-ingressgateway部署。例如,aCertificate可能看起来像:

apiVersion: cert-manager.io/v1alpha2
kind: Certificate
metadata:
  name: ingress-cert
  namespace: istio-system
spec:
  secretName: ingress-cert
  commonName: my.example.com
  dnsNames:
  - my.example.com
  ...

一旦我们创建了证书,我们应该看到在 istio-system 命名空间中创建的 secret。然后,这可以在 tls 配置中,在 credentialName 下的 Gateway 中引用:

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: gateway
spec:
  selector:
    istio: ingressgateway
  servers:
  - port:
      number: 443
      name: https
      protocol: HTTPS
    tls:
      mode: SIMPLE
      credentialName: ingress-cert # 这应该与证书的 secretName 相匹配。
    hosts:
    - my.example.com # 这应该与证书中的 DNS 名称相匹配。

Kubernetes Ingress

cert-manager 通过在 Ingress 对象上配置注释来提供与 Kubernetes Ingress 的直接集成。如果使用此方法,则 Ingress 必须位于与 istio-ingressgateway 部署相同的命名空间中,因为 secret 只能在同一命名空间中读取。

或者,Certificate 可以按照 Istio Gateway 所述创建一个,然后在该 Ingress 对象中引用:

apiVersion: networking.k8s.io/v1beta1
Kind: Ingress
metadata:
  name: ingress
  annotations:
    kubernetes.io/ingress.class: istio
spec:
  rules:
  - host: my.example.com
    http: ...
  tls:
  - hosts:
    - my.example.com # 这应该与证书中的 DNS 名称相匹配。
    secretName: ingress-cert # 这应该与证书的 secretName 相匹配。