Упрощение управления SSL-сертификатами в Kubernetes с помощью Istio и Let’s Encrypt Cluster Issuer

Защита связи между службами в кластере Kubernetes имеет решающее значение, и одним из распространенных способов достижения этой цели является использование сертификатов SSL/TLS. В этой статье мы рассмотрим, как упростить управление SSL-сертификатами в Kubernetes с помощью Istio и Let’s Encrypt Cluster Issuer. Мы обсудим несколько методов с примерами кода, которые помогут вам понять и эффективно реализовать предоставление сертификатов SSL.

Я. Использование Istio Gateway с Let’s Encrypt Cluster Issuer:

Один из способов получения SSL-сертификатов — настройка шлюза Istio с эмитентом кластера Let’s Encrypt. Istio предоставляет входной шлюз, который действует как балансировщик нагрузки и точка входа в ваши сервисы. Вот пример конфигурации YAML для шлюза Istio:

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: my-gateway
spec:
  selector:
    istio: ingressgateway
  servers:
    - port:
        number: 443
        name: https
        protocol: HTTPS
      hosts:
        - example.com
      tls:
        mode: SIMPLE
      tls:
        credentialName: my-certificate

Чтобы использовать Let’s Encrypt Cluster Issuer, вам необходимо создать ресурс Certificateс соответствующей конфигурацией:

apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
  name: my-certificate
spec:
  secretName: my-certificate-secret
  issuerRef:
    name: letsencrypt-cluster-issuer
    kind: ClusterIssuer
  commonName: example.com
  dnsNames:
    - example.com

II. Использование Cert-Manager и Let’s Encrypt Cluster Issuer:

Cert-Manager — это надстройка Kubernetes, которая автоматизирует управление и выдачу SSL-сертификатов. Let’s Encrypt Cluster Issuer — это тип эмитента Cert-Manager, который взаимодействует с центром сертификации Let’s Encrypt. Вот пример конфигурации YAML для настройки Cert-Manager и Let’s Encrypt Cluster Issuer:

apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: letsencrypt-cluster-issuer
spec:
  acme:
    server: https://acme-v02.api.letsencrypt.org/directory
    email: your-email@example.com
    privateKeySecretRef:
      name: letsencrypt-cluster-issuer-account-key
    solvers:
      - dns01:
          webhook:
            groupName: acme.example.com
            solverName: digitalocean
            config:
              digitaloceanTokenSecretRef:
                name: digitalocean-dns-secret
                key: api-token

III. Предоставление сертификата вручную с помощью Let’s Encrypt:

Если вы предпочитаете более ручной подход, вы можете использовать инструмент командной строки Certbot для получения сертификатов SSL от Let’s Encrypt. Вот пример команды:

certbot certonly --manual --preferred-challenges dns -d example.com

Эта команда предложит вам создать запись DNS TXT с определенным значением для подтверждения владения доменом.

В этой статье мы рассмотрели несколько методов упрощения управления SSL-сертификатами в Kubernetes с помощью Istio и Let’s Encrypt Cluster Issuer. Мы обсудили, как настроить шлюз Istio с помощью Let’s Encrypt, настроить Cert-Manager с помощью Let’s Encrypt Cluster Issuer и вручную получить сертификаты с помощью Certbot. Используя эти методы, вы можете обеспечить безопасную связь между службами в вашем кластере Kubernetes.