Konfigurowanie kontrolera ruchu przychodzącego NGINX w celu obsługi prywatnej strefy DNS platformy Azure z dodatkiem 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 i skonfigurować prywatną strefę usługi Azure DNS w celu umożliwienia rozpoznawania nazw DNS dla prywatnych punktów końcowych w celu rozpoznawania określonych domen.

Zanim rozpoczniesz

Połączenie do klastra 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.

Poniższy przykład umożliwia skonfigurowanie nawiązywania połączenia z klastrem o nazwie myAKSCluster w grupie myResourceGroup przy użyciu az aks get-credentials polecenia .

az aks get-credentials --resource-group myResourceGroup --name myAKSCluster

Tworzenie sieci wirtualnej

Aby opublikować prywatną strefę DNS w sieci wirtualnej, należy określić listę sieci wirtualnych, które mogą rozpoznawać rekordy w strefie. Są to połączenia sieci wirtualnej.

Poniższy przykład tworzy sieć wirtualną o nazwie myAzureVNet w grupie zasobów myResourceGroup i jedną podsieć o nazwie mySubnet do utworzenia w sieci wirtualnej z określonym prefiksem adresu.

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

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.

Strefę DNS można utworzyć przy użyciu polecenia az network private-dns zone create , określając nazwę strefy i grupę zasobów, w której ma zostać utworzona. Poniższy przykład tworzy strefę DNS o nazwie private.contoso.com w grupie zasobów myResourceGroup .

az network private-dns zone create --resource-group myResourceGoup -n private.contoso.com

Utworzysz link sieci wirtualnej do strefy DNS utworzonej wcześniej przy użyciu polecenia az network private-dns link vnet create . Poniższy przykład tworzy link o nazwie myDNSLink do strefy private.contoso.com dla sieci wirtualnej myAzureVNet. Dołącz parametr , --registration-enabled aby określić link nie jest włączony.

az network private-dns link vnet create --resource-group myResourceGroup \
  --name myDNSLink \
  --zone-name private.contoso.com \
  --virtual-network myAzureVNet \
  --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

Polecenie az aks approuting zone add używa uprawnień użytkownika uruchamiającego polecenie w celu utworzenia przypisania roli strefy DNS platformy Azure. Rola współautora strefy Prywatna strefa DNS jest wbudowaną rolą do zarządzania prywatnymi zasobami DNS i jest przypisywana do tożsamości zarządzanej dodatku. Aby uzyskać więcej informacji na temat tożsamości zarządzanych usługi 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 myResourceGroup.

    ZONEID=$(az network private-dns zone show --resource-group myResourceGroup --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 usługi AKS myAKSCluster w grupie zasobów myResourceGroup.

    az aks approuting zone add --resource-group myResourceGroup --name myAKSCluster --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 zasobów Kubernetes (CRD) wywoływanej NginxIngressController do konfigurowania kontrolerów ruchu przychodzącego NGINX. Można utworzyć więcej kontrolerów ruchu przychodzącego lub zmodyfikować istniejącą konfigurację.

NginxIngressController CrD ma loadBalancerAnnotations pole do kontrolowania zachowania usługi kontrolera ruchu przychodzącego NGINX przez ustawienie adnotacji modułu równoważenia obciążenia.

Wykonaj następujące kroki, aby utworzyć kontroler ruchu przychodzącego NGINX z wewnętrznym modułem równoważenia obciążenia platformy 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 ruchu przychodzącego NGINX przy użyciu kubectl apply polecenia .

    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 ruchu przychodzącego został utworzony

    Stan kontrolera ruchu przychodzącego NGINX można sprawdzić przy użyciu kubectl get nginxingresscontroller polecenia .

    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 ruchu przychodzącego Kubernetes w celu utworzenia odpowiednich zasobów.

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

    kubectl create namespace hello-web-app-routing
    
  2. Utwórz wdrożenie, kopiując następujący manifest YAML do nowego pliku o nazwie deployment.yaml i zapisz plik na komputerze lokalnym.

    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. Utwórz usługę, kopiując następujący manifest YAML do nowego pliku o nazwie service.yaml i zapisując plik na komputerze lokalnym.

    apiVersion: v1
    kind: Service
    metadata:
      name: aks-helloworld
      namespace: hello-web-app-routing
    spec:
      type: ClusterIP
      ports:
      - port: 80
      selector:
        app: aks-helloworld
    
  4. Utwórz zasoby klastra przy użyciu kubectl apply polecenia .

    kubectl apply -f deployment.yaml -n hello-web-app-routing
    

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

    deployment.apps/aks-helloworld created created
    
    kubectl apply -f service.yaml -n hello-web-app-routing
    

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

    service/aks-helloworld created created
    

Utwórz zasób ruchu przychodzącego, który używa nazwy hosta w prywatnej strefie DNS platformy Azure i prywatnego adresu IP

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

    Zaktualizuj <Hostname> ciąg nazwą hosta DNS, na przykład helloworld.private.contoso.com. Sprawdź, czy określasz nginx-internal dla elementu ingressClassName.

    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. Utwórz zasoby klastra przy użyciu kubectl apply polecenia .

    kubectl apply -f ingress.yaml -n hello-web-app-routing
    

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

    ingress.networking.k8s.io/aks-helloworld created
    

Sprawdź, czy utworzono zarządzany ruch przychodzący

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

kubectl get ingress -n hello-web-app-routing

W poniższych przykładowych danych wyjściowych przedstawiono utworzony zarządzany ruch przychodzący:

NAME             CLASS            HOSTS                            ADDRESS      PORTS   AGE
aks-helloworld   nginx-internal   helloworld.private.contoso.com   10.224.0.7   80      98s

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

W ciągu kilku minut uruchom 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 to myResourceGroup , a strefa DNS jest private.contoso.com.

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

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

[
  {
    "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"
  }
]

Następne kroki

Aby uzyskać inne informacje o konfiguracji związane z szyfrowaniem SSL inne zaawansowane kontrolery ruchu przychodzącego NGINX i konfiguracja zasobów ruchu przychodzącego, przejrzyj konfigurację dns i ssl oraz konfigurację dodatku routingu aplikacji.