Criar um controlador de entrada para uma rede virtual interna no Azure Kubernetes Service (AKS)Create an ingress controller to an internal virtual network 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. O controlador de entrada está configurado numa rede virtual interna, privada e o endereço IP.The ingress controller is configured on an internal, private virtual network and IP address. Sem acesso externo é permitido.No external access is allowed. 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

Por predefinição, um controlador de entrada do NGINX é criado com uma atribuição de endereço IP pública dinâmica.By default, an NGINX ingress controller is created with a dynamic public IP address assignment. Um requisito de configuração comum é utilizar uma rede interna, privada e o endereço IP.A common configuration requirement is to use an internal, private network and IP address. Esta abordagem permite-lhe restringir o acesso aos seus serviços para utilizadores internos, sem acesso externo.This approach allows you to restrict access to your services to internal users, with no external access.

Crie um ficheiro denominado interno ingress.yaml usando o arquivo de manifesto de exemplo seguinte.Create a file named internal-ingress.yaml using the following example manifest file. Este exemplo atribui 10.240.0.42 para o loadBalancerIP recursos.This example assigns 10.240.0.42 to the loadBalancerIP resource. Fornece seu próprio endereço IP para utilização com o controlador de entrada.Provide your own internal IP address for use with the ingress controller. Certifique-se de que este endereço IP não já está em utilização na sua rede virtual.Make sure that this IP address is not already in use within your virtual network.

controller:
  service:
    loadBalancerIP: 10.240.0.42
    annotations:
      service.beta.kubernetes.io/azure-load-balancer-internal: "true"

Implementar o nginx entrada gráfico com Helm.Now deploy the nginx-ingress chart with Helm. Para utilizar o ficheiro de manifesto criado no passo anterior, adicione o -f internal-ingress.yaml parâmetro.To use the manifest file created in the previous step, add the -f internal-ingress.yaml parameter. 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 \
    -f internal-ingress.yaml \
    --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, o endereço IP é atribuído, conforme mostrado no seguinte exemplo:When the Kubernetes load balancer service is created for the NGINX ingress controller, your internal 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
alternating-coral-nginx-ingress-controller        LoadBalancer   10.0.97.109   10.240.0.42   80:31507/TCP,443:30707/TCP   1m
alternating-coral-nginx-ingress-default-backend   ClusterIP      10.0.134.66   <none>        80/TCP                       1m

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://10.240.0.42/ é encaminhado para o serviço com o nome aks-helloworld.In the following example, traffic to the address http://10.240.0.42/ is routed to the service named aks-helloworld. O tráfego para o endereço http://10.240.0.42/hello-world-two é encaminhado para o ingress-demo serviço.Traffic to the address http://10.240.0.42/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 com um cliente web.To test the routes for the ingress controller, browse to the two applications with a web client. Se for necessário, pode testar rapidamente a esta funcionalidade apenas internos de um pod no cluster do AKS.If needed, you can quickly test this internal-only functionality from a pod on the AKS cluster. Criar um pod de teste e anexar uma sessão de terminal a ele:Create a test pod and attach a terminal session to it:

kubectl run -it --rm aks-ingress-test --image=debian --namespace ingress-basic

Instale curl no pod com apt-get:Install curl in the pod using apt-get:

apt-get update && apt-get install -y curl

Agora, acessar o endereço da sua utilização de controlador de entrada do Kubernetes curl, tal como http://10.240.0.42 .Now access the address of your Kubernetes ingress controller using curl, such as http://10.240.0.42. Fornece que seu próprio endereço IP especificado ao implementar o controlador de entrada no primeiro passo deste artigo.Provide your own internal IP address specified when you deployed the ingress controller in the first step of this article.

curl -L http://10.240.0.42

Nenhum caminho adicional foi fornecido com o endereço, portanto, o controlador de entrada é predefinido para o / rota.No additional path was provided with the address, so the ingress controller defaults to the / route. A primeira aplicação de demonstração é retornada, conforme mostrado no seguinte exemplo condensado:The first demo application is returned, as shown in the following condensed example output:

$ curl -L 10.240.0.42

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <link rel="stylesheet" type="text/css" href="/static/default.css">
    <title>Welcome to Azure Kubernetes Service (AKS)</title>
[...]

Agora, adicione /hello-world-two caminho para o endereço, tal como http://10.240.0.42/hello-world-two .Now add /hello-world-two path to the address, such as http://10.240.0.42/hello-world-two. O segundo aplicativo de demonstração com o título personalizado for retornado, conforme mostrado no seguinte exemplo condensado:The second demo application with the custom title is returned, as shown in the following condensed example output:

$ curl -L -k http://10.240.0.42/hello-world-two

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <link rel="stylesheet" type="text/css" href="/static/default.css">
    <title>AKS Ingress Demo</title>
[...]

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
kissing-ferret      1           Tue Oct 16 17:13:39 2018    DEPLOYED    nginx-ingress-0.22.1    0.15.0      kube-system
intended-lemur      1           Tue Oct 16 17:20:59 2018    DEPLOYED    aks-helloworld-0.1.0                default
pioneering-wombat   1           Tue Oct 16 17:21:05 2018    DEPLOYED    aks-helloworld-0.1.0                default

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 kissing-ferret intended-lemur pioneering-wombat

release "kissing-ferret" deleted
release "intended-lemur" deleted
release "pioneering-wombat" 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: