Como instalar em clusters do Anthos na AWS

Neste guia, explicamos como instalar a versão 1.7.8-asm.10 do Anthos Service Mesh em clusters do Anthos na AWS.

Com o Anthos Service Mesh, o gateway de entrada do Istio vem pré-instalado. No entanto, se preferir usar um controlador de entrada, use o Anthos Service Mesh para configurar um recurso Entrada do Kubernetes. Neste guia, mostramos como instalar o Anthos Service Mesh e, opcionalmente, configurar um recurso Entrada do Kubernetes.

Antes de começar

Antes de iniciar a instalação do Anthos Service Mesh, confira se você realizou as seguintes tarefas:

Requisitos

  • Certifique-se de que o cluster de usuário em que você instala o Anthos Service Mesh tem pelo menos quatro vCPUs, 15 GB de memória e quatro nós.

  • Veja Como nomear portas de serviço antes de implantar as cargas de trabalho.

  • Verifique se a versão do cluster está listada em Ambientes compatíveis.

Restrições

Um projeto do Google Cloud só pode ter uma malha associada a ele.

Configurar o ambiente

Você precisa das seguintes ferramentas na máquina onde quer instalar o Anthos Service Mesh. Observe que só é possível instalar o Anthos Service malha em um cluster de usuários, não em um cluster de administrador.

  • Ferramenta de linha de comando curl
  • o SDK do Cloud (a ferramenta de linha de comando gcloud)

Depois de instalar o SDK do Cloud:

  1. Faça a autenticação com o SDK do Cloud:

    gcloud auth login
    
  2. Atualize os componentes:

    gcloud components update
    
  3. Instale kubectl:

    gcloud components install kubectl
    
  4. Instale a versão necessária de kpt:

       curl -L https://github.com/GoogleContainerTools/kpt/releases/download/v0.39.2/kpt_linux_amd64 > kpt_0_39_2
       chmod +x kpt_0_39_2
       alias kpt="$(readlink -f kpt_0_39_2)"
    
  5. Alterne o contexto para seu cluster de usuário:

    kubectl config use-context CLUSTER_NAME
  6. Conceda permissões de administrador de cluster à sua conta de usuário (seu endereço de e-mail de login do Google Cloud). Você precisa dessas permissões para criar as regras necessárias de controle de acesso baseado em papéis (RBAC, na sigla em inglês) para o Anthos Service Mesh:

    kubectl create clusterrolebinding cluster-admin-binding \
      --clusterrole=cluster-admin \
      --user=USER_ACCOUNT

Fazer o download do arquivo de instalação

Linux

  1. Faça o download do arquivo de instalação do Anthos Service Mesh no diretório de trabalho atual:

    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.7.8-asm.10-linux-amd64.tar.gz
  2. Faça o download do arquivo de assinatura e use openssl para verificar a assinatura:

    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.7.8-asm.10-linux-amd64.tar.gz.1.sig
    openssl dgst -verify /dev/stdin -signature istio-1.7.8-asm.10-linux-amd64.tar.gz.1.sig istio-1.7.8-asm.10-linux-amd64.tar.gz <<'EOF'
    -----BEGIN PUBLIC KEY-----
    MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ
    wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw==
    -----END PUBLIC KEY-----
    EOF

    A saída esperada é Verified OK.

  3. Extraia o conteúdo do arquivo em qualquer local no sistema. Por exemplo, para extrair o conteúdo para o diretório de trabalho atual:

     tar xzf istio-1.7.8-asm.10-linux-amd64.tar.gz

    O comando cria um diretório de instalação no seu diretório de trabalho atual, chamado istio-1.7.8-asm.10, que contém o seguinte:

    • Exemplos de aplicativos no diretório samples.
    • A ferramenta de linha de comando istioctl que você usa para instalar o Anthos Service Mesh está no diretório bin.
    • Os perfis de configuração do Anthos Service Mesh estão no diretório manifests/profiles.
  4. Verifique se você está no diretório raiz da instalação do Anthos Service Mesh.

    cd istio-1.7.8-asm.10

macOS

  1. Faça o download do arquivo de instalação do Anthos Service Mesh no diretório de trabalho atual:

    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.7.8-asm.10-osx.tar.gz
  2. Faça o download do arquivo de assinatura e use openssl para verificar a assinatura:

    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.7.8-asm.10-osx.tar.gz.1.sig
    openssl dgst -sha256 -verify /dev/stdin -signature istio-1.7.8-asm.10-osx.tar.gz.1.sig istio-1.7.8-asm.10-osx.tar.gz <<'EOF'
    -----BEGIN PUBLIC KEY-----
    MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ
    wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw==
    -----END PUBLIC KEY-----
    EOF

    A saída esperada é Verified OK.

  3. Extraia o conteúdo do arquivo em qualquer local no sistema. Por exemplo, para extrair o conteúdo para o diretório de trabalho atual:

    tar xzf istio-1.7.8-asm.10-osx.tar.gz

    O comando cria um diretório de instalação no seu diretório de trabalho atual, chamado istio-1.7.8-asm.10, que contém o seguinte:

    • Exemplos de aplicativos no diretório samples.
    • A ferramenta de linha de comando istioctl que você usa para instalar o Anthos Service Mesh está no diretório bin.
    • Os perfis de configuração do Anthos Service Mesh estão no diretório manifests/profiles.
  4. Verifique se você está no diretório raiz da instalação do Anthos Service Mesh.

    cd istio-1.7.8-asm.10

Windows

  1. Faça o download do arquivo de instalação do Anthos Service Mesh no diretório de trabalho atual:

    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.7.8-asm.10-win.zip
  2. Faça o download do arquivo de assinatura e use openssl para verificar a assinatura:

    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.7.8-asm.10-win.zip.1.sig
    openssl dgst -verify - -signature istio-1.7.8-asm.10-win.zip.1.sig istio-1.7.8-asm.10-win.zip <<'EOF'
    -----BEGIN PUBLIC KEY-----
    MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ
    wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw==
    -----END PUBLIC KEY-----
    EOF

    A saída esperada é Verified OK.

  3. Extraia o conteúdo do arquivo em qualquer local no sistema. Por exemplo, para extrair o conteúdo para o diretório de trabalho atual:

    tar xzf istio-1.7.8-asm.10-win.zip

    O comando cria um diretório de instalação no seu diretório de trabalho atual, chamado istio-1.7.8-asm.10, que contém o seguinte:

    • Exemplos de aplicativos no diretório samples.
    • A ferramenta de linha de comando istioctl que você usa para instalar o Anthos Service Mesh está no diretório bin.
    • Os perfis de configuração do Anthos Service Mesh estão no diretório manifests/profiles.
  4. Verifique se você está no diretório raiz da instalação do Anthos Service Mesh.

    cd istio-1.7.8-asm.10

Como instalar o Anthos Service Mesh

Nesta seção, explicamos como instalar o Anthos Service malha no cluster de usuários, que ativa os recursos Compatível padrão listados na página Recursos compatíveis do perfil asm-multicloud. É possível optar por ativar a entrada para a sub-rede pública ou privada.

Público

  1. Se necessário, mude para o diretório istio-1.7.8-asm.10. O cliente istioctl depende da versão. Certifique-se de usar a versão no diretório istio-1.7.8-asm.10/bin.

  2. Execute o comando a seguir para instalar o Anthos Service Mesh. Se você quiser ativar um recurso opcional compatível, inclua -f e o nome de arquivo YAML na linha de comando a seguir. Para mais informações, consulte Como ativar recursos opcionais.

  3. Instale o Anthos Service Mesh:

    bin/istioctl install \
      -f manifests/profiles/asm-multicloud.yaml \
      --set revision=asm-178-10
    

    O argumento --set revision adiciona um rótulo de revisão no formato istio.io/rev=asm-178-10 a istiod. O rótulo de revisão é usado pelo webhook do injetor automático de sidecar para associar os sidecars injetados a uma revisão istiod específica. Para ativar a injeção automática de sidecar para um namespace, você precisa rotulá-lo com uma revisão que corresponda ao rótulo em istiod.

  4. Configure o webhook de validação para que ele possa localizar o serviço istiod com o rótulo de revisão:

    kubectl apply -f istiod-service.yaml
    

    Esse comando cria uma entrada de serviço que permite ao webhook de validação verificar automaticamente as configurações antes de serem aplicadas.

Particular

A seguir, adicione a anotação service.beta.kubernetes.io/aws-load-balancer-internal a todos os serviços criados pelo Anthos Service Mesh. Quando essa anotação estiver presente, os clusters do Anthos na AWS criam serviços de entrada particulares.

  1. Se necessário, mude para o diretório istio-1.7.8-asm.10. O cliente istioctl depende da versão. Certifique-se de usar a versão no diretório istio-1.7.8-asm.10/bin.

  2. Salve o seguinte YAML em um arquivo chamado istio-operator-internal-lb.yaml:

    apiVersion: install.istio.io/v1alpha1
    kind: IstioOperator
    spec:
      components:
        ingressGateways:
        - enabled: true
          k8s:
            serviceAnnotations:
              service.beta.kubernetes.io/aws-load-balancer-internal: "true"
          name: istio-ingressgateway
    
  3. Execute o comando a seguir para instalar o Anthos Service Mesh. Se você quiser ativar um recurso opcional compatível, inclua -f e o nome de arquivo YAML na linha de comando a seguir. Para mais informações, consulte Como ativar recursos opcionais.

    bin/istioctl install \
     -f manifests/profiles/asm-multicloud.yaml \
     --set revision=asm-178-10 \
     -f istio-operator-internal-lb.yaml
    

    O argumento --set revision adiciona um rótulo de revisão no formato istio.io/rev=asm-178-10 a istiod. O rótulo de revisão é usado pelo webhook do injetor automático de sidecar para associar os sidecars injetados a uma revisão istiod específica. Para ativar a injeção automática de sidecar para um namespace, você precisa rotulá-lo com uma revisão que corresponda ao rótulo em istiod.

  4. Configure o webhook de validação para que ele possa localizar o serviço istiod com o rótulo de revisão:

    kubectl apply -f istiod-service.yaml
    

    Esse comando cria uma entrada de serviço que permite ao webhook de validação verificar automaticamente as configurações antes de serem aplicadas.

Como instalar sem o Prometheus e o Kiali

Por padrão, o Anthos Service Mesh 1.7 e anterior instala o Prometheus e o Kiali (links em inglês) dos repositórios de pacotes originais em docker.io e quay.io. Se você não quiser instalar essas ferramentas ou permitir conexões com esses repositórios, transmita -set addonComponents.prometheus.enabled=false e --set addonComponents.kiali.enabled=false para istioctl install. Por exemplo, use o seguinte comando para excluir o Prometheus e o Kiali da instalação da sub-rede pública.

  bin/istioctl install \
    -f manifests/profiles/asm-multicloud.yaml \
    --set addonComponents.prometheus.enabled=false \
    --set addonComponents.kiali.enabled=false \
    --revision=asm-178-10

Verificar os componentes do plano de controle

Verifique se os pods do plano de controle em istio-system estão ativos:

kubectl get pod -n istio-system

A saída esperada será assim:

NAME                                      READY   STATUS      RESTARTS   AGE
istio-ingressgateway-74cc894bfd-786rg     1/1     Running     0          7m19s
istiod-78cdbbbdb-d7tps                    1/1     Running     0          7m36s
promsd-576b8db4d6-lqf64                   2/2     Running     1          7m19s

Você instalou o plano de controle do Anthos Service malha com o gateway de entrada pré-instalado. Se você só precisa da funcionalidade de entrada usando um controlador de entrada, está pronto para instalar aplicativos no cluster. Consulte Como criar um exemplo de implantação, que mostra como configurar um recurso Ingress.

Se você quiser aproveitar todos os recursos fornecidos pelo Anthos Service Mesh, continue com a próxima fase da instalação para injetar proxies secundários e reiniciar as cargas de trabalho.

Como injetar proxies sidecar

O Anthos Service Mesh usa proxies sidecar para aumentar a segurança, a confiabilidade e a observabilidade da rede. Com o Anthos Service Mesh, essas funções são abstraídas do contêiner principal do aplicativo e implementadas em um proxy comum fora do processo, entregue como um contêiner separado no mesmo pod. Para injetar seus pods com o proxy sidecar, configure a injeção automática de proxy sidecar (injeção automática) rotulando seus namespaces com o mesmo rótulo de revisão definido em istiod ao instalar o Anthos Service Mesh.

  • Você precisa ativar a injeção automática em qualquer namespace com cargas de trabalho em execução no cluster antes de instalar o Anthos Service Mesh.

  • Antes de implantar novas cargas de trabalho, configure a injeção automática para que o Anthos Service Mesh possa monitorar e proteger o tráfego.

Para ativar a injeção automática:

  1. Use o seguinte comando para localizar o rótulo de revisão em istiod:

    kubectl -n istio-system get pods -l app=istiod --show-labels
    

    A resposta será semelhante a:

    NAME                                READY   STATUS    RESTARTS   AGE   LABELS
    istiod-asm-178-10-5788d57586-bljj4   1/1     Running   0          23h   app=istiod,istio.io/rev=asm-178-10,istio=istiod,pod-template-hash=5788d57586
    istiod-asm-178-10-5788d57586-vsklm   1/1     Running   1          23h   app=istiod,istio.io/rev=asm-178-10,istio=istiod,pod-template-hash=5788d57586

    Na saída, na coluna LABELS, observe o valor do rótulo de revisão istiod, que segue o prefixo istio.io/rev=. Neste exemplo, o valor é asm-178-10.

  2. Aplique o rótulo de revisão e remova o rótulo istio-injection, se ele existir. No comando a seguir, NAMESPACE é o nome do namespace em que você quer ativar a injeção automática, e REVISION é o rótulo de revisão que você anotou na etapa anterior.

    kubectl label namespace NAMESPACE istio-injection-istio.io/rev=REVISION --overwrite
    

    Você pode ignorar a mensagem "istio-injection not found" na saída. Isso significa que o namespace não tinha o rótulo istio-injection anteriormente, que é esperado em novas instalações do Anthos Service Mesh ou em novas implantações. Como a injeção automática falha se um namespace tiver o istio-injection e o rótulo de revisão, todos os comandos kubectl label na documentação do Anthos Service Mesh incluem a remoção do rótulo istio-injection

  3. Se as cargas de trabalho estavam em execução no cluster antes de instalar o Anthos Service Mesh, reinicie os pods para acionar a nova injeção.

    A maneira como você reinicia os pods depende do seu aplicativo e do ambiente em que o cluster está. Por exemplo, no seu ambiente de preparo, basta excluir todos os pods, o que faz com que eles sejam reiniciados. Mas no ambiente de produção, há um processo que implementa uma implantação azul-verde para que você possa reiniciar os pods com segurança para evitar a interrupção do tráfego.

    É possível usar kubectl para executar uma reinicialização gradual:

    kubectl rollout restart deployment -n NAMESPACE
    
  4. Verifique se os pods estão configurados para apontar para a nova versão de istiod.

    kubectl get pods -n NAMESPACE -l istio.io/rev=REVISION
    

Como acessar o gateway de entrada

O Anthos Service Mesh fornece um gateway de entrada pré-configurado, o istio-ingressgateway, que pode ser usado para gerenciar o tráfego de entrada para aplicativos em execução na malha de serviço. Para permitir o acesso de aplicativos de fora do cluster, como de um navegador, siga estas recomendações:

  • É preciso ver o endereço IP externo ou o nome do host e a porta do balanceador de carga externo que o istio-ingressgateway está configurado para usar.

  • O aplicativo precisa definir um recurso Gateway e VirtualService, semelhante ao frontend-gateway.yaml do aplicativo de amostra Online Boutique.

Para conseguir o endereço externo do istio-ingressgateway:

  1. Crie a variável de ambiente INGRESS_HOST:

    export INGRESS_HOST=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')
    
  2. Crie a variável de ambiente INGRESS_PORT:

    export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].port}')
    
  3. Para testar, implante um aplicativo de amostra, como o Online Boutique.

  4. Para acessar o aplicativo no navegador, use o valor de $INGRESS_HOST:$INGRESS_PORT no URL.

Solução de problemas

Os clusters do Anthos na AWS requer tags em sub-redes que contenham endpoints do balanceador de carga. Os clusters do Anthos na AWS marcam automaticamente todas as sub-redes especificadas no campo spec.Networking.ServiceLoadBalancerSubnetIDs do recurso AWSCluster.

Se você quiser adicionar mais sub-redes ao seu cluster de usuário ou precisar reaplicar tags a sub-redes atuais, execute as etapas a seguir.

  1. No diretório anthos-aws, use anthos-gke para alternar o contexto para o serviço de gerenciamento.

    cd anthos-aws
    anthos-gke aws management get-credentials

  2. Consiga o código da VPC da AWS do cluster com kubectl e armazene-o como uma variável.

     export VPC_ID=$(\
     env HTTP_PROXY=http://localhost:8118 \
     kubectl get awscluster cluster-0 -o jsonpath='{.spec.networking.vpcID}')
    
  3. Verifique o conteúdo das variáveis com echo. A saída é semelhante a vpc-12345678abcdef0.

    echo $VPC_ID
    
  4. Salve o ID do cluster em uma variável de ambiente.

    export CLUSTER_ID=$(\
    env HTTP_PROXY=http://localhost:8118 \
    kubectl get awscluster cluster-0 -o jsonpath='{.status.clusterID}')
    

    É possível verificar a variável com echo:

    echo $CLUSTER_ID
    

    A resposta inclui o ID do cluster.

    gke-12345678
    
  5. Se você instalou clusters do Anthos na AWS em uma VPC dedicada, use a ferramenta de linha de comando aws para recuperar o ID da sub-rede.

    Selecione uma destas opções:

    • Público se você quiser expor serviços na sua sub-rede pública.
    • Particular, se você quiser expor serviços na sub-rede privada.
    • Várias sub-redes, se você quiser expor serviços em várias sub-redes.

    Público

     export SUBNET_ID=$(aws ec2 describe-subnets \
     --filters "Name=vpc-id,Values=$VPC_ID" "Name=tag:Name,Values=*public*" \
     --query "Subnets[*].SubnetId" \
     --output text)
    

    A saída é um objeto que contém o ID da sub-rede. Ela se parece com subnet-1234abcdefg. É possível verificar a variável com echo:

    echo $SUBNET_ID
    

    A resposta inclui o ID da sub-rede.

    subnet-012345678abcdef
    

    Particular

     export SUBNET_ID=$(aws ec2 describe-subnets \
     --filters "Name=vpc-id,Values=$VPC_ID" "Name=tag:Name,Values=*private*" \
     --query "Subnets[*].SubnetId" \
     --output text)
    

    A saída é um objeto que contém o ID da sub-rede. Ela se parece com subnet-1234abcdefg. É possível verificar a variável com echo:

    echo $SUBNET_ID
    

    A resposta inclui o ID da sub-rede.

    subnet-012345678abcdef
    

    Várias sub-redes

    Se você estiver usando várias sub-redes para o AWSNodePools (por exemplo, se usar várias zonas de disponibilidade), será necessário incluir uma tag nos IDs de sub-rede individualmente.

    Recupere sua lista de IDs de sub-rede com aws ec2 describe-subnets.

    Para ver uma lista de todas as sub-redes públicas, execute o seguinte comando:

    aws ec2 describe-subnets \
     --filters "Name=vpc-id,Values=$VPC_ID" "Name=tag:Name,Values=*public*" \
     --query "Subnets[*].SubnetId" \
     --output text
    

    Para ver uma lista de todas as sub-redes particulares, execute o seguinte comando:

    aws ec2 describe-subnets \
     --filters "Name=vpc-id,Values=$VPC_ID" "Name=tag:Name,Values=*private*" \
     --query "Subnets[*].SubnetId" \
     --output text
    

    A resposta inclui seus IDs de sub-rede.

    subnet-012345678abcdef
    subnet-abcdef123456789
    subnet-123456789abcdef
    
  6. Marque a sub-rede com o ID do cluster. Se você tiver várias sub-redes, selecione "Várias sub-redes".

    Sub-rede única

    aws ec2 create-tags \
    --resources $SUBNET_ID \
    --tags Key=kubernetes.io/cluster/$CLUSTER_ID,Value=shared
    

    Várias sub-redes

    Para cada uma das suas sub-redes, execute o seguinte comando:

    aws ec2 create-tags \
    --resources subnet-ids \
    --tags Key=kubernetes.io/cluster/$CLUSTER_ID,Value=shared
    

    Substitua subnet-ids pela lista de IDs de sub-rede, separados por espaços. Por exemplo, subnet-012345678abcdef subnet-abcdef123456789 subnet-123456789abcdef.

A seguir

Crie um exemplo de implantação em clusters do Anthos na AWS.