Przeczytaj w języku angielskim

Udostępnij za pośrednictwem


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

Przestroga

Dodatek routingu aplikacji HTTP (wersja zapoznawcza) dla usługi 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 usługi 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 o kosztach usługi 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 polecenie za az aks install-cli pomocą 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.
  • Kontroler external-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 \
        --generate-ssh-keys
    

    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 , aby nawiązać połączenie z klastrem az aks get-credentials Kubernetes przy użyciu polecenia . 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
    

    Poniższy przykład przedstawia 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ą mapy konfiguracji i wpisy tajne i są tworzone w przestrzeni nazw kube-system. Aby zachować czysty klaster, możesz usunąć te zasoby. Wyszukaj zasoby 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 mapy konfiguracji, 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ł pomyślnie utworzony, 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 ponownie załadować 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 przy użyciu protokołu HTTPS w usłudze AKS, zobacz Ruch przychodzący HTTPS w usłudze Azure Kubernetes Service (AKS).