Criar um controlador de entrada no Azure Kubernetes Service (AKS)Create an ingress controller in Azure Kubernetes Service (AKS)

Um controlador de entrada é uma parte do software que fornece o proxy inverso, encaminhamento de tráfego configurável e terminação de TLS para serviços do Kubernetes.An ingress controller is a piece of software that provides reverse proxy, configurable traffic routing, and TLS termination for Kubernetes services. Recursos de entrada do Kubernetes são utilizados para configurar as regras de entrada e as rotas para serviços individuais do Kubernetes.Kubernetes ingress resources are used to configure the ingress rules and routes for individual Kubernetes services. Utilizar um controlador de entrada e de regras de entrada, um único endereço IP pode servir-se para encaminhar o tráfego para vários serviços num cluster do Kubernetes.Using an ingress controller and ingress rules, a single IP address can be used to route traffic to multiple services in a Kubernetes cluster.

Este artigo mostra-lhe como implementar o controlador de entradas NGINX num cluster do Azure Kubernetes Service (AKS).This article shows you how to deploy the NGINX ingress controller in an Azure Kubernetes Service (AKS) cluster. Dois aplicativos, em seguida, são executados no cluster do AKS, cada um deles está acessível através do endereço IP único.Two applications are then run in the AKS cluster, each of which is accessible over the single IP address.

Também pode:You can also:

Antes de começarBefore you begin

Este artigo utiliza o Helm para instalar o controlador de entrada do NGINX, o Gestor de certificado e um exemplo de aplicação web.This article uses Helm to install the NGINX ingress controller, cert-manager, and a sample web app. Tem de ter o Helm inicializado no seu cluster do AKS e utilizar uma conta de serviço para Tiller.You need to have Helm initialized within your AKS cluster and using a service account for Tiller. Para obter mais informações sobre como configurar e utilizar o Helm, consulte instalar aplicações com Helm no Azure Kubernetes Service (AKS).For more information on configuring and using Helm, see Install applications with Helm in Azure Kubernetes Service (AKS).

Este artigo também requer a execução da versão 2.0.64 da CLI do Azure ou posterior.This article also requires that you are running the Azure CLI version 2.0.64 or later. Executar az --version para localizar a versão.Run az --version to find the version. Se precisar de instalar ou atualizar, veja Instalar a CLI do Azure.If you need to install or upgrade, see Install Azure CLI.

Criar um controlador de entradaCreate an ingress controller

Para criar o controlador de entrada, utilize Helm para instalar entrada de nginx.To create the ingress controller, use Helm to install nginx-ingress. Para maior redundância, as duas réplicas dos controladores de entrada de NGINX são implementadas com o --set controller.replicaCount parâmetro.For added redundancy, two replicas of the NGINX ingress controllers are deployed with the --set controller.replicaCount parameter. Para beneficiar totalmente a execução de réplicas do controlador de entrada, certificar-se de que há mais de um nó no cluster do AKS.To fully benefit from running replicas of the ingress controller, make sure there's more than one node in your AKS cluster.

O controlador de entrada também tem de ser agendado num nó de Linux.The ingress controller also needs to be scheduled on a Linux node. Nós do Windows Server (atualmente em pré-visualização no AKS) não deve ser executado o controlador de entrada.Windows Server nodes (currently in preview in AKS) shouldn't run the ingress controller. Um Seletor de nó é especificado com o --set nodeSelector parâmetro para informar o agendador de Kubernetes para executar o controlador de entrada do NGINX num nó baseado em Linux.A node selector is specified using the --set nodeSelector parameter to tell the Kubernetes scheduler to run the NGINX ingress controller on a Linux-based node.

Dica

O exemplo seguinte cria um espaço de nomes do Kubernetes para os recursos de entrada com o nome básico de entrada.The following example creates a Kubernetes namespace for the ingress resources named ingress-basic. Especifique um espaço de nomes para o seu próprio ambiente, conforme necessário.Specify a namespace for your own environment as needed. Se o cluster do AKS não RBAC ativado, adicione --set rbac.create=false para os comandos do Helm.If your AKS cluster is not RBAC enabled, add --set rbac.create=false to the Helm commands.

Dica

Se gostaria de ativar preservação de IP de origem do cliente para os pedidos para contentores no seu cluster, adicionar --set controller.service.externalTrafficPolicy=Local para o Helm comando de instalação.If you would like to enable client source IP preservation for requests to containers in your cluster, add --set controller.service.externalTrafficPolicy=Local to the Helm install command. A origem de cliente IP é armazenado no cabeçalho do pedido em X-reencaminhados-para.The client source IP is stored in the request header under X-Forwarded-For. Ao utilizar um controlador de entrada com preservação de IP de origem de cliente ativada, o pass-through SSL não funcionará.When using an ingress controller with client source IP preservation enabled, SSL pass-through will not work.

# Create a namespace for your ingress resources
kubectl create namespace ingress-basic

# Use Helm to deploy an NGINX ingress controller
helm install stable/nginx-ingress \
    --namespace ingress-basic \
    --set controller.replicaCount=2 \
    --set controller.nodeSelector."beta\.kubernetes\.io/os"=linux \
    --set defaultBackend.nodeSelector."beta\.kubernetes\.io/os"=linux

Quando o serviço de Balanceador de carga do Kubernetes é criado para o controlador de entrada do NGINX, um endereço IP público dinâmico é atribuído, conforme mostrado no seguinte exemplo:When the Kubernetes load balancer service is created for the NGINX ingress controller, a dynamic public IP address is assigned, as shown in the following example output:

$ kubectl get service -l app=nginx-ingress --namespace ingress-basic

NAME                                                 TYPE           CLUSTER-IP     EXTERNAL-IP   PORT(S)                      AGE
aspiring-labradoodle-nginx-ingress-controller        LoadBalancer   10.0.61.144    40.117.74.8   80:30386/TCP,443:32276/TCP   6m2s
aspiring-labradoodle-nginx-ingress-default-backend   ClusterIP      10.0.192.145   <none>        80/TCP                       6m2s

Não existem regras de entrada foram criadas no entanto, para que a página 404 do controlador de entrada NGINX predefinida é apresentada se navegar até o endereço IP interno.No ingress rules have been created yet, so the NGINX ingress controller's default 404 page is displayed if you browse to the internal IP address. Regras de entrada estão configuradas nos passos seguintes.Ingress rules are configured in the following steps.

Executar aplicações de demonstraçãoRun demo applications

Para ver o controlador de entrada em ação, vamos executar duas aplicações de demonstração no cluster do AKS.To see the ingress controller in action, let's run two demo applications in your AKS cluster. Neste exemplo, o Helm é utilizada para implementar duas instâncias de um aplicativo "Hello world" simples.In this example, Helm is used to deploy two instances of a simple 'Hello world' application.

Antes de instalar os gráficos do Helm de exemplo, adicione o repositório de exemplos do Azure para o seu ambiente do Helm da seguinte forma:Before you can install the sample Helm charts, add the Azure samples repository to your Helm environment as follows:

helm repo add azure-samples https://azure-samples.github.io/helm-charts/

Crie a primeira aplicação de demonstração de um gráfico Helm com o seguinte comando:Create the first demo application from a Helm chart with the following command:

helm install azure-samples/aks-helloworld --namespace ingress-basic

Agora a instalar uma segunda instância do aplicativo de demonstração.Now install a second instance of the demo application. Para a segunda instância, especifique um novo título para que as duas aplicações são visualmente distintas.For the second instance, you specify a new title so that the two applications are visually distinct. Também especificar um nome de serviço único:You also specify a unique service name:

helm install azure-samples/aks-helloworld \
    --namespace ingress-basic \
    --set title="AKS Ingress Demo" \
    --set serviceName="ingress-demo"

Criar uma rota de entradaCreate an ingress route

Ambas as aplicações estão agora em execução no seu cluster de Kubernetes.Both applications are now running on your Kubernetes cluster. Para encaminhar o tráfego para cada aplicativo, crie um recurso de entrada do Kubernetes.To route traffic to each application, create a Kubernetes ingress resource. O recurso de entrada configura as regras que encaminham o tráfego para uma das duas aplicações.The ingress resource configures the rules that route traffic to one of the two applications.

No exemplo a seguir, o tráfego para o endereço http://40.117.74.8/ é encaminhado para o serviço com o nome aks-helloworld.In the following example, traffic to the address http://40.117.74.8/ is routed to the service named aks-helloworld. O tráfego para o endereço http://40.117.74.8/hello-world-two é encaminhado para o ingress-demo serviço.Traffic to the address http://40.117.74.8/hello-world-two is routed to the ingress-demo service.

Crie um ficheiro denominado hello-world-ingress.yaml e copie o exemplo seguinte YAML.Create a file named hello-world-ingress.yaml and copy in the following example YAML.

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: hello-world-ingress
  namespace: ingress-basic
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
    nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
  rules:
  - http:
      paths:
      - backend:
          serviceName: aks-helloworld
          servicePort: 80
        path: /(.*)
      - backend:
          serviceName: ingress-demo
          servicePort: 80
        path: /hello-world-two(/|$)(.*)

Crie o recurso de entrada com o kubectl apply -f hello-world-ingress.yaml comando.Create the ingress resource using the kubectl apply -f hello-world-ingress.yaml command.

$ kubectl apply -f hello-world-ingress.yaml

ingress.extensions/hello-world-ingress created

Testar o controlador de entradaTest the ingress controller

Para testar as rotas para o controlador de entrada, navegue para as duas aplicações.To test the routes for the ingress controller, browse to the two applications. Abra um navegador da web para o endereço IP do seu controlador de entrada do NGINX, tal como http://40.117.74.8 .Open a web browser to the IP address of your NGINX ingress controller, such as http://40.117.74.8. A primeira aplicação de demonstração é apresentada no navegador da web, como mostra o exemplo seguinte:The first demo application is displayed in the web browser, as shown in the follow example:

Primeira aplicação em execução por detrás do controlador de entrada

Agora, adicione a /hello-world-two caminho para o IP de endereços, tais como http://40.117.74.8/hello-world-two .Now add the /hello-world-two path to the IP address, such as http://40.117.74.8/hello-world-two. O segundo aplicativo de demonstração com o título personalizado é apresentado:The second demo application with the custom title is displayed:

Segunda aplicação em execução por detrás do controlador de entrada

Limpar recursosClean up resources

Este artigo usou o Helm para instalar os componentes de entrada e aplicações de exemplo.This article used Helm to install the ingress components and sample apps. Quando implementa um gráfico Helm, um número de recursos do Kubernetes é criado.When you deploy a Helm chart, a number of Kubernetes resources are created. Estes recursos incluem pods, implementações e serviços.These resources includes pods, deployments, and services. Para limpar estes recursos, pode optar por eliminar o espaço de nomes de exemplo inteiro ou os recursos individuais.To clean up these resources, you can either delete the entire sample namespace, or the individual resources.

Eliminar o espaço de nomes de exemplo e todos os recursosDelete the sample namespace and all resources

Para eliminar o espaço de nomes de exemplo completo, utilize o kubectl delete de comando e especifique o nome do espaço de nomes.To delete the entire sample namespace, use the kubectl delete command and specify your namespace name. Todos os recursos no espaço de nomes são eliminados.All the resources in the namespace are deleted.

kubectl delete namespace ingress-basic

Em seguida, remova o repositório Helm para a aplicação hello world do AKS:Then, remove the Helm repo for the AKS hello world app:

helm repo remove azure-samples

Eliminar recursos individualmenteDelete resources individually

Em alternativa, uma abordagem mais granular é eliminar os recursos individuais que criou.Alternatively, a more granular approach is to delete the individual resources created. Lista o Helm versões com a helm list comando.List the Helm releases with the helm list command. Procure gráficos chamados entrada de nginx e aks-helloworld, conforme mostrado no seguinte exemplo:Look for charts named nginx-ingress and aks-helloworld, as shown in the following example output:

$ helm list

NAME                    REVISION    UPDATED                     STATUS      CHART                   APP VERSION NAMESPACE
aspiring-labradoodle    1           Wed Mar 27 19:55:37 2019    DEPLOYED    nginx-ingress-1.3.1     0.22.0      ingress-basic
esteemed-koala          1           Wed Mar 27 19:59:18 2019    DEPLOYED    aks-helloworld-0.1.0                ingress-basic
wonderful-puma          1           Wed Mar 27 19:59:07 2019    DEPLOYED    aks-helloworld-0.1.0                ingress-basic

Eliminar as versões com a helm delete comando.Delete the releases with the helm delete command. O exemplo seguinte elimina a implementação de entrada do NGINX e as dois exemplos AKS Olá mundo de aplicações.The following example deletes the NGINX ingress deployment, and the two sample AKS hello world apps.

$ helm delete aspiring-labradoodle esteemed-koala wonderful-puma

release "aspiring-labradoodle" deleted
release "esteemed-koala" deleted
release "wonderful-puma" deleted

Em seguida, remova o repositório Helm para a aplicação hello world do AKS:Next, remove the Helm repo for the AKS hello world app:

helm repo remove azure-samples

Remova a rota de entrada que eram direcionadas para o tráfego para as aplicações de exemplo:Remove the ingress route that directed traffic to the sample apps:

kubectl delete -f hello-world-ingress.yaml

Por fim, pode eliminar o próprio espaço de nomes.Finally, you can delete the itself namespace. Utilize o kubectl delete de comando e especifique o nome do espaço de nomes:Use the kubectl delete command and specify your namespace name:

kubectl delete namespace ingress-basic

Passos SeguintesNext steps

Este artigo inclui alguns componentes externos ao AKS.This article included some external components to AKS. Para saber mais sobre estes componentes, consulte as seguintes páginas do projeto:To learn more about these components, see the following project pages:

Também pode:You can also: