前言
本篇文章適用 Azure Kubernetes Service (AKS) + ngnix ingress controller,有別於自訂網域方式,透過設定 DNS 標籤為入口控制器 IP 位址配置 FQDN,進而快速提供服務或測試。若你對於自訂網域方式有興趣,請參考 如何在為您的 Kubernetes Service 使用 TLS/SSL
注意: FQDN 格式:
<CUSTOM DNS LABEL>.<AZURE REGION NAME>.cloudapp.azure.com
前置作業
將過程中需要的憑證 image 先匯入 Azure Container Registry 內。
REGISTRY_NAME=<REGISTRY_NAME>
CERT_MANAGER_REGISTRY=quay.io
CERT_MANAGER_TAG=v1.8.0
CERT_MANAGER_IMAGE_CONTROLLER=jetstack/cert-manager-controller
CERT_MANAGER_IMAGE_WEBHOOK=jetstack/cert-manager-webhook
CERT_MANAGER_IMAGE_CAINJECTOR=jetstack/cert-manager-cainjector
az acr import --name $REGISTRY_NAME --source $CERT_MANAGER_REGISTRY/$CERT_MANAGER_IMAGE_CONTROLLER:$CERT_MANAGER_TAG --image $CERT_MANAGER_IMAGE_CONTROLLER:$CERT_MANAGER_TAG
az acr import --name $REGISTRY_NAME --source $CERT_MANAGER_REGISTRY/$CERT_MANAGER_IMAGE_WEBHOOK:$CERT_MANAGER_TAG --image $CERT_MANAGER_IMAGE_WEBHOOK:$CERT_MANAGER_TAG
az acr import --name $REGISTRY_NAME --source $CERT_MANAGER_REGISTRY/$CERT_MANAGER_IMAGE_CAINJECTOR:$CERT_MANAGER_TAG --image $CERT_MANAGER_IMAGE_CAINJECTOR:$CERT_MANAGER_TAG
操作步驟
Step 1. 首先,我們可以透過下列指令加入 Helm Chart Repo、更新與安裝 ingerss-nginx
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update
NAMESPACE=webtools
helm install ingress-nginx ingress-nginx/ingress-nginx \
--create-namespace \
--namespace $NAMESPACE \
--set controller.service.annotations."service\.beta\.kubernetes\.io/azure-load-balancer-health-probe-request-path"=/healthz
安裝完成後,我們可以透過下列指令取得服務,檢視 ingress 狀態。
kubectl get services
您可以使用下列方法之一來設定 FQDN:
- 透過 Azure CLI 或 Azure PowerShell 設定 DNS label
IP="<MY_EXTERNAL_IP>"
DNSLABEL="<DNS_LABEL>"
# Get the resource-id of the public IP
PUBLICIPID=$(az network public-ip list --query "[?ipAddress!=null]|[?contains(ipAddress, '$IP')].[id]" --output tsv)
# Update public IP address with DNS name
az network public-ip update --ids $PUBLICIPID --dns-name $DNSLABEL
# Display the FQDN
az network public-ip show --ids $PUBLICIPID --query "[dnsSettings.fqdn]" --output tsv
- Azure Portal 上對 Public IP Address 設定 FQDN
- 透過 Helm chart settings 設定 DNS label
DNS_LABEL="<DNS_LABEL>"
NAMESPACE="ingress-basic"
STATIC_IP=<STATIC_IP>
helm upgrade ingress-nginx ingress-nginx/ingress-nginx --namespace $NAMESPACE --set controller.service.annotations."service\.beta\.kubernetes\.io/azure-dns-label-name"=$DNS_LABEL --set controller.service.loadBalancerIP=$STATIC_IP --set controller.service.annotations."service\.beta\.kubernetes\.io/azure-load-balancer-health-probe-request-path"=/healthz
重要: 您的 DNS 標籤在其 Azure location 中必須是唯一的
最後,設定服務
piVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: webapp
annotations:
nginx.ingress.kubernetes.io/ssl-redirect: "false"
nginx.ingress.kubernetes.io/backend-protocol: "HTTP"
spec:
ingressClassName: nginx
rules:
- host: duran-harbor.japaneast.cloudapp.azure.com
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: webapp
port:
number: 80
最後,開啟瀏覽器確認服務可以正常運作即可