Směrování aplikace HTTP

Řešení směrování aplikací HTTP usnadňuje přístup k aplikacím nasazeným do vašeho clusteru Azure Kubernetes Service (AKS). Když je řešení povolené, nakonfiguruje kontroler příchozího přenosu dat ve vašem clusteru AKS. Při nasazování aplikací také řešení vytvoří veřejně přístupné názvy DNS pro koncové body aplikace.

Když je doplněk povolený, vytvoří ve vašem předplatném zónu DNS. Další informace o nákladech na DNS najdete v tématu Ceny DNS.

Upozornění

Doplněk směrování aplikací HTTP je navržený tak, aby vám umožnil rychle vytvořit kontroler příchozího přenosu dat a přistupovat k aplikacím. Tento doplněk není momentálně určený pro použití v produkčním prostředí a nedoporučuje se pro produkční použití. V případě nasazení příchozího přenosu dat připravených pro produkční prostředí, která obsahují více replik a podporu protokolu TLS, najdete v tématu Vytvoření kontroleru příchozího přenosu dat HTTPS.

Omezení

  • Směrování aplikací HTTP v současné době nefunguje s AKS verze 1.22.6+

Přehled řešení směrování HTTP

Doplněk nasadí dvě komponenty: kontroler příchozího přenosu dat Kubernetes a externí řadič DNS .

  • Kontroler příchozího přenosu dat: Kontroler příchozího přenosu dat je vystavený internetu pomocí služby Kubernetes typu LoadBalancer. Kontroler příchozího přenosu dat sleduje a implementuje prostředky příchozího přenosu dat Kubernetes, které vytváří trasy do koncových bodů aplikace.
  • Externí kontroler DNS: Sleduje prostředky příchozího přenosu dat Kubernetes a vytváří záznamy DNS A v zóně DNS specifické pro cluster.

Nasazení směrování HTTP: ROZHRANÍ příkazového řádku

Doplněk pro směrování aplikací HTTP je možné povolit pomocí Azure CLI při nasazování clusteru AKS. K tomu použijte příkaz az aks create s argumentem --enable-addons .

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

Tip

Pokud chcete povolit více doplňků, zadejte je jako seznam oddělený čárkami. Pokud například chcete povolit směrování a monitorování aplikací HTTP, použijte formát --enable-addons http_application_routing,monitoring.

Směrování HTTP můžete povolit také v existujícím clusteru AKS pomocí příkazu az aks enable-addons . Pokud chcete povolit směrování HTTP v existujícím clusteru, přidejte --addons parametr a zadejte http_application_routing , jak je znázorněno v následujícím příkladu:

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

Po nasazení nebo aktualizaci clusteru pomocí příkazu az aks show načtěte název zóny DNS.

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

Tento název je potřeba k nasazení aplikací do clusteru AKS a zobrazuje se v následujícím příkladu výstupu:

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

Nasazení směrování HTTP: Portál

Doplněk pro směrování aplikací HTTP je možné povolit prostřednictvím Azure Portal při nasazování clusteru AKS.

Enable the HTTP routing feature

Po nasazení clusteru přejděte do automaticky vytvořené skupiny prostředků AKS a vyberte zónu DNS. Poznamenejte si název zóny DNS. Tento název je potřeba k nasazení aplikací do clusteru AKS.

Get the DNS zone name

Připojení do clusteru AKS

Pokud se chcete připojit ke clusteru Kubernetes z místního počítače, použijte klienta příkazového řádku Kubernetes kubectl.

Pokud používáte Azure Cloud Shell, kubectl je už nainstalovaný. Můžete ho také nainstalovat místně, a to pomocí příkazu az aks install-cli:

az aks install-cli

Pomocí příkazu az aks get-credentials nakonfigurujte klienta kubectl pro připojení k vašemu clusteru Kubernetes. Následující příklad získá přihlašovací údaje pro cluster AKS s názvem MyAKSCluster v MyResourceGroup:

az aks get-credentials --resource-group MyResourceGroup --name MyAKSCluster

Použití směrování HTTP

Řešení směrování aplikací HTTP se může aktivovat pouze u prostředků příchozího přenosu dat, které jsou označené takto:

annotations:
  kubernetes.io/ingress.class: addon-http-application-routing

Vytvořte soubor s názvem samples-http-application-routing.yaml a zkopírujte ho do následujícího YAML. Na řádku 43 aktualizujte <CLUSTER_SPECIFIC_DNS_ZONE> název zóny DNS shromážděný v předchozím kroku tohoto článku.

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

K vytvoření prostředků použijte příkaz kubectl apply .

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

Následující příklad ukazuje vytvořené prostředky:

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

deployment.apps/aks-helloworld created
service/aks-helloworld created
ingress.networking.k8s.io/aks-helloworld created

Otevřete webový prohlížeč pro aks-helloworld.<>CLUSTER_SPECIFIC_DNS_ZONE, například aks-helloworld.9f9c1fe7-21a1-416d-99cd-3543bb92e4c3.eastus.aksapp.io a ověřte, že se zobrazí ukázková aplikace. Zobrazení aplikace může trvat několik minut.

Odebrání směrování HTTP

Řešení směrování HTTP je možné odebrat pomocí Azure CLI. Spuštěním následujícího příkazu nahraďte cluster AKS a název skupiny prostředků.

az aks disable-addons --addons http_application_routing --name myAKSCluster --resource-group myResourceGroup --no-wait

Pokud je doplněk směrování aplikací HTTP zakázaný, některé prostředky Kubernetes můžou zůstat v clusteru. Tyto prostředky zahrnují objekty configMap a tajné kódy a jsou vytvořeny v oboru názvů kube-system . Pokud chcete udržovat čistý cluster, můžete tyto prostředky odebrat.

Pomocí následujících příkazů kubectl get vyhledejte prostředky addon-http-application-routing:

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

Následující příklad výstupu ukazuje objekty configMap, které by se měly odstranit:

$ kubectl get configmaps --namespace kube-system

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

K odstranění prostředků použijte příkaz kubectl delete . Zadejte typ prostředku, název prostředku a obor názvů. Následující příklad odstraní jednu z předchozích konfiguračních map:

kubectl delete configmaps addon-http-application-routing-nginx-configuration --namespace kube-system

Opakujte předchozí kubectl delete krok pro všechny prostředky směrování doplňků http-application-routing , které zůstaly ve vašem clusteru.

Řešení potíží

Pomocí příkazu kubectl logs zobrazte protokoly aplikace pro aplikaci External-DNS. Protokoly by měly potvrdit úspěšné vytvoření záznamu DNS A a TXT.

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

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'."

Tyto záznamy se také dají zobrazit u prostředku zóny DNS v Azure Portal.

Get the DNS records

Pomocí příkazu kubectl logs zobrazte protokoly aplikace pro kontroler příchozího přenosu dat Nginx. Protokoly by měly potvrdit CREATE prostředek příchozího přenosu dat a opětovné načtení kontroleru. Zaprotokoluje se veškerá aktivita HTTP.

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

-------------------------------------------------------------------------------
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

Vyčištění

Odeberte přidružené objekty Kubernetes vytvořené v tomto článku pomocí kubectl delete.

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

Ukázkový výstup ukazuje, že byly odebrány objekty Kubernetes.

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

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

Další kroky

Informace o instalaci kontroleru příchozího přenosu dat zabezpečeného protokolem HTTPS v AKS najdete v tématu Příchozí přenos dat HTTPS na Azure Kubernetes Service (AKS).