Чтобы настроить SSL с помощью Istio, вы можете использовать разные методы в зависимости от ваших требований. Вот несколько подходов и примеры кода:
-
Автоматический HTTPS с помощью Cert-Manager и Let’s Encrypt:
Этот метод использует Cert-Manager, который является надстройкой Kubernetes, а также Let’s Encrypt для автоматической выдачи сертификатов SSL и управления ими.# Install Cert-Manager kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/v1.5.3/cert-manager.yaml # Create a certificate issuer (Let's Encrypt) # cert-issuer.yaml apiVersion: cert-manager.io/v1 kind: ClusterIssuer metadata: name: letsencrypt-prod spec: acme: server: https://acme-v02.api.letsencrypt.org/directory email: your-email@example.com privateKeySecretRef: name: letsencrypt-prod solvers: - http01: ingress: class: istio # Create a TLS certificate # tls-certificate.yaml apiVersion: cert-manager.io/v1 kind: Certificate metadata: name: example-tls spec: secretName: example-tls-secret issuerRef: name: letsencrypt-prod kind: ClusterIssuer commonName: example.com dnsNames: - example.com - www.example.com -
HTTPS вручную с самозаверяющими сертификатами.
Этот метод предполагает ручное создание самозаверяющих сертификатов и настройку Istio для их использования.# Generate a self-signed certificate openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 \ -keyout tls.key -out tls.crt -subj "/CN=example.com" # Create a Kubernetes secret kubectl create secret tls example-tls-secret --key tls.key --cert tls.crt # Configure Istio virtual service # virtual-service.yaml apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: example-virtual-service spec: hosts: - example.com gateways: - istio-system/ingressgateway tls: - match: port: 443 sniHosts: - example.com route: - destination: host: example-service port: number: 80 -
Стороннее прекращение SSL.
Вы также можете использовать сторонний балансировщик нагрузки или входящий контроллер, который завершает SSL, например Nginx или HAProxy, перед Istio. В этом случае прекращение SSL происходит за пределами Istio.Например, использование Nginx в качестве терминатора SSL:
server { listen 443 ssl; server_name example.com; ssl_certificate /etc/nginx/certs/example.crt; ssl_certificate_key /etc/nginx/certs/example.key; location / { proxy_pass http://istio-ingressgateway.istio-system.svc.cluster.local; proxy_set_header Host $host; } }