Exercício – conectar componentes nativos de nuvem

Concluído

O Kubernetes fornece aos pods endereços IP próprios e um nome DNS para um conjunto de Pods. Os arquivos de manifesto do serviço contêm instruções para expor pods de maneira confiável, usando uma política que define como se conectar a eles. Se uma imagem de contêiner for reimplantada, você não precisará reconfigurar como se conectar à nova imagem devido às instruções no manifesto do serviço.

Os controladores de entrada definem como seu aplicativo pode se conectar ao mundo exterior. No cenário de exemplo, os refrigeradores inteligentes precisam enviar mensagens para o contêiner do Node.js e os controladores de entrada determinam a configuração dessa conexão.

Nesta unidade, você vai:

  • Configure o manifesto de entrada para que a imagem de contêiner possa ser acessada por aplicativos externos.
  • Implante o controlador de entrada.
  • Crie um Aplicativo Web usando uma imagem do Docker.

Configurar o manifesto de entrada

  1. Identifique o FQDN (nome de domínio totalmente qualificado) do host que tem a permissão de acessar o cluster usando o comando az aks show e consulte o valor addonProfiles.httpApplicationRouting.config.HTTPApplicationRoutingZoneName.

    az aks show --resource-group $RESOURCEGROUP --name $CLUSTERNAME -o tsv --query addonProfiles.httpApplicationRouting.config.HTTPApplicationRoutingZoneName
    
  2. Copie a saída e abra o editor integrado no Cloud Shell usando code .

  3. Abra o arquivo ingress.yaml e substitua o valor apiVersion por networking.k8s.io/v1 e o valor host pelo FQDN copiado na etapa anterior.

    O arquivo deverá ser semelhante ao seguinte exemplo:

    # ingress.yaml
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: cna-express
      annotations:
        kubernetes.io/ingress.class: addon-http-application-routing
    spec:
      rules:
      - host: cna-express.<exampleURL.eastus.aksapp.io>
        http:
          paths:
          - path: / # Which path is this rule referring to
            pathType: Prefix
            backend: # How the ingress will handle the requests
              service:
                name: cna-express # Which service the request will be forwarded to
                port: 
                  name: http # Which port in that service    
    
  4. Salve o arquivo de manifesto usando CTRL + S e feche o editor usando CTRL + Q.

Implantar a entrada

  1. Envie o manifesto de entrada para o cluster usando o comando kubectl apply.

    kubectl apply -f ./ingress.yaml
    

    O comando vai gerar um resultado semelhante ao seguinte exemplo:

    ingress.networking.k8s.io/cna-express created
    
  2. Retorne o Cloud Shell para a pasta de origem usando cd ...

    cd ..
    

Pode haver um pequeno atraso entre a criação da entrada e a criação do registro de zona. Enquanto isso acontece, podemos criar o aplicativo Web.

Usar uma imagem do Docker para criar o aplicativo Web

  1. Navegue para o portal do Azure e selecione seu registro de contêiner.

  2. Em Configurações, selecione Chaves de acesso.

  3. Selecione a opção Usuário administrador, que ativa a conta de usuário administrador para o registro.

    Screenshot that shows the Access keys page for the container registry with Admin user selected.

Examinar a entrada

  1. Navegue até o Azure Cloud Shell e verifique se a implantação foi bem-sucedida usando o comando kubectl get ingress.

    kubectl get ingress cna-express
    

    O comando vai gerar um resultado semelhante ao seguinte exemplo:

    NAME              HOSTS                                           ADDRESS        PORTS   AGE
    cna-express       cna.5cd29ec927f24764b052.eastus.aksapp.io       52.226.96.30   80      4m44s
    

    Verifique se a coluna ADDRESS da saída está preenchida com um endereço IP.

  2. Liste as zonas DNS para descobrir se nosso DNS foi criado usando o comando az network dns zone list.

    az network dns zone list --output table
    

    O comando vai gerar um resultado semelhante ao seguinte exemplo:

    Name                               ResourceGroup                                 RecordSets    MaxRecordSets
    -------------------------------------  --------------------------------------------  ------------  ---------------
    5cd29ec927f24764b052.eastus.aksapp.io  mc_rg-contoso-video_aks-contoso-video_eastus  4             10000
    
  3. Copie os valores para Name e ResourceGroup a serem usados na próxima etapa.

  4. Liste os registros DNS da zona usando o comando az network dns record-set list. Substitua <name> e <resource-group> pelos valores que você copiou na etapa anterior.

    az network dns record-set list -g <resource-group> -z <name> --output table
    

    O comando vai gerar um resultado semelhante ao seguinte exemplo:

    Fqdn                                            Name     ProvisioningState    ResourceGroup                                 Ttl
    ----------------------------------------------  -------  -------------------  --------------------------------------------  ------
    5cd29ec927f24764b052.eastus.aksapp.io.          @        Succeeded            mc_learn-cna-rg_cna-demo-aks_eastus           172800
    5cd29ec927f24764b052.eastus.aksapp.io.          @        Succeeded            mc_learn-cna-rg_cna-demo-aks_eastus           3600
    cna.5cd29ec927f24764b052.eastus.aksapp.io.      cna      Succeeded            mc_learn-cna-rg_cna-demo-aks_eastus           300
    cna.5cd29ec927f24764b052.eastus.aksapp.io.      cna      Succeeded            mc_learn-cna-rg_cna-demo-aks_eastus           300
    

    Verifique se há dois novos registros na parte inferior da lista com o host que criamos na chave host. O valor ProvisioningState é Succeeded. Pode levar vários minutos para que os registros de zona sejam propagados.

  5. Abra o navegador e vá para a URL de FQDN aksapp.io completa descrita na saída. Você deverá ver uma mensagem olá, mundo. Lembre-se de não incluir o . do final da URL.

    Screenshot of the deployment test.

Criar um aplicativo Web

  1. Volte para o portal do Azure e selecione Criar um recurso.

  2. Selecione Web>Aplicativo Web.

  3. Na guia Básico, insira os seguintes valores para cada configuração:

    Configuração Valor
    Detalhes do projeto
    Subscription Selecione a assinatura do Azure padrão em que você tem permissão para criar e gerenciar recursos.
    Grupo de recursos Na lista suspensa, selecione o grupo de recursos.
    Detalhes da Instância
    Nome Insira um nome exclusivo e anote-o para uso posterior.
    Publicar Contêiner do Docker
    Sistema operacional Linux
    Region Deixe como o padrão ou selecione um local que esteja perto de você.
    Planos de preços
    Plano do Linux Mantenha o padrão.
    Plano de preços Selecione F1 Grátis US$ 0,00/Mês.
  4. Selecione a guia Docker na parte superior da tela.

  5. Na guia Docker, insira os seguintes valores para cada configuração:

    Configuração Valor
    Opções Contêiner Único
    Origem da imagem Registro de Contêiner do Azure
    Registro Selecione seu registro.
    Imagem webimage
    Marca latest
    Comando de inicialização Deixe essa configuração vazia.
  6. Selecione Examinar e criar>Criar.

Configurar o aplicativo Web

  1. Quando a implantação for concluída, selecione Ir para recursos.

  2. Em Configurações, escolha Configuração.

  3. Em Configurações do aplicativo, selecione Nova configuração de aplicativo.

  4. Copie o valor a seguir e cole-o no campo Nome.

    SOCKET_SERVER_URL
    
  5. Para Valor, use a mesma URL de FQDN aksapp.io usada com o controlador de entrada e para acessar a página da Web olá, mundo.

  6. Selecione OK>Salvar>Continuar.

    Screenshot that shows the Web App application setting being set.

  7. Retorne ao Cloud Shell e crie uma variável de ambiente para o nome do aplicativo Web usando o comando a seguir. Substitua <webapp-name> pelo nome do aplicativo Web.

    WEBAPPNAME=<webapp-name>
    

Testar a solução

  • Execute o comando a seguir e selecione a URL para seu aplicativo Web.

    echo select the link below
    echo http://$WEBAPPNAME.azurewebsites.net
    

É isso! Agora, você criou uma solução escalonável e nativa de nuvem. Fique à vontade para explorar os recursos e o código que você criou. Ao terminar, execute a próxima etapa no Azure Cloud Shell para excluir o grupo de recursos e evitar cobranças desnecessárias em sua conta.

az group delete --name $RESOURCEGROUP