Web Analytics
Back
Featured image of post 如何在 AKS 上為你的 nginx ingress controller 設定 FQDN

如何在 AKS 上為你的 nginx ingress controller 設定 FQDN

前言

本篇文章適用 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:

  1. 透過 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

 

  1. Azure Portal 上對 Public IP Address 設定 FQDN

 

  1. 透過 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

 

最後,開啟瀏覽器確認服務可以正常運作即可

Built with Hugo   Theme Stack designed by Jimmy