Você está vendo a documentação do Anthos Service Mesh 1.7. Veja uma mais recente ou selecione outra versão disponível:

Como instalar em clusters do Anthos na AWS

Neste guia, explicamos como fazer uma instalação limpa da versão 1.7.6-asm.1 do Anthos Service Mesh nos 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 réplicas.

  • 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. Se você quiser implantar e testar sua instalação com o aplicativo de amostra Online Boutique, instale kpt:

    gcloud components install kpt
    
  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

  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.6-asm.1-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.6-asm.1-linux-amd64.tar.gz.1.sig
    openssl dgst -verify - -signature istio-1.7.6-asm.1-linux-amd64.tar.gz.1.sig istio-1.7.6-asm.1-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.6-asm.1-linux-amd64.tar.gz

    O comando cria um diretório de instalação no diretório de trabalho atual chamado istio-1.7.6-asm.1. O diretório istio-1.7.6-asm.1/bin contém a ferramenta de linha de comando istioctl que você usa para instalar o Anthos Service malha.

  4. Verifique se você está no diretório raiz da instalação do Anthos Service Mesh.

    cd istio-1.7.6-asm.1
  5. Por conveniência, adicione o diretório /bin ao seu PATH:

    export PATH=$PWD/bin:$PATH

Crie o namespace istio-system

Crie um namespace chamado istio-system para os componentes do plano de controle:

kubectl create namespace istio-system

Configurar o webhook de validação

Ao instalar o Anthos Service Mesh, você define um rótulo de revisão em istiod. Você precisa definir a mesma revisão no webhook de validação.

Copie o seguinte YAML para um arquivo chamado istiod-service.yaml.

apiVersion: v1
kind: Service
metadata:
  name: istiod
  namespace: istio-system
  labels:
    istio.io/rev: asm-176-1
    app: istiod
    istio: pilot
    release: istio
spec:
  ports:
    - port: 15010
      name: grpc-xds # plaintext
      protocol: TCP
    - port: 15012
      name: https-dns # mTLS with k8s-signed cert
      protocol: TCP
    - port: 443
      name: https-webhook # validation and injection
      targetPort: 15017
      protocol: TCP
    - port: 15014
      name: http-monitoring # prometheus stats
      protocol: TCP
  selector:
    app: istiod
    istio.io/rev: asm-176-1

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ública

  1. Instale o Anthos Service Mesh:

    istioctl install \
      --set profile=asm-multicloud \
      --set revision=asm-176-1
    

    O argumento --set revision adiciona um rótulo de revisão no formato istio.io/rev=asm-176-1 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.

  2. 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. 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"
    
  2. Instale o Anthos Service Mesh:

    istioctl install \
     --set profile=asm-multicloud \
     --set revision=asm-176-1 \
     -f istio-operator-internal-lb.yaml
    

    O argumento --set revision adiciona um rótulo de revisão no formato istio.io/rev=asm-176-1 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.

  3. 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.

  istioctl install \
    --set profile=asm-multicloud \
    --set addonComponents.prometheus.enabled=false \
    --set addonComponents.kiali.enabled=false \
    --revision=asm-176-1

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

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-176-1-5788d57586-bljj4   1/1     Running   0          23h   app=istiod,istio.io/rev=asm-176-1,istio=istiod,pod-template-hash=5788d57586
    istiod-asm-176-1-5788d57586-vsklm   1/1     Running   1          23h   app=istiod,istio.io/rev=asm-176-1,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-176-1.

  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. Por padrão, os clusters do Anthos na AWS configuram uma VPC com sub-redes particulares e públicas. Para recuperar o ID da sub-rede, use a ferramenta de linha de comando aws.

    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.