Sdílet prostřednictvím


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

Připojení ke clusteru AKS

Pokud se chcete připojit ke clusteru Kubernetes z místního počítače, použijte kubectlklienta 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 myResourceGoup --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.

  1. 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ázvem ZONEID. 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)
    
  2. 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.

  1. 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"
    
  2. 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
    
  3. 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ů.

  1. 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
    
  2. 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)"
    
  3. 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
    
  4. 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.

  1. 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.comnapříklad . Ověřte, že pro tuto funkci ingressClassNamezadáváte nginx-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
    
  2. 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í.