Neste guia, mostramos como começar a usar o complemento Istio no GKE, incluindo
opções de instalação para clusters novos e atuais. É possível instalar o complemento
usando a ferramenta de linha de comando gcloud
ou o Console do Google Cloud.
Saiba mais sobre o complemento Istio no GKE e se ele é adequado para você na Visão geral.
Antes de começar
Siga estas etapas para ativar a API do Kubernetes Engine:
- Acesse a página do Kubernetes Engine no Console do Google Cloud.
- Crie ou selecione um projeto.
- Aguarde a ativação da API e dos serviços relacionados. Isso pode levar alguns minutos.
-
Verifique se o faturamento está ativado para seu projeto na nuvem. Saiba como confirmar se o faturamento está ativado para o projeto.
Verifique se você tem as seguintes ferramentas de linha de comando instaladas:
-
gcloud
é usado para criar e excluir clusters do Kubernetes Engine, incluindo a criação e atualização de clusters com o complemento Istio no GKE.gcloud
está incluído no SDK do Google Cloud. Siga as instruções para instalar e inicializá-lo com seus projetos do GCP. Se você já tem uma instalação dogcloud
, verifique se ela tem pelo menos a versão 208.0.0:gcloud version
Não é preciso instalargcloud
para criar um novo cluster ativado para o Istio, já que é possível usar o Console do Google Cloud. Mas ele ainda é útil para gerenciar os clusters atuais e instalar outras ferramentas, comokubectl
. -
kubectl
é usado para gerenciar o Kubernetes, sistema de orquestração de cluster usado pelo GKE. É possível instalarkubectl
usandogcloud
:gcloud components install kubectl
Definir padrões para a ferramenta de linha de comando gcloud
Para poupar tempo, em vez de digitar o ID do projeto e as opções de zona do Compute Engine na ferramenta de linha de comando gcloud
, defina os padrões:gcloud config set project project-id gcloud config set compute/zone compute-zone
Escolha uma opção de segurança
Há duas opções de segurança padrão para toda a malha, que podem ser escolhidas ao criar ou atualizar um cluster com o Istio no GKE. A escolha depende das necessidades iniciais do seu aplicativo.
- mTLS restrito: neste modo de segurança, por padrão, o Istio aplica a criptografia mútua TLS (mTLS) a todos os serviços e componentes do plano de controle na malha, a menos que você estabeleça regras de destinação específicas. Todas as chamadas na malha serão criptografadas e os serviços não aceitam tráfego não criptografado.
- mTLS permissivo: nesse modo de segurança, por padrão, o Istio permite que os serviços da malha aceitem tráfego criptografado e não criptografado e permite que todos os serviços enviem chamadas não criptografadas por padrão. Assim como no mTLS restrito, é possível modificar isso para serviços específicos. Use essa opção se você tiver serviços que ainda precisam aceitar tráfego não criptografado. Por exemplo, se não tiver migrado completamente seus serviços para o Istio e tiver tráfego proveniente de clientes legados fora da malha. O Istio no GKE oferece esse modo em vez de simplesmente instalar o Istio sem segurança ativada. Isso facilita a migração para o mTLS restrito mais tarde, afim de aumentar a segurança.
Descubra como atualizar os padrões de segurança e configurar ainda mais a segurança do Istio em Como atualizar padrões de segurança, abaixo.
Versões de cluster do GKE compatíveis
A versão do Istio no GKE instalada quando você cria ou atualiza um cluster com ele depende da versão do cluster. Recomendamos usar uma versão de cluster com a versão mais recente do Istio (1.4.10-gke.5). Se estiver usando uma versão mais antiga, faça upgrade do cluster assim que esta versão do Istio no GKE estiver disponível.
Para ver a lista de versões compatíveis, consulte Versões do Istio no GKE.
Como instalar o Istio no GKE
É possível instalar o Istio no GKE em clusters novos ou existentes. Em ambos os casos, o plano de controle do Istio será instalado. Para aproveitar ao máximo os recursos do Istio, é necessário injetar proxies sidecar do Envoy nos pods da malha de serviço.
Como criar um cluster com o Istio no GKE
Sugerimos a criação de pelo menos um cluster de quatro nós com o tipo de máquina de duas vCPUs ao usar esse complemento. É possível implantar o próprio Istio com a nova configuração de cluster padrão do GKE, mas isso talvez não forneça recursos suficientes para explorar os aplicativos de amostra. Observe que o complemento do Istio no GKE não é compatível com a identidade da carga de trabalho.
Para criar um cluster usando o Istio no GKE:
Console
- Acesse a página do Kubernetes no Console do Cloud e selecione Criar cluster.
- Na caixa de diálogo Cluster padrão, escolha o número preferido de nós e máquinas, considerando o tamanho mínimo recomendado para o cluster do Istio.
- No menu suspenso Versão principal, selecione a versão recomendada do cluster do Istio no GKE ou uma versão compatível se você não puder usá-la.
- Selecione Disponibilidade, rede, segurança e outros recursos para exibir outras opções de configuração, incluindo o Istio no GKE.
- Selecione Ativar Istio (Beta).
- Na lista suspensa, selecione o modo de segurança mTLS que você quer usar para seu cluster.
- Clique em Criar para criar o cluster.
Linha de comando
Para criar um cluster do GKE com Istio ativado e o TLS mútuo
aplicado por padrão, execute este comando, substituindo
CLUSTER_NAME
pelo nome do cluster escolhido e
CLUSTER_VERSION
por uma
versão compatível do cluster:
gcloud beta container clusters create CLUSTER_NAME \ --addons=Istio --istio-config=auth=MTLS_STRICT \ --cluster-version=CLUSTER_VERSION \ --machine-type=n1-standard-2 \ --num-nodes=4
Ou crie um cluster do GKE com o Istio ativado e com o mTLS no modo permissivo:
gcloud beta container clusters create CLUSTER_NAME \ --addons=Istio --istio-config=auth=MTLS_PERMISSIVE \ --cluster-version=CLUSTER_VERSION \ --machine-type=n1-standard-2 \ --num-nodes=4
Como adicionar o Istio no GKE a um cluster existente
Se quiser atualizar um cluster com o complemento, talvez seja necessário redimensionar o cluster primeiro afim de garantir que haja recursos suficientes para o Istio. Como na criação de um novo cluster, sugerimos pelo menos um cluster de quatro nós com o tipo de máquina de duas vCPUs.
Seu cluster também precisa executar uma versão compatível do mestre do cluster para usar o complemento. O complemento do Istio no GKE não é compatível com a identidade da carga de trabalho.
Para atualizar um cluster existente com o complemento Istio no GKE:
Console
- Acesse a página de clusters do Kubernetes no Console do Cloud e selecione aquele que você quer atualizar.
- Selecione Editar.
- Em Istio (beta), selecione Ativado para exibir Istio mTLS (beta).
- Na lista suspensa, selecione o modo de segurança mTLS que você quer usar para seu cluster.
- Clique em Salvar para atualizar seu cluster.
Linha de comando
Para adicionar o Istio com TLS mútuo aplicado por padrão a um cluster
atual execute este comando, substituindo CLUSTER_NAME
pelo nome do cluster:
gcloud beta container clusters update CLUSTER_NAME \ --update-addons=Istio=ENABLED --istio-config=auth=MTLS_STRICT
Ou para adicionar o Istio com o mTLS no modo permissivo a um cluster existente:
gcloud beta container clusters update CLUSTER_NAME \ --update-addons=Istio=ENABLED --istio-config=auth=MTLS_PERMISSIVE
O comando clusters update
pode exigir outros parâmetros, dependendo
da configuração real do cluster.
Se tiver um aplicativo existente no cluster, acesse a documentação do Istio e saiba como migrá-lo para que ele seja gerenciado pelo Istio.
Verificando a instalação
Para verificar se a instalação do Istio no GKE foi bem-sucedida:
- Se você acabou de criar (em vez de atualizar) um cluster, verifique se ele está instalado e
sendo executado com uma versão do GKE 1.10.6 ou superior:
gcloud container clusters list
A resposta será semelhante a:NAME LOCATION MASTER_VERSION MASTER_IP MACHINE_TYPE NODE_VERSION NUM_NODES STATUS istio-demo us-central1-b 1.11.2-gke.15 35.239.252.38 n1-standard-2 1.11.2-gke.15 4 RUNNING
- Consiga as credenciais do novo cluster para interagir com ele com
kubectl
.gcloud container clusters get-credentials CLUSTER_NAME
- Certifique-se de que os seguintes serviços do Kubernetes sejam implantados:
istio-citadel
,istio-egressgateway
,istio-pilot
,istio-ingressgateway
,istio-policy
,istio-sidecar-injector
eistio-telemetry
(você também verá os outros serviços implantados):kubectl get service -n istio-system
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE istio-citadel ClusterIP 10.47.245.92 <none> 8060/TCP,9093/TCP 12s istio-egressgateway ClusterIP 10.47.248.129 <none> 80/TCP,443/TCP 12s istio-galley ClusterIP 10.47.248.109 <none> 443/TCP,9093/TCP 12s istio-ingressgateway LoadBalancer 10.47.248.117 <pending> 80:31380/TCP,443:31390/TCP,31400:31400/TCP,15011:30221/TCP,8060:32445/TCP,853:30663/TCP,15030:32010/TCP,15031:32633/TCP 12s istio-pilot ClusterIP 10.47.251.133 <none> 15010/TCP,15011/TCP,8080/TCP,9093/TCP 12s istio-policy ClusterIP 10.47.255.244 <none> 9091/TCP,15004/TCP,9093/TCP 12s istio-sidecar-injector ClusterIP 10.47.240.36 <none> 443/TCP 12s istio-statsd-prom-bridge ClusterIP 10.47.247.135 <none> 9102/TCP,9125/UDP 12s istio-telemetry ClusterIP 10.47.242.73 <none> 9091/TCP,15004/TCP,9093/TCP,42422/TCP 12s promsd ClusterIP 10.47.241.188 <none> 9090/TCP 12s
Certifique-se de que os pods do Kubernetes correspondentes foram implantados e que todos os contêineres estejam em execução:
istio-pilot-*
,istio-policy-*
,istio-telemetry-*
,istio-egressgateway-*
,istio-ingressgateway-*
istio-sidecar-injector-*
eistio-citadel-*
.kubectl get pods -n istio-system
NAME READY STATUS RESTARTS AGE istio-citadel-555d845b65-xfdmj 1/1 Running 0 2d istio-cleanup-secrets-8x2pl 0/1 Completed 0 2d istio-egressgateway-667d854c49-9q5dl 1/1 Running 0 2d istio-galley-6c9cd5b8bb-4j4jk 1/1 Running 0 2d istio-ingressgateway-6c796c5594-f972p 1/1 Running 0 2d istio-pilot-77f74fc6f-rpbfj 2/2 Running 0 2d istio-policy-655b87fff-4wbwq 2/2 Running 0 2d istio-security-post-install-tm2rm 0/1 Completed 1 2d istio-sidecar-injector-668c9fb4db-p6lwt 1/1 Running 0 2d istio-statsd-prom-bridge-5b645f6f4d-6pbgf 1/1 Running 0 2d istio-telemetry-d9848f498-wf6kh 2/2 Running 0 2d promsd-6b989699d8-l7jxt 1/1 Running 0 2d
Como ativar a injeção do sidecar
Para aproveitar ao máximo os recursos do Istio, cada serviço no aplicativo precisa ter um proxy sidecar do Envoy em execução no pod. O proxy Envoy intercepta todo o tráfego de entrada e saída para o serviço e se comunica com o plano de controle do Istio. É possível injetar um proxy Envoy manualmente atualizando a configuração do Kubernetes dos pods ou usando a injeção de arquivo secundário automática baseada em webhooks do Istio.
Por padrão, a injeção automática de sidecar fica desativada para todos os namespaces. Para
ativar a injeção automática, substitua NAMESPACE
no
seguinte comando pelo nome do
namespace
para os serviços do aplicativo ou por default
:
kubectl label namespace NAMESPACE istio-injection=enabled
Todos os pods em execução precisam ser reiniciados para que a alteração entre em vigor, já que o sidecar é adicionado no momento da criação do pod. Para desativar a injeção automática no namespace, remova o rótulo e reinicie os pods para excluir os sidecars.
Para injetar sidecars do Envoy manualmente, consulte Como instalar o sidecar.
Como configurar seu plano de controle
Embora o Istio no GKE
gerencie a maioria das configurações do plano de controle,
para uso na produção, recomendamos escolher e especificar os valores apropriados
ao seu caso de uso nas configurações a seguir. É possível alterá-los usando
kubectl
ou as ferramentas do Kubernetes de sua escolha. Essas configurações não
são alteradas quando a instalação é atualizada pelo complemento.
Escalonamento horizontal
Configure um dos itens a seguir para garantir que você tenha réplicas suficientes
dos componentes do plano de controle do Istio para lidar com o tráfego da sua malha. Para
uso em produção, recomendamos, no mínimo, duas réplicas para istio-policy
,
istio-telemetry
, istio-pilot
e istio-sidecar-injector
.
O escalonamento horizontal automático de pod escalona automaticamente o número de réplicas com base na utilização da CPU observada. Fornecemos valores máximos e mínimos padrão para os componentes do plano de controle de escalonamento automático, mas é possível editá-los para atender às suas necessidades. Por exemplo, veja como especificar um
kubectl edit
no qual você quer editar as configurações do escalonador automático para Istio-Telemetry:kubectl edit -n istio-system HorizontalPodAutoscalers/istio-telemetry
Se não estiver usando o escalonamento automático, poderá definir o número de réplicas de cada elemento do plano de controle (exceto o Citadel, que é sempre um singleton) para escalonamento horizontal manual. Por exemplo, veja como especificar um
kubectl
para o qual você quer duas instâncias do Pilot:kubectl scale -n istio-system --replicas=2 deployment/istio-pilot
Solicitações de recursos
Por padrão, as solicitações de recursos
não são definidas. No entanto, para uso em produção, recomendamos defini-las com
valores apropriados para garantir que os nós tenham recursos suficientes para suportar os pods.
Defina solicitações de recursos para cada contêiner no pod. Caso contrário, a CPU dos HPAs
mostrará unknown
, e o escalonamento automático não funcionará.
Consulte o guia Opções de instalação do Istio para ver os pontos de
partida recomendados para as configurações de recursos de cada
componente. Por exemplo, as solicitações e os limites de recursos do Mixer estão em opções mixer
.
kubectl edit -n istio-system Deployments/istio-telemetry
Orçamento de interrupção de pod
PodDisruptionBudgets: permite especificar o número mínimo de réplicas disponíveis de uma determinada implantação que um aplicativo pode tolerar e continuar trabalhando.
Configure PodDisruptionBudgets em todas as implantações que precisam
permanecer disponíveis durante os upgrades do Istio no GKE. No mínimo,
recomendamos fazer isso para o gateway de entrada Istio fornecido pelo complemento
(istio-ingressgateway
), se não tiver implantado e configurado seu próprio
gateway de entrada. Caso contrário, o tráfego externo pode não conseguir alcançar seu
aplicativo durante o upgrade.
As configurações de orçamento de interrupção de pod devem ser definidas com as configurações de escalonamento horizontal,
conforme descrito acima. O número de réplicas ou de réplicas mínimas do escalonador automático precisa
ser maior que o orçamento mínimo de interrupção do pod, porque o processo de
upgrade do Istio no GKE torna as réplicas individuais indisponíveis enquanto são
atualizadas. Isso garante que a configuração minAvailable
em PodDisruptionBudget
não seja violada durante os upgrades e que o ele funcione conforme esperado.
Como personalizar sua instalação
Embora o Istio no GKE forneça um comportamento padrão razoável para muitos casos de uso, é possível personalizar a instalação de várias maneiras, incluindo a configuração de ferramentas de telemetria e a adição de gateways. Nesta seção, você verá como fazer personalizações compatíveis.
Como atualizar padrões de segurança
Alternar o modo de segurança mTLS padrão do Istio em um cluster em execução de Restrito para Permissivo (ou vice-versa) usa o mesmo comando que adiciona o Istio a um cluster:
Console
- Acesse a página de clusters do Kubernetes no Console do Cloud e selecione aquele que você quer atualizar.
- Selecione Editar.
- Em Istio (beta), selecione Ativado para exibir Istio mTLS (beta).
- Na lista suspensa, selecione o modo de segurança mTLS que você quer usar para seu cluster.
- Clique em Salvar para atualizar seu cluster.
Linha de comando
Se quiser alterar seu cluster para usar o Istio com o TLS mútuo aplicado por
padrão, execute este comando,
substituindo CLUSTER_NAME
pelo nome do cluster:
$ gcloud beta container clusters update CLUSTER_NAME \ --update-addons=Istio=ENABLED --istio-config=auth=MTLS_STRICT
Ou altere o cluster para mTLS no modo permissivo:
$ gcloud beta container clusters update CLUSTER_NAME \ --update-addons=Istio=ENABLED --istio-config=auth=MTLS_PERMISSIVE
Lembre-se de que, se você ativar o mTLS restrito enquanto ainda tiver serviços que precisem enviar ou receber tráfego não criptografado, seu aplicativo poderá ser interrompido! Saiba mais sobre a migração para o mTLS restrito em Migração de TLS mútuo. Também é possível selecionar políticas de autenticação mais específicas para o destino. As políticas de autenticação específicas para o destino sempre substituirão uma configuração mTLS padrão global, mesmo se você trocar de Restrito para Permissivo ou vice-versa.
Descubra mais sobre a configuração e o trabalho com a segurança do Istio, incluindo a configuração da autorização baseada em papéis, no site do Istio.
Rastreamento e geração de registros
Por padrão, uma malha instalada com o Istio no GKE pode enviar dados de geração de registros e métricas para o Cloud Logging e o Cloud Monitoring, desde que você tenha ativado os recursos relevantes para o projeto e cluster. As versões do Istio no GKE anteriores à 1.1.7 também enviam dados de rastreamento por padrão. Saiba mais sobre isso na seção Suporte ao pacote de operações do Google Cloud.
O rastreamento e a geração de registros podem gerar custos extras, especialmente com um grande volume de dados provenientes da malha. Se quiser desativar esse recurso sem desativar as APIs do pacote de operações do Google Cloud para seu projeto como um todo, atualize a configuração do Istio no GKE da seguinte maneira.
Para desativar o Cloud Logging no Istio no GKE
Abra a regra
stackdriver-log
para edição:kubectl edit -n istio-system rule stackdriver-log
Substitua a condição
match
(context.protocol == "http" || context.protocol == "grpc") && (context.reporter.kind | "inbound" == "inbound")
por"false"
.Salve e feche a regra.
Abra a regra
stackdriver-log-tcp
.kubectl edit -n istio-system rule stackdriver-log-tcp
Substitua a condição
match
(context.protocol == "tcp") && (context.reporter.kind | "inbound" == "inbound")
por"false"
.Salve e feche a regra.
Para desativar o rastreamento do pacote de operações do Google Cloud no Istio no GKE
Se você tiver o Istio na versão 1.1.3-gke.0 ou anterior ou se tiver ativado manualmente o rastreamento do pacote de operações do Google Cloud, poderá desativá-lo da seguinte maneira:
Abra a regra
stackdriver-tracing-rule
para edição:kubectl edit -n istio-system rule stackdriver-tracing-rule
Substitua a condição
match
context.protocol == "http" || context.protocol == "grpc"
por"false"
.Salve e feche a regra.
Para ativar o rastreamento do pacote de operações do Google Cloud no Istio no GKE
Se você estiver usando a versão 1.1.7 ou posterior e quiser ativar o rastreamento do pacote de operações do Google Cloud:
Verifique se a API Cloud Trace está ativada no projeto do Google Cloud.
Abra a regra
stackdriver-tracing-rule
para edição:kubectl edit -n istio-system rule stackdriver-tracing-rule
Substitua a condição
match
"false"
porcontext.protocol == "http" || context.protocol == "grpc"
.Salve e feche a regra.
Como adicionar gateways
Um gateway de entrada é fornecido como parte da instalação do Istio no GKE. O gateway de entrada padrão é adequado para implantações em que os recursos instalados (RBAC, serviço, implantação) não precisam de muita personalização. É possível adicionar campos à configuração do gateway do Istio e modificar as seguintes configurações do plano de controle:
- Escalonamento horizontal
- Solicitações de recursos
- Orçamentos de interrupção do pod
Quando você faz upgrade do GKE, o complemento Istio on GKE e todos os recursos instalados por ele, incluindo o gateway de entrada padrão, são atualizados automaticamente. Não altere outros valores na configuração do gateway de entrada padrão porque as alterações serão revertidas para os valores padrão durante o upgrade automático.
Para cenários mais complexos em que a personalização é necessária, é preciso criar um novo gateway de entrada. Se você adicionar um gateway de entrada ou saída, eles estarão sob seu controle e não serão modificados durante o upgrade automático.
Um gateway de saída do Istio não é instalado por padrão na versão 1.1 e posteriores. Para adicionar um gateway de entrada ou saída:
Conceda permissões de administrador de cluster ao usuário atual:
Defina sua conta de usuário como a atual.
gcloud auth login
Conceda permissões de administrador de cluster ao usuário atual.
kubectl create clusterrolebinding cluster-admin-binding \ --clusterrole=cluster-admin \ --user="$(gcloud config get-value core/account)"
Siga as etapas na documentação do Istio para adicionar o gateway.
Como acessar serviços externos
Todo o tráfego de saída de um pod ativado para o Istio é redirecionado para o proxy de sidecar. Por padrão, o Istio configura o proxy sidecar para transmitir solicitações de serviços desconhecidos, mas é possível configurar um controle mais rigoroso. Embora você possa criar ServiceEntries afim de autorizar solicitações de saída para destinos permitidos, é ainda possível, por razões de segurança, adicionar um gateway de saída, conforme descrito na postagem do blog Controle seguro do tráfego de saída no Istio.
A seguir
- Instale e explore o exemplo do Bookinfo para ver o que o Istio pode fazer. Para ter o
app de amostra e a ferramenta
istioctl
, vá para a página Versão do Istio e faça download do arquivo de instalação correspondente ao sistema operacional em que você está executando os comandos. Em seguida, siga as instruções para implantar e testar o aplicativo (não é necessário implantar o Istio) no Tutorial como instalar o Istio do GKE. - Saiba mais sobre o Istio na documentação de código aberto.
- Se precisar remover o complemento do Istio de um cluster, consulte Como desinstalar o Istio no GKE.