Como instalar o Anthos Service Mesh no local

Neste guia, explicamos como fazer uma instalação limpa da versão 1.9.8-asm.6 do Anthos Service Mesh em clusters do Anthos no VMware e em bare metal. Se você tiver uma versão anterior do Anthos Service Mesh instalada, consulte Como fazer upgrade do Anthos Service Mesh no local. A instalação ativa os recursos compatíveis no cluster. Este guia se refere ao cluster como cluster1, mas é possível repetir essas etapas para configurar vários clusters.

Sobre os componentes do plano de controle

O GKE no VMware e o bare metal vêm com os seguintes componentes do Istio pré-instalados:

  • A autoridade de certificação do Istio (anteriormente conhecida como Citadel) está instalada no namespace kube-system.
  • O gateway de entrada do Istio e outros componentes do Istio são instalados no namespace gke-system.

Os clusters do Anthos no VMware e em bare metal usam esses componentes para permitir a entrada e proteger a comunicação entre os componentes controlados pelo Google. Se você só precisa da funcionalidade de entrada, não é necessário instalar o OSS Istio ou o Anthos Service Mesh. Para mais informações sobre como configurar a entrada, consulte Como ativar a entrada na documentação do GKE no VMware.

Quando você instala o Anthos Service Mesh, os componentes dele são instalados no namespace istio-system. Como os componentes do Anthos Service Mesh estão em um namespace diferente, eles não entram em conflito com os componentes pré-instalados do Istio.

Antes de começar

Confira os requisitos a seguir antes de iniciar a configuração.

Requisitos

  • Você precisa ter uma assinatura do Anthos. Como alternativa, uma opção de pagamento por utilização está disponível para o GKE Enterprise apenas no Google Cloud. Para mais informações, consulte o Guia de preços do GKE Enterprise.

  • Verifique se 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.

  • Você precisa nomear as portas de serviço usando a sintaxe a seguir: name: protocol[-suffix], em que os colchetes indicam um sufixo opcional que precisa começar com um traço. Saiba mais em Como nomear portas de serviço.

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

VMWare

Para verificar a versão do cluster, use a ferramenta de linha de comando gkectl. Se você não tiver gkectl instalado, consulte Downloads do GKE no VMware.

gkectl version

Bare Metal

Para verificar a versão do cluster, use a ferramenta de linha de comando bmctl. Se você não tiver o bmctl instalado, consulte o Guia de início rápido do GDCV para Bare Metal.

bmctl version

Como configurar o ambiente

Você precisa das seguintes ferramentas no computador em que você controla o processo de instalação. Observe que só é possível instalar o Anthos Service malha em um cluster de usuários, não em um cluster de administrador.

Depois de instalar a Google Cloud CLI:

  1. Faça a autenticação com a Google Cloud CLI:

    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
    

Como definir variáveis de ambiente

  1. Consiga o nome do contexto para o cluster usando os valores na coluna NAME na saída deste comando:

    kubectl config get-contexts
  2. Defina as variáveis de ambiente para o nome de contexto de cluster, o que será usado por este guia em várias etapas posteriores:

    export CTX_CLUSTER1=CLUSTER1_CONTEXT_NAME

Como conceder permissões de administrador ao cluster

  1. 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 --context="${CTX_CLUSTER1}" create clusterrolebinding cluster-admin-binding \
      --clusterrole=cluster-admin \
      --user=USER_ACCOUNT

Como 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.9.8-asm.6-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.9.8-asm.6-linux-amd64.tar.gz.1.sig
    openssl dgst -verify /dev/stdin -signature istio-1.9.8-asm.6-linux-amd64.tar.gz.1.sig istio-1.9.8-asm.6-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.9.8-asm.6-linux-amd64.tar.gz

    O comando cria um diretório de instalação no seu diretório de trabalho atual, chamado istio-1.9.8-asm.6, 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.9.8-asm.6

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.9.8-asm.6-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.9.8-asm.6-osx.tar.gz.1.sig
    openssl dgst -sha256 -verify /dev/stdin -signature istio-1.9.8-asm.6-osx.tar.gz.1.sig istio-1.9.8-asm.6-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.9.8-asm.6-osx.tar.gz

    O comando cria um diretório de instalação no seu diretório de trabalho atual, chamado istio-1.9.8-asm.6, 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.9.8-asm.6

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.9.8-asm.6-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.9.8-asm.6-win.zip.1.sig
    openssl dgst -verify - -signature istio-1.9.8-asm.6-win.zip.1.sig istio-1.9.8-asm.6-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.9.8-asm.6-win.zip

    O comando cria um diretório de instalação no seu diretório de trabalho atual, chamado istio-1.9.8-asm.6, 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.9.8-asm.6

Como configurar a autoridade de certificação

Nesta seção, explicamos como gerar certificados e chaves que o Anthos Service Mesh no local usa para assinar as cargas de trabalho.

Para ter a melhor segurança, recomendamos manter uma CA raiz off-line e usar as CAs subordinadas para emitir certificados para cada cluster. Para mais informações, consulte Conectar certificados de CA. Nesta configuração, todas as cargas de trabalho na malha de serviço usam a mesma autoridade de certificação raiz. Cada CA do Anthos Service Mesh usa um certificado e uma chave de assinatura de CA intermediários, assinados pela CA raiz. Quando houver várias CAs em uma malha, uma hierarquia de confiança entre as CAs será estabelecida. Repita essas etapas para provisionar certificados e chaves de qualquer quantia de autoridades de certificação.

  1. Crie um diretório para certificados e chaves:

    mkdir -p certs && \
    pushd certs
  2. Gere um certificado raiz e uma chave:

    make -f ../tools/certs/Makefile.selfsigned.mk root-ca
    

    Isso gera estes arquivos:

    • root-cert.pem: o certificado raiz
    • root-key.pem: a chave raiz
    • root-ca.conf: a configuração do openssl para gerar o certificado raiz
    • root-cert.csr: o CSR do certificado raiz
  3. Gere um certificado intermediário e uma chave:

    make -f ../tools/certs/Makefile.selfsigned.mk cluster1-cacerts

    Isso gera estes arquivos em um diretório chamado cluster1:

    • ca-cert.pem: os certificados intermediários
    • ca-key.pem: a chave intermediária
    • cert-chain.pem: a cadeia de certificados que o istiod usa
    • root-cert.pem: o certificado raiz

    Se você executar essas etapas usando um computador off-line, copie o diretório gerado para um computador com acesso aos clusters.

  4. Crie um cacerts secreto, incluindo todos os arquivos de entrada ca-cert.pem, ca- key.pem, root-cert.pem e cert-chain.pem:

    kubectl --context="${CTX_CLUSTER1}" create namespace istio-system
    kubectl --context="${CTX_CLUSTER1}" create secret generic cacerts -n istio-system \
      --from-file=cluster1/ca-cert.pem \
      --from-file=cluster1/ca-key.pem \
      --from-file=cluster1/root-cert.pem \
      --from-file=cluster1/cert-chain.pem

    O Anthos Service Mesh no local detectará a presença desses certificados/chaves e os usará durante o processo de instalação nas próximas etapas.

  5. Volte ao diretório anterior:

    popd

Como instalar o Anthos Service Mesh

  1. Crie uma variável de ambiente para o ID do projeto:

    export PROJECT_ID=YOUR_PROJECT_ID
  2. Crie uma variável de ambiente para o número do projeto:

    export PROJECT_NUMBER=$(gcloud projects describe ${PROJECT_ID} --format="value(projectNumber)")
  3. Crie uma variável de ambiente para o identificador da malha. Pode ser qualquer string, mas precisa estar em um formato consistente entre os clusters.

    export MESH_ID="proj-${PROJECT_NUMBER}"
  4. Crie a configuração do plano de controle do cluster, que instalará o Anthos Service Mesh usando o perfil asm-multicloud. 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.

    Estes são os elementos do exemplo a seguir:

    • Use o MESH_ID definido nas etapas anteriores.

    • O NETWORK_ID pode ser qualquer string que identifique a rede de um cluster. Nessa configuração local, cada cluster está em uma rede própria. Dessa maneira, cada cluster precisa ter um valor diferente. NETWORK_ID tem as mesmas limitações de string que um rótulo do Kubernetes descrito em Sintaxe e conjunto de caracteres.

    cat <<EOF > cluster.yaml
    apiVersion: install.istio.io/v1alpha1
    kind: IstioOperator
    spec:
      profile: asm-multicloud
      revision: asm-198-6
      values:
        global:
          meshID: ${MESH_ID}
          multiCluster:
            clusterName: CLUSTER_NAME
          network: NETWORK_ID
    EOF
    
  5. Se necessário, mude para o diretório istio-1.9.8-asm.6. O cliente istioctl depende da versão. Certifique-se de usar a versão no diretório istio-1.9.8-asm.6/bin.

  6. 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, depois de -f cluster.yaml. Para ver mais informações, consulte Como ativar recursos opcionais.

    bin/istioctl install \
      --context="${CTX_CLUSTER1}" \
      -f cluster.yaml
    

Como definir a rede padrão

Defina a rede padrão no namespace istio-system:

 kubectl --context="${CTX_CLUSTER1}" label \
 namespace istio-system topology.istio.io/network=NETWORK_ID

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

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

    cat <<EOF > istiod-service.yaml
    apiVersion: v1
    kind: Service
    metadata:
     name: istiod
     namespace: istio-system
     labels:
       istio.io/rev: asm-198-6
       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-198-6
    EOF
    
  2. Configure o webhook de validação para que ele possa localizar o serviço istiod com o rótulo de revisão:

    kubectl --context="${CTX_CLUSTER1}" 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.

O TLS mútuo automático (mTLS automático) é ativado por padrão. Com o mTLS automático, um proxy sidecar do cliente detecta automaticamente se o servidor tem um sidecar. O sidecar do cliente envia mTLS para cargas de trabalho com arquivos secundários e envia tráfego de texto simples para cargas de trabalho sem sidecars.

Como verificar os componentes do plano de controle

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

kubectl --context="${CTX_CLUSTER1}" 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.

A instalação não será concluída até que você ative a injeção automática de proxy de arquivo secundário (injeção automática) e reinicie os pods de todas as cargas de trabalho que estavam sendo executadas no cluster antes de instalar o Anthos Service Mesh.

Para ativar a injeção automática, rotule os namespaces com o rótulo de revisão que foi definido no istiod quando você instalou o Anthos Service Mesh. O rótulo de revisão é usado pelo webhook do injetor automático de arquivo secundário para associar os arquivos secundários injetados a uma revisão istiod específica. Depois de adicionar o rótulo, todos os pods existentes no namespace precisarão ser reiniciados para que os arquivos secundários sejam injetados.

Antes de implantar novas cargas de trabalho em um novo namespace, 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 --context=${CTX_CLUSTER1} \
      -n istio-system get pods -l app=istiod --show-labels
    

    A resposta será semelhante a:

    NAME                                READY   STATUS    RESTARTS   AGE   LABELS
    istiod-asm-198-6-5788d57586-bljj4   1/1     Running   0          23h   app=istiod,istio.io/rev=asm-198-6,istio=istiod,pod-template-hash=5788d57586
    istiod-asm-198-6-5788d57586-vsklm   1/1     Running   1          23h   app=istiod,istio.io/rev=asm-198-6,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-198-6.

  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 --context=${CTX_CLUSTER1} \
      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  --context=${CTX_CLUSTER1} \
      rollout restart deployment -n NAMESPACE
    
  4. Verifique se os pods estão configurados para apontar para a nova versão de istiod.

    kubectl --context=${CTX_CLUSTER1} \
      get pods -n NAMESPACE -l istio.io/rev=REVISION
    

A seguir

Se você planeja usar vários clusters para a malha de serviço no local, consulte Como instalar o Anthos Service Mesh no local em vários clusters e redes.

Caso contrário, a próxima etapa é Como configurar endereços IP externos.