Směrování aplikace HTTPHTTP application routing

Řešení směrování aplikace HTTP usnadňuje přístup k aplikacím, které jsou nasazeny do vašeho clusteru Azure Kubernetes Service (AKS).The HTTP application routing solution makes it easy to access applications that are deployed to your Azure Kubernetes Service (AKS) cluster. Když je řešení povolené, nakonfiguruje v clusteru AKS adaptér příchozího přenosu dat.When the solution's enabled, it configures an Ingress controller in your AKS cluster. Při nasazení aplikací řešení také vytvoří veřejně přístupné názvy DNS pro koncové body aplikací.As applications are deployed, the solution also creates publicly accessible DNS names for application endpoints.

Když je doplněk povolený, vytvoří v předplatném zónu DNS.When the add-on is enabled, it creates a DNS Zone in your subscription. Další informace o cenách služby DNS najdete v tématu ceny služby DNS.For more information about DNS cost, see DNS pricing.

Upozornění

Doplněk pro 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.The HTTP application routing add-on is designed to let you quickly create an ingress controller and access your applications. Tento doplněk není aktuálně navržený pro použití v produkčním prostředí a nedoporučuje se pro produkční použití.This add-on is not currently designed for use in a production environment and is not recommended for production use. Pro nasazení příchozích dat do provozu, která zahrnují víc replik a podporu TLS, najdete informace v tématu vytvoření řadiče HTTPS pro příchozípřenosy.For production-ready ingress deployments that include multiple replicas and TLS support, see Create an HTTPS ingress controller.

Přehled řešení směrování HTTPHTTP routing solution overview

Doplněk nasazuje dvě součásti: kontroler příchozího přenosu dat Kubernetes a externí řadič DNS .The add-on deploys two components: a Kubernetes Ingress controller and an External-DNS controller.

  • Adaptér příchozího přenosu dat: kontroler příchozího přenosu dat je přístupný pro Internet pomocí služby Kubernetes typu Vyrovnávání zatížení.Ingress controller : The Ingress controller is exposed to the internet by using a Kubernetes service of type LoadBalancer. Kontroler příchozího přenosu dat sleduje a implementuje Kubernetes příchozí prostředky, které vytváří trasy k koncovým bodům aplikace.The Ingress controller watches and implements Kubernetes Ingress resources, which creates routes to application endpoints.
  • Externí kontroler DNS : sleduje Kubernetes prostředky příchozího přenosu dat a vytváří záznamy DNS v zóně DNS specifické pro clustery.External-DNS controller : Watches for Kubernetes Ingress resources and creates DNS A records in the cluster-specific DNS zone.

Nasazení směrování HTTP: rozhraní příkazového řádkuDeploy HTTP routing: CLI

Doplněk směrování aplikace HTTP může být při nasazení clusteru AKS povolen s rozhraním příkazového řádku Azure CLI.The HTTP application routing add-on can be enabled with the Azure CLI when deploying an AKS cluster. K tomu použijte příkaz AZ AKS Create s --enable-addons argumentem.To do so, use the az aks create command with the --enable-addons argument.

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

Tip

Pokud chcete povolit vícenásobné doplňky, poskytněte je jako seznam oddělený čárkami.If you want to enable multiple add-ons, provide them as a comma-separated list. Pokud chcete například povolit směrování a monitorování aplikací HTTP, použijte formát --enable-addons http_application_routing,monitoring .For example, to enable HTTP application routing and monitoring, use the format --enable-addons http_application_routing,monitoring.

V existujícím clusteru AKS můžete taky povolit směrování HTTP pomocí příkazu AZ AKS Enable-addons .You can also enable HTTP routing on an existing AKS cluster using the az aks enable-addons command. Pokud chcete povolit směrování protokolu 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:To enable HTTP routing on an existing cluster, add the --addons parameter and specify http_application_routing as shown in the following example:

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

Po nasazení nebo aktualizaci clusteru použijte příkaz AZ AKS show , který načte název zóny DNS.After the cluster is deployed or updated, use the az aks show command to retrieve the DNS zone name.

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

Tento název je nutný k nasazení aplikací do clusteru AKS a je zobrazený v následujícím příkladu výstupu:This name is needed to deploy applications to the AKS cluster and is shown in the following example output:

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

Nasazení směrování HTTP: portálDeploy HTTP routing: Portal

Doplněk směrování aplikace HTTP lze povolit prostřednictvím Azure Portal při nasazování clusteru AKS.The HTTP application routing add-on can be enabled through the Azure portal when deploying an AKS cluster.

Povolení funkce směrování protokolu HTTP

Po nasazení clusteru přejděte do automaticky vytvořené skupiny prostředků AKS a vyberte zónu DNS.After the cluster is deployed, browse to the auto-created AKS resource group and select the DNS zone. Poznamenejte si název zóny DNS.Take note of the DNS zone name. Tento název je nutný k nasazení aplikací do clusteru AKS.This name is needed to deploy applications to the AKS cluster.

Získat název zóny DNS

Připojení ke clusteru AKSConnect to your AKS cluster

Pokud se chcete připojit ke clusteru Kubernetes z místního počítače, použijte klienta příkazového řádku Kubernetes kubectl.To connect to the Kubernetes cluster from your local computer, you use kubectl, the Kubernetes command-line client.

Pokud používáte Azure Cloud Shell, kubectl je už nainstalovaný.If you use the Azure Cloud Shell, kubectl is already installed. Můžete ho také nainstalovat místně, a to pomocí příkazu az aks install-cli:You can also install it locally using the az aks install-cli command:

az aks install-cli

Pomocí příkazu az aks get-credentials nakonfigurujte klienta kubectl pro připojení k vašemu clusteru Kubernetes.To configure kubectl to connect to your Kubernetes cluster, use the az aks get-credentials command. Následující příklad vrátí pověření pro cluster AKS s názvem MyAKSCluster v MyResourceGroup :The following example gets credentials for the AKS cluster named MyAKSCluster in the MyResourceGroup :

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

Použití směrování protokolu HTTPUse HTTP routing

Řešení směrování aplikace HTTP se dá aktivovat jenom u prostředků příchozího přenosu dat, které jsou poznámy takto:The HTTP application routing solution may only be triggered on Ingress resources that are annotated as follows:

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

Vytvořte soubor s názvem Samples-http-Application-Routing. yaml a ZKOPÍRUJTE následující YAML.Create a file named samples-http-application-routing.yaml and copy in the following YAML. Na řádku 43 aktualizujte <CLUSTER_SPECIFIC_DNS_ZONE> pomocí názvu zóny DNS shromážděného v předchozím kroku tohoto článku.On line 43, update <CLUSTER_SPECIFIC_DNS_ZONE> with the DNS zone name collected in the previous step of this article.

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/v1beta1
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:
      - backend:
          serviceName: aks-helloworld
          servicePort: 80
        path: /

K vytvoření prostředků použijte příkaz kubectl Apply .Use the kubectl apply command to create the resources.

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

Následující příklad ukazuje vytvořené prostředky:The following example shows the created resources:

$ 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č a Akste Hello. <CLUSTER_SPECIFIC_DNS_ZONE> například AKS-HelloWorld.9f9c1fe7-21a1-416d-99cd-3543bb92e4c3.eastus.aksapp.IO a ověřte, že vidíte ukázkovou aplikaci.Open a web browser to aks-helloworld.<CLUSTER_SPECIFIC_DNS_ZONE> , for example aks-helloworld.9f9c1fe7-21a1-416d-99cd-3543bb92e4c3.eastus.aksapp.io and verify you see the demo application. Zobrazení aplikace může trvat několik minut.The application may take a few minutes to appear.

Odebrat směrování protokolu HTTPRemove HTTP routing

Řešení směrování HTTP se dá odebrat pomocí Azure CLI.The HTTP routing solution can be removed using the Azure CLI. Uděláte to tak, že spustíte následující příkaz, kde nahradíte svůj cluster AKS a název skupiny prostředků.To do so run the following command, substituting your AKS cluster and resource group name.

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

Když je doplněk pro směrování aplikace HTTP zakázaný, některé prostředky Kubernetes můžou v clusteru zůstat.When the HTTP application routing add-on is disabled, some Kubernetes resources may remain in the cluster. Tyto prostředky zahrnují configMaps a tajné klíče a vytvářejí se v oboru názvů Kube-System .These resources include configMaps and secrets , and are created in the kube-system namespace. Pokud chcete zachovat čistý cluster, možná budete chtít tyto prostředky odebrat.To maintain a clean cluster, you may want to remove these resources.

Vyhledejte prostředky addon-http-Application-Routing pomocí následujících příkazů Get kubectl :Look for addon-http-application-routing resources using the following kubectl get commands:

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 configMaps, které by se měly odstranit:The following example output shows configMaps that should be deleted:

$ 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 .To delete resources, use the kubectl delete command. Zadejte typ prostředku, název prostředku a obor názvů.Specify the resource type, resource name, and namespace. Následující příklad odstraní jednu z předchozích configmaps:The following example deletes one of the previous configmaps:

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

Opakujte předchozí kubectl delete krok pro všechny prostředky funkce addon-http-Application-Routing , které zůstaly ve vašem clusteru.Repeat the previous kubectl delete step for all addon-http-application-routing resources that remained in your cluster.

Řešení potížíTroubleshoot

Pomocí příkazu kubectl logs Zobrazte protokoly aplikací pro externí aplikaci DNS.Use the kubectl logs command to view the application logs for the External-DNS application. Protokoly by měly potvrdit, že byl úspěšně vytvořen záznam DNS a a TXT.The logs should confirm that an A and TXT DNS record were created successfully.

$ 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 taky můžou zobrazit na prostředku zóny DNS v Azure Portal.These records can also be seen on the DNS zone resource in the Azure portal.

Získat záznamy DNS

Pomocí příkazu kubectl logs Zobrazte protokoly aplikací pro kontroler Nginx pro příchozí přenosy.Use the kubectl logs command to view the application logs for the Nginx Ingress controller. Protokoly by měly potvrdit CREATE prostředek příchozího přenosu dat a znovu načíst řadič.The logs should confirm the CREATE of an Ingress resource and the reload of the controller. Všechny aktivity HTTP jsou protokolovány.All HTTP activity is logged.

$ 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íClean up

Odeberte přidružené objekty Kubernetes vytvořené v tomto článku pomocí kubectl delete .Remove the associated Kubernetes objects created in this article using kubectl delete.

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

Ukázkový výstup zobrazuje objekty Kubernetes, které byly odebrány.The example output shows Kubernetes objects have been removed.

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

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

Další krokyNext steps

Informace o tom, jak nainstalovat řadič příchozího přenosu HTTPS v AKS, najdete v tématu https informing on Azure Kubernetes Service (AKS).For information on how to install an HTTPS-secured Ingress controller in AKS, see HTTPS Ingress on Azure Kubernetes Service (AKS).