Udostępnij za pośrednictwem


Konfiguracja kontrolera NGINX ingress do obsługi prywatnej strefy DNS Azure z dodatkiem do routingu aplikacji.

W tym artykule pokazano, jak skonfigurować kontroler ruchu przychodzącego NGINX do pracy z wewnętrznym modułem równoważenia obciążenia platformy Azure. Wyjaśnia również, jak skonfigurować prywatną strefę DNS Azure, aby umożliwić rozpoznawanie nazw DNS dla prywatnych punktów końcowych i rozwiązywać określone domeny.

Zanim rozpoczniesz

Nawiązywanie połączenia z klastrem usługi AKS

Aby nawiązać połączenie z klastrem Kubernetes z komputera lokalnego, należy użyć kubectlklienta wiersza polecenia kubernetes. Możesz zainstalować ją lokalnie przy użyciu polecenia az aks install-cli . Jeśli korzystasz z usługi Azure Cloud Shell, narzędzie kubectl jest już zainstalowane.

W poniższym przykładzie skonfigurowano nawiązanie połączenia z klastrem o nazwie aks-cluster w test-rg za pomocą polecenia az aks get-credentials.

az aks get-credentials \
    --resource-group test-rg \
    --name aks-cluster

Tworzenie sieci wirtualnej

Aby opublikować prywatną strefę DNS w sieci wirtualnej, określ listę sieci wirtualnych, które mogą rozpoznawać rekordy w strefie za pomocą linków sieci wirtualnej.

Poniższy przykład tworzy sieć wirtualną o nazwie vnet-1 w grupie zasobów test-rg i jedną podsieć o nazwie subnet-1 do utworzenia w sieci wirtualnej z określonym prefiksem adresu.

az network vnet create \
  --name vnet-1 \
  --resource-group test-rg \
  --location eastus \
  --address-prefix 10.2.0.0/16 \
  --subnet-name subnet-1 \
  --subnet-prefixes 10.2.0.0/24

Tworzenie prywatnej strefy DNS platformy Azure

Uwaga

Dodatek routingu aplikacji można skonfigurować tak, aby automatycznie tworzyć rekordy w co najmniej jednej globalnej i prywatnej strefie DNS platformy Azure dla hostów zdefiniowanych w zasobach ruchu przychodzącego. Wszystkie globalne strefy DNS platformy Azure i wszystkie prywatne strefy usługi Azure DNS muszą znajdować się w tej samej grupie zasobów.

Utwórz strefę DNS przy użyciu polecenia az network private-dns zone create , określając nazwę strefy i grupę zasobów, w ramach których ma zostać utworzona. Poniższy przykład tworzy strefę DNS o nazwie private.contoso.com w grupie zasobów test-rg .

az network private-dns zone create \
    --resource-group test-rg \
    --name private.contoso.com

Utworzysz link sieci wirtualnej do strefy DNS utworzonej wcześniej za pomocą polecenia az network private-dns link vnet create. Poniższy przykład tworzy link o nazwie dns-link do strefy private.contoso.com dla sieci wirtualnej vnet-1. Dołącz parametr --registration-enabled, aby określić, że link nie jest aktywowany do rejestracji.

az network private-dns link vnet create \
    --resource-group test-rg \
    --name dns-link \
    --zone-name private.contoso.com \
    --virtual-network vnet-1 \
    --registration-enabled false

Funkcja automatycznej rejestracji strefy prywatnej usługi Azure DNS zarządza rekordami DNS dla maszyn wirtualnych wdrożonych w sieci wirtualnej. Po połączeniu sieci wirtualnej z prywatną strefą DNS z włączonym tym ustawieniem zostanie utworzony rekord DNS dla każdej maszyny wirtualnej platformy Azure dla węzła usługi AKS wdrożonego w sieci wirtualnej.

Dołączanie prywatnej strefy DNS platformy Azure do dodatku routingu aplikacji

Uwaga

Komenda az aks approuting zone add używa uprawnień użytkownika uruchamiającego ją w celu utworzenia przypisania roli strefy DNS Azure. Rola współautora strefy DNS prywatnej to wbudowana rola do zarządzania prywatnymi zasobami DNS i jest przypisywana do tożsamości zarządzanej dodatku. Aby uzyskać więcej informacji na temat zarządzanych tożsamości AKS, zobacz Podsumowanie tożsamości zarządzanych.

  1. Pobierz identyfikator zasobu dla strefy DNS przy użyciu az network dns zone show polecenia i ustaw dane wyjściowe na zmienną o nazwie ZONEID. Poniższy przykład wykonuje zapytanie dotyczące strefy private.contoso.com w grupie zasobów test-rg.

    ZONEID=$(az network private-dns zone show \
    --resource-group test-rg \
    --name private.contoso.com \
    --query "id" \
    --output tsv)
    
  2. Zaktualizuj dodatek, aby włączyć integrację z usługą Azure DNS przy użyciu az aks approuting zone polecenia . Można przekazać rozdzielaną przecinkami listę identyfikatorów zasobów strefy DNS. Poniższy przykład aktualizuje klaster AKS o nazwie aks-cluster w grupie zasobów test-rg.

    az aks approuting zone add \
    --resource-group test-rg \
    --name aks-cluster \
    --ids=${ZONEID} \
    --attach-zones
    

Tworzenie kontrolera ruchu przychodzącego NGINX z prywatnym adresem IP i wewnętrznym modułem równoważenia obciążenia

Dodatek routingu aplikacji używa niestandardowej definicji zasobu Kubernetes (CRD) o nazwie NginxIngressController, aby konfigurować kontrolery ruchu przychodzącego NGINX. Można utworzyć więcej kontrolerów ruchu przychodzącego lub zmodyfikować istniejącą konfigurację.

NginxIngressController CRD ma loadBalancerAnnotations pole kontrolujące zachowanie usługi kontrolera ingress NGINX, ustawiając adnotacje równoważnika obciążenia. Aby uzyskać więcej informacji na temat adnotacji modułu równoważenia obciążenia, zobacz Dostosowania za pośrednictwem adnotacji Kubernetes.

Wykonaj następujące kroki, aby utworzyć kontroler ruchu przychodzącego NGINX z wewnętrznym Load Balancerem Azure z prywatnym adresem IP.

  1. Skopiuj następujący manifest YAML do nowego pliku o nazwie nginx-internal-controller.yaml i zapisz plik na komputerze lokalnym.

    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. Utwórz zasoby kontrolera wejściowego NGINX przy użyciu polecenia kubectl apply.

    kubectl apply -f nginx-internal-controller.yaml
    

    W poniższych przykładowych danych wyjściowych przedstawiono utworzony zasób:

    nginxingresscontroller.approuting.kubernetes.azure.com/nginx-internal created
    
  3. Sprawdź, czy kontroler wejścia został utworzony

    Status kontrolera wejściowego NGINX można sprawdzić przy użyciu polecenia kubectl get nginxingresscontroller.

    kubectl get nginxingresscontroller
    

    Poniższe przykładowe dane wyjściowe pokazują utworzony zasób. Udostępnienie kontrolera może potrwać kilka minut:

    NAME             INGRESSCLASS                         CONTROLLERNAMEPREFIX   AVAILABLE
    default          webapprouting.kubernetes.azure.com   nginx                  True
    nginx-internal   nginx-internal                       nginx-internal         True
    

Wdrażanie aplikacji

Dodatek routingu aplikacji używa adnotacji w obiektach Ingress Kubernetes do tworzenia odpowiednich zasobów.

  1. Utwórz przestrzeń nazw aplikacji o nazwie aks-store, aby uruchomić przykładowe zasobniki przy użyciu polecenia kubectl create namespace.

    kubectl create namespace aks-store
    
  2. Wdróż aplikację magazynu AKS przy użyciu następującego pliku manifestu YAML:

    kubectl apply -f https://raw.githubusercontent.com/Azure-Samples/aks-store-demo/main/sample-manifests/docs/app-routing/aks-store-deployments-and-services.yaml -n aks-store
    

Ten manifest tworzy niezbędne wdrożenia i usługi dla aplikacji sklepu AKS.

Utwórz zasób Ingress, który używa nazwy hosta w prywatnej strefie DNS w Azure i prywatnego adresu IP

Zaktualizuj host nazwę hosta DNS, na przykład store-front.private.contoso.com. Sprawdź, czy określasz element nginx-internal dla klasy ingressClassName.

  1. Skopiuj następujący manifest YAML do nowego pliku o nazwie ingress.yaml i zapisz plik na komputerze lokalnym.

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: store-front
      namespace: aks-store
    spec:
      ingressClassName: nginx-internal
      rules:
      - host: store-front.private.contoso.com
        http:
          paths:
          - backend:
              service:
                name: store-front
                port:
                  number: 80
            path: /
            pathType: Prefix
    
  2. Utwórz zasób Ingress przy użyciu polecenia kubectl apply.

    kubectl apply -f ingress.yaml -n aks-store
    

    W poniższych przykładowych danych wyjściowych przedstawiono utworzony zasób:

    ingress.networking.k8s.io/store-front created
    

Sprawdź, czy utworzono zarządzany Ingress

Możesz sprawdzić, czy zarządzany Ingress został utworzony przy użyciu polecenia kubectl get ingress.

kubectl get ingress -n aks-store

W poniższym przykładowym wyniku przedstawiono utworzony zarządzany Ingress.

NAME          CLASS            HOSTS                             ADDRESS   PORTS   AGE
store-front   nginx-internal   store-front.private.contoso.com             80      10s

Sprawdź, czy prywatna strefa DNS platformy Azure została zaktualizowana

W ciągu kilku minut wykonaj polecenie az network private-dns record-set a list, aby wyświetlić rekordy A dla prywatnej strefy DNS platformy Azure. Określ nazwę grupy zasobów i nazwę strefy DNS. W tym przykładzie grupa zasobów jest test-rg , a strefa DNS jest private.contoso.com.

az network private-dns record-set a list \
    --resource-group test-rg \
    --zone-name private.contoso.com

W poniższych przykładowych danych wyjściowych przedstawiono utworzony rekord:

[
  {
    "aRecords": [
      {
        "ipv4Address": "10.224.0.7"
      }
    ],
    "etag": "ecc303c5-4577-4ca2-b545-d34e160d1c2d",
    "fqdn": "store-front.private.contoso.com.",
    "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/test-rg/providers/Microsoft.Network/privateDnsZones/private.contoso.com/A/store-front",
    "isAutoRegistered": false,
    "name": "store-front",
    "resourceGroup": "test-rg",
    "ttl": 300,
    "type": "Microsoft.Network/privateDnsZones/A"
  }
]

Następne kroki

Aby uzyskać inne informacje o konfiguracji związane z szyfrowaniem SSL oraz innymi zaawansowanymi konfiguracjami kontrolera wejściowego i zasobów wejściowych NGINX, przejrzyj konfigurację DNS i SSL oraz konfigurację dodatku routingu aplikacji.