Невозможно применить сертификат SSL к службе Kubernetes LoadBalancing в Kubernetes

Проблема

У меня возникли проблемы с применением TLS к DNS-имени моей службы LoadBalancer для моего кластера Kubernetes, и я немного растерялся.

Я впервые работал с Kubernetes, а также с Azure Manage Container Services. По причинам, не зависящим от меня, этот api требуется для работы в службах управляемых контейнеров Azure.

Среда

Кластер работает в Azure с использованием служб управляемых контейнеров (предварительная версия). Я создал свою среду, выполнив следующие действия: https://docs.microsoft.com/en-us/azure/aks/tutorial-kubernetes-deploy-cluster

Я создал статический IP-адрес в Azure для использования в yaml для службы балансировки нагрузки. Кроме того, я создал myprefix.cloudapp.azure.com DNS-имя для IP-адреса с помощью следующих команд (https://docs.microsoft.com/en-us/azure/aks/static-ip)

IP="XX.XX.XX.XX"

DNSNAME="myprefix"

RESOURCEGROUP=$(az network public-ip list --query "[?ipAddress!=null]|[?contains(ipAddress, '$IP')].[resourceGroup]" --output tsv)

PIPNAME=$(az network public-ip list --query "[?ipAddress!=null]|[?contains(ipAddress, '$IP')].[name]" --output tsv)

az network public-ip update --resource-group $RESOURCEGROUP --name $PIPNAME --dns-name $DNSNAME

Развертывание

Это yaml, который я использую для развертывания:

apiVersion: apps/v1beta1 kind: Deployment metadata: name: my-node-express-api-deployment spec: replicas: 2 strategy: rollingUpdate: maxSurge: 1 maxUnavailable: 1 minReadySeconds: 5 template: metadata: labels: app: my-node-express-api spec: containers: - name: my-node-express-api-container image: myrepo/my-node-express-api-image:latest ports: - containerPort: 3000 volumes: - name: tls secret: secretName: my-tls-secret

Услуга

Это yaml для моей службы балансировки нагрузки

apiVersion: v1 kind: Service metadata: name: my-node-express-api-loadbalancer spec: loadBalancerIP: 52.176.148.91 type: LoadBalancer ports: - port: 80 targetPort: 3000 port: 443 targetPort: 3000 selector: app: my-node-express-api

Секрет

Ямл для секрета

apiVersion: v1 kind: Secret metadata: name: my-tls-secret namespace: default data: tls.crt: (base64 for myprefix.cloudapp.azure.com.crt) tls.key: (base64 for myprefix.cloudapp.azure.com.key)

Примечание:

Все работает правильно через http, когда я удаляю секрет из своего развертывания и удаляю порт 443 из службы LoadBalancer.


person esc0tc    schedule 05.04.2018    source источник


Ответы (1)


В Azure, если вам нужно завершение TLS в кубернетах, вы можете использовать контроллер Nginx Ingress (теперь Microsoft работает с контроллером входа Azure, который использует шлюз приложений).

Чтобы заархивировать это, мы можем выполнить следующие действия:
1 Развернуть контроллер Nginx Ingress
2 Создать сертификаты TLS
3 Развернуть тестовую http-службу
4 настроить завершение TLS

Дополнительные сведения о настройке контроллера входящего трафика Nginx для завершения TLS в кубернетах в Azure см. В этом блог.

person Jason Ye    schedule 06.04.2018