Konfigurace kontroleru příchozího přenosu dat NGINX pro podporu privátní zóny DNS Azure s doplňkem směrování aplikací
Tento článek ukazuje, jak nakonfigurovat kontroler příchozího přenosu dat NGINX tak, aby fungoval s interním nástrojem pro vyrovnávání zatížení Azure, a nakonfigurovat privátní zónu Azure DNS tak, aby umožňoval překlad DNS pro privátní koncové body k překladu konkrétních domén.
Než začnete
- Cluster AKS s doplňkem pro směrování aplikací.
- Pokud chcete připojit privátní zónu DNS Azure, potřebujete ve svém předplatném Azure roli vlastníka, správce účtu Azure nebo spolusprávce Azure.
Připojení ke clusteru AKS
Pokud se chcete připojit ke clusteru Kubernetes z místního počítače, použijte kubectl
klienta příkazového řádku Kubernetes. Můžete ho nainstalovat místně pomocí příkazu az aks install-cli . Pokud používáte Azure Cloud Shell, kubectl
je už nainstalovaný.
Následující příklad nakonfiguruje připojení ke clusteru s názvem myAKSCluster v myResourceGroup pomocí az aks get-credentials
příkazu.
az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
Vytvoření virtuální sítě
Pokud chcete publikovat privátní zónu DNS do virtuální sítě, musíte zadat seznam virtuálních sítí, které mají povolené překlad záznamů v rámci zóny. Ty se nazývají propojení virtuální sítě.
Následující příklad vytvoří virtuální síť myAzureVNet ve skupině prostředků myResourceGroup a jednu podsíť s názvem mySubnet, která se vytvoří v rámci virtuální sítě s konkrétní předponou adresy.
az network vnet create \
--name myAzureVNet \
--resource-group myResourceGroup \
--location eastus \
--address-prefix 10.2.0.0/16 \
--subnet-name mysubnet \
--subnet-prefixes 10.2.0.0/24
Vytvoření privátní zóny DNS Azure
Poznámka:
Doplněk směrování aplikace můžete nakonfigurovat tak, aby automaticky vytvářel záznamy v jedné nebo více globálních a privátních zónách DNS Azure pro hostitele definované v prostředcích příchozího přenosu dat. Všechny globální zóny Azure DNS a všechny privátní zóny Azure DNS musí být ve stejné skupině prostředků.
Zónu DNS vytvoříte pomocí příkazu az network private-dns zone create , zadáním názvu zóny a skupiny prostředků, ve které ji chcete vytvořit. Následující příklad vytvoří zónu DNS s názvem private.contoso.com ve skupině prostředků myResourceGroup .
az network private-dns zone create --resource-group myResourceGroup --name private.contoso.com
Pomocí příkazu az network private-dns link vnet create vytvoříte propojení virtuální sítě s zónou DNS vytvořenou dříve. Následující příklad vytvoří propojení s názvem myDNSLink k zóně private.contoso.com pro virtuální síť myAzureVNet. --registration-enabled
Zahrňte parametr, který určuje, že odkaz není povolená registrace.
az network private-dns link vnet create --resource-group myResourceGroup \
--name myDNSLink \
--zone-name private.contoso.com \
--virtual-network myAzureVNet \
--registration-enabled false
Funkce automatické registrace privátní zóny Azure DNS spravuje záznamy DNS pro virtuální počítače nasazené ve virtuální síti. Když propojíte virtuální síť s privátní zónou DNS s povoleným nastavením, vytvoří se záznam DNS pro každý virtuální počítač Azure pro váš uzel AKS nasazený ve virtuální síti.
Připojení privátní zóny DNS Azure k doplňku pro směrování aplikací
Poznámka:
Tento az aks approuting zone add
příkaz používá oprávnění uživatele, který příkaz spouští, k vytvoření přiřazení role zóny Azure DNS. Role přispěvatele zóny Privátní DNS je předdefinovaná role pro správu privátních prostředků DNS a je přiřazená spravované identitě doplňku. Další informace o spravovaných identitách AKS najdete v souhrnu spravovaných identit.
Načtěte ID prostředku zóny DNS pomocí
az network dns zone show
příkazu a nastavte výstup na proměnnou s názvemZONEID
. Následující příklad dotazuje zónu private.contoso.com ve skupině prostředků myResourceGroup.ZONEID=$(az network private-dns zone show --resource-group myResourceGroup --name private.contoso.com --query "id" --output tsv)
Aktualizujte doplněk tak, aby povolte integraci s Azure DNS pomocí
az aks approuting zone
příkazu. Můžete předat čárkami oddělený seznam ID prostředků zóny DNS. Následující příklad aktualizuje cluster AKS myAKSCluster ve skupině prostředků myResourceGroup.az aks approuting zone add --resource-group myResourceGroup --name myAKSCluster --ids=${ZONEID} --attach-zones
Vytvoření kontroleru příchozího přenosu dat NGINX s privátní IP adresou a interním nástrojem pro vyrovnávání zatížení
Doplněk směrování aplikace používá k konfiguraci kontrolerů příchozího přenosu dat NGINX vlastní definici prostředku Kubernetes (CRD). NginxIngressController
Můžete vytvořit další kontrolery příchozího přenosu dat nebo upravit existující konfiguraci.
NginxIngressController
CRD má loadBalancerAnnotations
pole pro řízení chování služby kontroleru příchozího přenosu dat NGINX nastavením poznámek nástroje pro vyrovnávání zatížení.
Provedením následujících kroků vytvořte kontroler příchozího přenosu dat NGINX s interní službou Azure Load Balancer s privátní IP adresou.
Zkopírujte následující manifest YAML do nového souboru s názvem nginx-internal-controller.yaml a uložte soubor do místního počítače.
apiVersion: approuting.kubernetes.azure.com/v1alpha1 kind: NginxIngressController metadata: name: nginx-internal spec: ingressClassName: nginx-internal controllerNamePrefix: nginx-internal loadBalancerAnnotations: service.beta.kubernetes.io/azure-load-balancer-internal: "true"
Pomocí příkazu vytvořte prostředky kontroleru příchozího přenosu dat
kubectl apply
NGINX.kubectl apply -f nginx-internal-controller.yaml
Následující příklad výstupu ukazuje vytvořený prostředek:
nginxingresscontroller.approuting.kubernetes.azure.com/nginx-internal created
Ověření vytvoření kontroleru příchozího přenosu dat
Pomocí příkazu můžete ověřit stav kontroleru
kubectl get nginxingresscontroller
příchozího přenosu dat NGINX.kubectl get nginxingresscontroller
Následující příklad výstupu ukazuje vytvořený prostředek. Dostupnost kontroleru může trvat několik minut:
NAME INGRESSCLASS CONTROLLERNAMEPREFIX AVAILABLE default webapprouting.kubernetes.azure.com nginx True nginx-internal nginx-internal nginx-internal True
Nasazení aplikace
Doplněk směrování aplikace používá poznámky k objektům příchozího přenosu dat Kubernetes k vytvoření příslušných prostředků.
Vytvořte obor názvů aplikace volaný
hello-web-app-routing
pro spuštění ukázkových podů pomocíkubectl create namespace
příkazu.kubectl create namespace hello-web-app-routing
Vytvořte nasazení zkopírováním následujícího manifestu YAML do nového souboru s názvem deployment.yaml a uložte ho do místního počítače.
apiVersion: apps/v1 kind: Deployment metadata: name: aks-helloworld namespace: hello-web-app-routing spec: replicas: 1 selector: matchLabels: app: aks-helloworld template: metadata: labels: app: aks-helloworld spec: containers: - name: aks-helloworld image: mcr.microsoft.com/azuredocs/aks-helloworld:v1 ports: - containerPort: 80 env: - name: TITLE value: "Welcome to Azure Kubernetes Service (AKS)"
Vytvořte službu zkopírováním následujícího manifestu YAML do nového souboru s názvem service.yaml a uložte soubor do místního počítače.
apiVersion: v1 kind: Service metadata: name: aks-helloworld namespace: hello-web-app-routing spec: type: ClusterIP ports: - port: 80 selector: app: aks-helloworld
Pomocí příkazu vytvořte prostředky clusteru
kubectl apply
.kubectl apply -f deployment.yaml -n hello-web-app-routing
Následující příklad výstupu ukazuje vytvořený prostředek:
deployment.apps/aks-helloworld created created
kubectl apply -f service.yaml -n hello-web-app-routing
Následující příklad výstupu ukazuje vytvořený prostředek:
service/aks-helloworld created created
Vytvořte prostředek příchozího přenosu dat, který používá název hostitele v zóně Azure Private DNS a privátní IP adresu.
Zkopírujte následující manifest YAML do nového souboru s názvem ingress.yaml a uložte ho do místního počítače.
Aktualizujte
<Hostname>
název hostitele DNS,helloworld.private.contoso.com
například . Ověřte, že pro tuto funkciingressClassName
zadávátenginx-internal
.apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: aks-helloworld namespace: hello-web-app-routing spec: ingressClassName: nginx-internal rules: - host: <Hostname> http: paths: - backend: service: name: aks-helloworld port: number: 80 path: / pathType: Prefix
Pomocí příkazu vytvořte prostředky clusteru
kubectl apply
.kubectl apply -f ingress.yaml -n hello-web-app-routing
Následující příklad výstupu ukazuje vytvořený prostředek:
ingress.networking.k8s.io/aks-helloworld created
Ověření vytvoření spravovaného příchozího přenosu dat
Spravovaný příchozí přenos dat můžete ověřit pomocí kubectl get ingress
příkazu.
kubectl get ingress -n hello-web-app-routing
Následující příklad výstupu ukazuje vytvořený spravovaný příchozí přenos dat:
NAME CLASS HOSTS ADDRESS PORTS AGE
aks-helloworld nginx-internal helloworld.private.contoso.com 10.224.0.7 80 98s
Ověřte, že se aktualizovala privátní zóna DNS Azure.
Za několik minut spusťte příkaz az network private-dns record-set a list k zobrazení záznamů A pro vaši privátní zónu DNS Azure. Zadejte název skupiny prostředků a název zóny DNS. V tomto příkladu je skupina prostředků myResourceGroup a zóna DNS je private.contoso.com.
az network private-dns record-set a list --resource-group myResourceGroup --zone-name private.contoso.com
Následující příklad výstupu ukazuje vytvořený záznam:
[
{
"aRecords": [
{
"ipv4Address": "10.224.0.7"
}
],
"etag": "188f0ce5-90e3-49e6-a479-9e4053f21965",
"fqdn": "helloworld.private.contoso.com.",
"id": "/subscriptions/xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx/resourceGroups/foo/providers/Microsoft.Network/privateDnsZones/private.contoso.com/A/helloworld",
"isAutoRegistered": false,
"name": "helloworld",
"resourceGroup": "foo",
"ttl": 300,
"type": "Microsoft.Network/privateDnsZones/A"
}
]
Další kroky
Další informace o konfiguraci související s šifrováním SSL další pokročilý kontroler příchozího přenosu dat NGINX a konfigurace prostředků příchozího přenosu dat, zkontrolujte konfiguraci DNS a ssl a konfiguraci směrování aplikací.
Azure Kubernetes Service