Dodatek routingu aplikacji HTTP dla Azure Kubernetes Service (AKS) (wycofany)

Przestroga

Dodatek routingu aplikacji HTTP (wersja zapoznawcza) dla Azure Kubernetes Service (AKS) zostanie wycofany 3 marca 2025 r. Zalecamy migrację do dodatku routingu aplikacji do tej daty.

Dodatek routingu aplikacji HTTP ułatwia dostęp do aplikacji wdrożonych w klastrze Azure Kubernetes Service (AKS) przez:

  • Konfigurowanie kontrolera ruchu przychodzącego w klastrze usługi AKS.
  • Tworzenie publicznie dostępnych nazw DNS dla punktów końcowych aplikacji
  • Tworzenie strefy DNS w ramach subskrypcji. Aby uzyskać więcej informacji na temat kosztów dns, zobacz Cennik usługi DNS.

Zanim rozpoczniesz

  • Dodatek routingu aplikacji HTTP nie działa z usługą AKS w wersji 1.22.6 lub nowszej.
  • Jeśli uruchamiasz polecenia lokalnie, zainstaluj kubectl je przy użyciu az aks install-cli polecenia .

Omówienie dodatku routingu aplikacji HTTP

Dodatek wdraża dwa składniki: kontroler ruchu przychodzącego Kubernetes i zewnętrzny kontroler DNS .

  • Kontroler ruchu przychodzącego: kontroler ruchu przychodzącego jest uwidoczniony w Internecie przy użyciu usługi Kubernetes LoadBalancer . Kontroler ruchu przychodzącego monitoruje i implementuje zasoby ruchu przychodzącego platformy Kubernetes i tworzy trasy do punktów końcowych aplikacji.
  • Zewnętrzny kontroler DNS: kontroler External-DNS obserwuje zasoby przychodzące kubernetes i tworzy rekordy DNS A w strefie DNS specyficznej dla klastra.

Włączanie routingu aplikacji HTTP

  1. Utwórz nowy klaster usługi AKS i włącz dodatek routingu aplikacji HTTP przy użyciu az aks create polecenia z parametrem --enable-addons .

    az aks create --resource-group myResourceGroup --name myAKSCluster --enable-addons http_application_routing
    

    Możesz również włączyć routing HTTP w istniejącym klastrze usługi AKS przy użyciu az aks enable-addons polecenia z parametrem --addons .

    az aks enable-addons --resource-group myResourceGroup --name myAKSCluster --addons http_application_routing
    
  2. Pobierz nazwę strefy DNS przy użyciu az aks show polecenia . Do wdrożenia aplikacji w klastrze potrzebna jest nazwa strefy DNS.

    az aks show --resource-group myResourceGroup --name myAKSCluster --query addonProfiles.httpApplicationRouting.config.HTTPApplicationRoutingZoneName -o table
    

    Dane wyjściowe powinny wyglądać podobnie do następujących przykładowych danych wyjściowych:

    9f9c1fe7-21a1-416d-99cd-3543bb92e4c3.eastus.aksapp.io
    

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

  • Skonfiguruj kubectl polecenie , aby nawiązać połączenie z klastrem az aks get-credentials Kubernetes. Poniższy przykład umożliwia pobranie poświadczeń dla nazwy klastra usługi AKS myAKSCluster w grupie zasobów myResourceGroup:

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

Korzystanie z routingu aplikacji protokołu HTTP

Ważne

Dodatek routingu aplikacji HTTP może być wyzwalany tylko dla zasobów przychodzących z następującą adnotacją:

annotations:
 kubernetes.io/ingress.class: addon-http-application-routing
  1. Utwórz plik o nazwie samples-http-application-routing.yaml i skopiuj go w następującym pliku YAML. W wierszu 43 zaktualizuj <CLUSTER_SPECIFIC_DNS_ZONE> wartość przy użyciu nazwy strefy DNS zebranej w poprzednim kroku.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: aks-helloworld
    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)"
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: aks-helloworld
    spec:
      type: ClusterIP
      ports:
     - port: 80
      selector:
        app: aks-helloworld
    ---
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: aks-helloworld
      annotations:
        kubernetes.io/ingress.class: addon-http-application-routing
    spec:
      rules:
     - host: aks-helloworld.<CLUSTER_SPECIFIC_DNS_ZONE>
        http:
          paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: aks-helloworld
                port:
                  number: 80
    
  2. Utwórz zasoby przy użyciu kubectl apply polecenia .

    kubectl apply -f samples-http-application-routing.yaml
    

    W poniższym przykładzie przedstawiono utworzone zasoby:

    deployment.apps/aks-helloworld created
    service/aks-helloworld created
    ingress.networking.k8s.io/aks-helloworld created
    
  3. Otwórz przeglądarkę internetową w witrynie aks-helloworld.<>CLUSTER_SPECIFIC_DNS_ZONE, na przykład aks-helloworld.9f9c1fe7-21a1-416d-99cd-3543bb92e4c3.eastus.aksapp.io i sprawdź, czy aplikacja demonstracyjna jest widoczna. Wyświetlenie aplikacji może potrwać kilka minut.

Usuwanie routingu aplikacji HTTP

  1. Usuń dodatek routingu aplikacji HTTP przy użyciu parametru [az aks disable-addons][az-aks-disable-addons] command with the addons".

    az aks disable-addons --addons http_application_routing --name myAKSCluster --resource-group myResourceGroup --no-wait
    
  2. Gdy dodatek routingu aplikacji HTTP jest wyłączony, niektóre zasoby kubernetes mogą pozostać w klastrze. Te zasoby obejmują configmaps i wpisy tajne i są tworzone w przestrzeni nazw kube-system . Aby zachować czysty klaster, możesz usunąć te zasoby. Poszukaj zasobów addon-http-application-routing przy użyciu następujących kubectl get poleceń:

    kubectl get deployments --namespace kube-system
    kubectl get services --namespace kube-system
    kubectl get configmaps --namespace kube-system
    kubectl get secrets --namespace kube-system
    

    W poniższych przykładowych danych wyjściowych przedstawiono configmapy , które powinny zostać usunięte:

    NAMESPACE     NAME                                                       DATA   AGE
    kube-system   addon-http-application-routing-nginx-configuration         0      9m7s
    kube-system   addon-http-application-routing-tcp-services                0      9m7s
    kube-system   addon-http-application-routing-udp-services                0      9m7s
    
  3. Usuń pozostałe zasoby przy użyciu kubectl delete polecenia . Upewnij się, że określono typ zasobu, nazwę zasobu i przestrzeń nazw. Poniższy przykład usuwa jedną z poprzednich map konfiguracji:

    kubectl delete configmaps addon-http-application-routing-nginx-configuration --namespace kube-system
    
  4. Powtórz poprzedni kubectl delete krok dla wszystkich zasobów routingu addon-http-application-routingu pozostałych w klastrze.

Rozwiązywanie problemów

  1. Wyświetl dzienniki aplikacji dla aplikacji External-DNS przy użyciu kubectl logs polecenia .

    kubectl logs -f deploy/addon-http-application-routing-external-dns -n kube-system
    

    Dzienniki powinny potwierdzić, że A rekord DNS i TXT został utworzony pomyślnie, jak pokazano w następujących przykładowych danych wyjściowych:

    time="2018-04-26T20:36:19Z" level=info msg="Updating A record named 'aks-helloworld' to '52.242.28.189' for Azure DNS zone '471756a6-e744-4aa0-aa01-89c4d162a7a7.canadaeast.aksapp.io'."
    time="2018-04-26T20:36:21Z" level=info msg="Updating TXT record named 'aks-helloworld' to '"heritage=external-dns,external-dns/owner=default"' for Azure DNS zone '471756a6-e744-4aa0-aa01-89c4d162a7a7.canadaeast.aksapp.io'."
    
  2. Wyświetl dzienniki aplikacji dla kontrolera ruchu przychodzącego NGINX przy użyciu kubectl logs polecenia .

    kubectl logs -f deploy/addon-http-application-routing-nginx-ingress-controller -n kube-system
    

    Dzienniki powinny potwierdzić CREATE zasób ruchu przychodzącego i ponowne załadowanie kontrolera, jak pokazano w następujących przykładowych danych wyjściowych:

    -------------------------------------------------------------------------------
    NGINX Ingress controller
      Release:    0.13.0
      Build:      git-4bc943a
      Repository: https://github.com/kubernetes/ingress-nginx
    -------------------------------------------------------------------------------
    
    I0426 20:30:12.212936       9 flags.go:162] Watching for ingress class: addon-http-application-routing
    W0426 20:30:12.213041       9 flags.go:165] only Ingress with class "addon-http-application-routing" will be processed by this ingress controller
    W0426 20:30:12.213505       9 client_config.go:533] Neither --kubeconfig nor --master was specified.  Using the inClusterConfig.  This might not work.
    I0426 20:30:12.213752       9 main.go:181] Creating API client for https://10.0.0.1:443
    I0426 20:30:12.287928       9 main.go:225] Running in Kubernetes Cluster version v1.8 (v1.8.11) - git (clean) commit 1df6a8381669a6c753f79cb31ca2e3d57ee7c8a3 - platform linux/amd64
    I0426 20:30:12.290988       9 main.go:84] validated kube-system/addon-http-application-routing-default-http-backend as the default backend
    I0426 20:30:12.294314       9 main.go:105] service kube-system/addon-http-application-routing-nginx-ingress validated as source of Ingress status
    I0426 20:30:12.426443       9 stat_collector.go:77] starting new nginx stats collector for Ingress controller running in namespace  (class addon-http-application-routing)
    I0426 20:30:12.426509       9 stat_collector.go:78] collector extracting information from port 18080
    I0426 20:30:12.448779       9 nginx.go:281] starting Ingress controller
    I0426 20:30:12.463585       9 event.go:218] Event(v1.ObjectReference{Kind:"ConfigMap", Namespace:"kube-system", Name:"addon-http-application-routing-nginx-configuration", UID:"2588536c-4990-11e8-a5e1-0a58ac1f0ef2", APIVersion:"v1", ResourceVersion:"559", FieldPath:""}): type: 'Normal' reason: 'CREATE' ConfigMap kube-system/addon-http-application-routing-nginx-configuration
    I0426 20:30:12.466945       9 event.go:218] Event(v1.ObjectReference{Kind:"ConfigMap", Namespace:"kube-system", Name:"addon-http-application-routing-tcp-services", UID:"258ca065-4990-11e8-a5e1-0a58ac1f0ef2", APIVersion:"v1", ResourceVersion:"561", FieldPath:""}): type: 'Normal' reason: 'CREATE' ConfigMap kube-system/addon-http-application-routing-tcp-services
    I0426 20:30:12.467053       9 event.go:218] Event(v1.ObjectReference{Kind:"ConfigMap", Namespace:"kube-system", Name:"addon-http-application-routing-udp-services", UID:"259023bc-4990-11e8-a5e1-0a58ac1f0ef2", APIVersion:"v1", ResourceVersion:"562", FieldPath:""}): type: 'Normal' reason: 'CREATE' ConfigMap kube-system/addon-http-application-routing-udp-services
    I0426 20:30:13.649195       9 nginx.go:302] starting NGINX process...
    I0426 20:30:13.649347       9 leaderelection.go:175] attempting to acquire leader lease  kube-system/ingress-controller-leader-addon-http-application-routing...
    I0426 20:30:13.649776       9 controller.go:170] backend reload required
    I0426 20:30:13.649800       9 stat_collector.go:34] changing prometheus collector from  to default
    I0426 20:30:13.662191       9 leaderelection.go:184] successfully acquired lease kube-system/ingress-controller-leader-addon-http-application-routing
    I0426 20:30:13.662292       9 status.go:196] new leader elected: addon-http-application-routing-nginx-ingress-controller-5cxntd6
    I0426 20:30:13.763362       9 controller.go:179] ingress backend successfully reloaded...
    I0426 21:51:55.249327       9 event.go:218] Event(v1.ObjectReference{Kind:"Ingress", Namespace:"default", Name:"aks-helloworld", UID:"092c9599-499c-11e8-a5e1-0a58ac1f0ef2", APIVersion:"extensions", ResourceVersion:"7346", FieldPath:""}): type: 'Normal' reason: 'CREATE' Ingress default/aks-helloworld
    W0426 21:51:57.908771       9 controller.go:775] service default/aks-helloworld does not have any active endpoints
    I0426 21:51:57.908951       9 controller.go:170] backend reload required
    I0426 21:51:58.042932       9 controller.go:179] ingress backend successfully reloaded...
    167.220.24.46 - [167.220.24.46] - - [26/Apr/2018:21:53:20 +0000] "GET / HTTP/1.1" 200 234 "" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)" 197 0.001 [default-aks-helloworld-80] 10.244.0.13:8080 234 0.004 200
    

Czyszczenie zasobów

  • Usuń skojarzone obiekty Kubernetes utworzone w tym artykule przy użyciu kubectl delete polecenia .

    kubectl delete -f samples-http-application-routing.yaml
    

    Następujące przykładowe dane wyjściowe pokazują, że obiekty Kubernetes zostały usunięte:

    deployment "aks-helloworld" deleted
    service "aks-helloworld" deleted
    ingress "aks-helloworld" deleted
    

Następne kroki

Aby uzyskać informacje na temat sposobu instalowania kontrolera ruchu przychodzącego zabezpieczonego protokołem HTTPS w usłudze AKS, zobacz Ruch przychodzący HTTPS na Azure Kubernetes Service (AKS).