Suplemento de encaminhamento de aplicações HTTP para Azure Kubernetes Service (AKS) (descontinuado)
Atenção
O suplemento de encaminhamento de aplicações HTTP (pré-visualização) para Azure Kubernetes Service (AKS) será descontinuado a 03 de março de 2025. Recomendamos a migração para o suplemento Encaminhamento de Aplicações até essa data.
O suplemento de encaminhamento de aplicações HTTP facilita o acesso às aplicações implementadas no cluster do Azure Kubernetes Service (AKS):
- Configurar um controlador de entrada no cluster do AKS.
- Criar nomes DNS acessíveis publicamente para pontos finais de aplicação
- Criar uma zona DNS na sua subscrição. Para obter mais informações sobre o custo do DNS, veja Preços DNS.
Antes de começar
- O suplemento de encaminhamento de aplicações HTTP não funciona com as versões do AKS 1.22.6+.
- Se estiver a executar comandos localmente, instale
kubectl
com oaz aks install-cli
comando .
Descrição geral do suplemento de encaminhamento de aplicações HTTP
O suplemento implementa dois componentes: um controlador de entrada do Kubernetes e um controlador DNS Externo .
-
Controlador de entrada: o controlador de entrada é exposto à Internet através de um serviço kubernetes
LoadBalancer
. O controlador de entrada observa e implementa recursos de entrada do Kubernetes e cria rotas para pontos finais de aplicação. -
Controlador DNS Externo: o controlador DNS Externo observa os recursos de entrada do Kubernetes e cria registos DNS
A
na zona DNS específica do cluster.
Ativar o encaminhamento de aplicações HTTP
Crie um novo cluster do AKS e ative o suplemento de encaminhamento de aplicações HTTP com o
az aks create
comando com o--enable-addons
parâmetro .az aks create \ --resource-group myResourceGroup \ --name myAKSCluster \ --enable-addons http_application_routing \ --generate-ssh-keys
Também pode ativar o encaminhamento HTTP num cluster do AKS existente com o
az aks enable-addons
comando com o--addons
parâmetro .az aks enable-addons --resource-group myResourceGroup --name myAKSCluster --addons http_application_routing
Obtenha o nome da zona DNS com o
az aks show
comando . Precisa do nome da zona DNS para implementar aplicações no cluster.az aks show --resource-group myResourceGroup --name myAKSCluster --query addonProfiles.httpApplicationRouting.config.HTTPApplicationRoutingZoneName -o table
O resultado deve ter o seguinte aspeto de exemplo:
9f9c1fe7-21a1-416d-99cd-3543bb92e4c3.eastus.aksapp.io
Ligar ao cluster do AKS
Configure
kubectl
para ligar ao cluster do Kubernetes com oaz aks get-credentials
comando . O exemplo seguinte obtém credenciais para o cluster do AKS com o nome myAKSCluster no myResourceGroup:az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
Usar o encaminhamento de aplicações de HTTP
Importante
O suplemento de encaminhamento de aplicações HTTP só pode ser acionado em recursos de entrada com a seguinte anotação:
annotations:
kubernetes.io/ingress.class: addon-http-application-routing
Crie um ficheiro com o nome samples-http-application-routing.yaml e copie o seguinte YAML. Na linha 43, atualize
<CLUSTER_SPECIFIC_DNS_ZONE>
com o nome da zona DNS que recolheu no passo anterior.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
Crie os recursos com o
kubectl apply
comando .kubectl apply -f samples-http-application-routing.yaml
O exemplo seguinte mostra os recursos criados:
deployment.apps/aks-helloworld created service/aks-helloworld created ingress.networking.k8s.io/aks-helloworld created
Abra um browser para aks-helloworld.<>CLUSTER_SPECIFIC_DNS_ZONE, por exemplo, aks-helloworld.9f9c1fe7-21a1-416d-99cd-3543bb92e4c3.eastus.aksapp.io e verifique se vê a aplicação de demonstração. A aplicação pode demorar alguns minutos a aparecer.
Remover o encaminhamento de aplicações HTTP
Remova o suplemento de encaminhamento de aplicações HTTP com o parâmetro [
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
Quando o suplemento de encaminhamento de aplicações HTTP está desativado, alguns recursos do Kubernetes poderão permanecer no cluster. Estes recursos incluem configmaps e segredos e são criados no espaço de nomes do sistema kube . Para manter um cluster limpo, poderá querer remover estes recursos. Procure recursos de encaminhamento de addon-http-application com os seguintes
kubectl get
comandos:kubectl get deployments --namespace kube-system kubectl get services --namespace kube-system kubectl get configmaps --namespace kube-system kubectl get secrets --namespace kube-system
O resultado de exemplo seguinte mostra os configmaps que devem ser eliminados:
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
Elimine os recursos restantes com o
kubectl delete
comando . Certifique-se de que especifica o tipo de recurso, o nome do recurso e o espaço de nomes. O exemplo seguinte elimina um dos configmaps anteriores:kubectl delete configmaps addon-http-application-routing-nginx-configuration --namespace kube-system
Repita o passo anterior
kubectl delete
para todos os recursos de encaminhamento de aplicações addon-http-application restantes no cluster.
Resolução de problemas
Veja os registos de aplicações da aplicação External-DNS com o
kubectl logs
comando .kubectl logs -f deploy/addon-http-application-routing-external-dns -n kube-system
Os registos devem confirmar que um
A
registo DNS eTXT
foram criados com êxito, conforme mostrado no seguinte exemplo de saída: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'."
Veja os registos de aplicações do controlador de entrada NGINX com o
kubectl logs
comando .kubectl logs -f deploy/addon-http-application-routing-nginx-ingress-controller -n kube-system
Os registos devem confirmar o
CREATE
recurso de entrada e a recarregamento do controlador, conforme mostrado no seguinte exemplo de saída:------------------------------------------------------------------------------- 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
Limpar os recursos
Remova os objetos do Kubernetes associados criados neste artigo com o
kubectl delete
comando .kubectl delete -f samples-http-application-routing.yaml
O resultado de exemplo seguinte mostra que os objetos do Kubernetes foram removidos:
deployment "aks-helloworld" deleted service "aks-helloworld" deleted ingress "aks-helloworld" deleted
Passos seguintes
Para obter informações sobre como instalar um controlador de entrada protegido por HTTPS no AKS, veja Entrada HTTPS no Azure Kubernetes Service (AKS).
Azure Kubernetes Service
Comentários
https://aka.ms/ContentUserFeedback.
Brevemente: Ao longo de 2024, vamos descontinuar progressivamente o GitHub Issues como mecanismo de feedback para conteúdos e substituí-lo por um novo sistema de feedback. Para obter mais informações, veja:Submeter e ver comentários