Защита связи между службами в кластере 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.