Проблема
У меня возникли проблемы с применением 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.