Neste guia, explicamos como instalar a versão 1.8.6-asm.8 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:
- Instale um serviço de gerenciamento.
- Crie um cluster de usuário.
- Configure a rede da AWS.
- Analise os requisitos e restrições a seguir antes de iniciar a configuração.
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 Plataformas 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:
Faça a autenticação com o SDK do Cloud:
gcloud auth login
Atualize os componentes:
gcloud components update
Instale
kubectl
:gcloud components install kubectl
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)"
Alterne o contexto para seu cluster de usuário:
kubectl config use-context CLUSTER_NAME
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
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.8.6-asm.8-linux-amd64.tar.gz
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.8.6-asm.8-linux-amd64.tar.gz.1.sig openssl dgst -verify /dev/stdin -signature istio-1.8.6-asm.8-linux-amd64.tar.gz.1.sig istio-1.8.6-asm.8-linux-amd64.tar.gz <<'EOF' -----BEGIN PUBLIC KEY----- MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw== -----END PUBLIC KEY----- EOF
A saída esperada é
Verified OK
.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.8.6-asm.8-linux-amd64.tar.gz
O comando cria um diretório de instalação no seu diretório de trabalho atual, chamado
istio-1.8.6-asm.8
, 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óriobin
. - Os perfis de configuração do Anthos Service Mesh estão no
diretório
manifests/profiles
.
- Exemplos de aplicativos no diretório
Verifique se você está no diretório raiz da instalação do Anthos Service Mesh.
cd istio-1.8.6-asm.8
macOS
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.8.6-asm.8-osx.tar.gz
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.8.6-asm.8-osx.tar.gz.1.sig openssl dgst -sha256 -verify /dev/stdin -signature istio-1.8.6-asm.8-osx.tar.gz.1.sig istio-1.8.6-asm.8-osx.tar.gz <<'EOF' -----BEGIN PUBLIC KEY----- MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw== -----END PUBLIC KEY----- EOF
A saída esperada é
Verified OK
.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.8.6-asm.8-osx.tar.gz
O comando cria um diretório de instalação no seu diretório de trabalho atual, chamado
istio-1.8.6-asm.8
, 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óriobin
. - Os perfis de configuração do Anthos Service Mesh estão no
diretório
manifests/profiles
.
- Exemplos de aplicativos no diretório
Verifique se você está no diretório raiz da instalação do Anthos Service Mesh.
cd istio-1.8.6-asm.8
Windows
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.8.6-asm.8-win.zip
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.8.6-asm.8-win.zip.1.sig openssl dgst -verify - -signature istio-1.8.6-asm.8-win.zip.1.sig istio-1.8.6-asm.8-win.zip <<'EOF' -----BEGIN PUBLIC KEY----- MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw== -----END PUBLIC KEY----- EOF
A saída esperada é
Verified OK
.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.8.6-asm.8-win.zip
O comando cria um diretório de instalação no seu diretório de trabalho atual, chamado
istio-1.8.6-asm.8
, 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óriobin
. - Os perfis de configuração do Anthos Service Mesh estão no
diretório
manifests/profiles
.
- Exemplos de aplicativos no diretório
Verifique se você está no diretório raiz da instalação do Anthos Service Mesh.
cd istio-1.8.6-asm.8
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
Se necessário, mude para o diretório
istio-1.8.6-asm.8
. O clienteistioctl
depende da versão. Certifique-se de usar a versão no diretórioistio-1.8.6-asm.8/bin
.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.Instale o Anthos Service Mesh:
bin/istioctl install \ -f manifests/profiles/asm-multicloud.yaml \ --set revision=asm-186-8
O argumento
--set revision
adiciona um rótulo de revisão no formatoistio.io/rev=asm-186-8
aistiod
. O rótulo de revisão é usado pelo webhook do injetor automático de sidecar para associar os sidecars injetados a uma revisãoistiod
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 emistiod
.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.
Se necessário, mude para o diretório
istio-1.8.6-asm.8
. O clienteistioctl
depende da versão. Certifique-se de usar a versão no diretórioistio-1.8.6-asm.8/bin
.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
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-186-8 \ -f istio-operator-internal-lb.yaml
O argumento
--set revision
adiciona um rótulo de revisão no formatoistio.io/rev=asm-186-8
aistiod
. O rótulo de revisão é usado pelo webhook do injetor automático de sidecar para associar os sidecars injetados a uma revisãoistiod
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 emistiod
.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.
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.
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 de sidecar para associar os sidecars 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:
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-186-8-5788d57586-bljj4 1/1 Running 0 23h app=istiod,istio.io/rev=asm-186-8,istio=istiod,pod-template-hash=5788d57586 istiod-asm-186-8-5788d57586-vsklm 1/1 Running 1 23h app=istiod,istio.io/rev=asm-186-8,istio=istiod,pod-template-hash=5788d57586
Na saída, na coluna
LABELS
, observe o valor do rótulo de revisãoistiod
, que segue o prefixoistio.io/rev=
. Neste exemplo, o valor éasm-186-8
.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, eREVISION
é 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ótuloistio-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 oistio-injection
e o rótulo de revisão, todos os comandoskubectl label
na documentação do Anthos Service Mesh incluem a remoção do rótuloistio-injection
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
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
:
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}')
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}')
Para testar, implante um aplicativo de amostra, como o Online Boutique.
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.
No diretório
anthos-aws
, useanthos-gke
para alternar o contexto para o serviço de gerenciamento.cd anthos-aws anthos-gke aws management get-credentials
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}')
Verifique o conteúdo das variáveis com
echo
. A saída é semelhante avpc-12345678abcdef0
.echo $VPC_ID
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
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 comecho
: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 comecho
: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
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.