cert-manager
cert-manager — це інструмент для автоматизації управління сертифікатами. Його можна інтегрувати зі шлюзами Istio для управління TLS сертифікатами.
Конфігурація
Ознайомтеся з документацією з встановлення cert-manager для початку роботи. Ніяких спеціальних змін не потрібно для роботи з Istio.
Використання
Шлюз Istio
cert-manager можна використовувати для запису секрету в Kubernetes, який потім може бути використаний шлюзом.
Для початку налаштуйте ресурс
Issuer
, слідуючи документації issuer cert-manager.Issuer
є ресурсом Kubernetes, який представляє центри сертифікації (CA), які можуть генерувати підписані сертифікати, виконуючи запити на підписання сертифікатів. Наприклад,Issuer
може виглядати так:apiVersion: cert-manager.io/v1 kind: Issuer metadata: name: ca-issuer namespace: istio-system spec: ca: secretName: ca-key-pair
Далі налаштуйте ресурс
Certificate
, слідуючи документації cert-manager.Certificate
має бути створений в тому ж просторі імен, що і розгортанняistio-ingressgateway
. Наприклад,Certificate
може виглядати так:apiVersion: cert-manager.io/v1 kind: Certificate metadata: name: ingress-cert namespace: istio-system spec: secretName: ingress-cert commonName: my.example.com dnsNames: - my.example.com ...
Після створення сертифіката, ми повинні побачити створений секрет у просторі імен
istio-system
. Це можна потім використовувати в конфігураціїtls
для шлюзу підcredentialName
:apiVersion: networking.istio.io/v1 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 забезпечує безпосередню інтеграцію з Kubernetes Ingress, конфігуруючи анотацію на обʼєкті Ingress. Якщо використовується цей метод, Ingress має розміщуватись в тому ж просторі імен, що і розгортання istio-ingressgateway
, оскільки секрети читатимуться лише в тому ж просторі імен.
Альтернативно, можна створити Certificate
, як описано в Шлюз Istio, а потім використати його в обʼєкті Ingress
:
apiVersion: networking.k8s.io/v1
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 сертифіката