Opções para configuração do pod do Google Kubernetes Engine com injeção automática de Envoy

Neste guia, você verá informações sobre opções e tarefas adicionais para o injetor sidecar automático do Envoy.

Como adicionar proxies sidecar a cargas de trabalho atuais

Depois de instalar o injetor sidecar nos clusters, os proxies sidecar serão injetados automaticamente nos pods recém-criados em namespaces ativados. Se você já tiver cargas de trabalho em execução antes de ativar o injetor sidecar, será necessário reiniciá-las para que a injeção ocorra.

Para pods gerenciados por controladores de implantação, DaemonSet ou StatefulSet, é possível executar o seguinte:

# Deployment
kubectl rollout restart deployment/DEPLOYMENT_NAME --namespace NAMESPACE

# DaemonSet
kubectl rollout restart daemonset/DAEMONSET_NAME --namespace NAMESPACE

# StatefulSet
kubectl rollout restart statefulset/STATEFULSET_NAME --namespace NAMESPACE

Se você não usou nenhum dos controladores acima para implantar os pods, é necessário excluí-los individualmente. Depois, eles são recriados automaticamente com novos proxies sidecar.

kubectl delete pod POD_NAME -n NAMESPACE

Verifique se um contêiner de proxy sidecar foi injetado em cada um dos pods:

kubectl get pods -n NAMESPACE

Por exemplo, com o cliente busybox criado acima, você verá dois pods em execução, um para o próprio aplicativo busybox e um para o proxy sidecar do Envoy injetado:

NAME                      READY   STATUS    RESTARTS   AGE
busybox-c54f578c9-c9fk4   2/2     Running   183        7d15h

Modificações de injeção

Por padrão, ativar um namespace ativa a injeção de proxy sidecar para todos os pods residentes. A injeção também pode ser configurada de maneira seletiva para que escopos diferentes atendam a necessidades específicas. Por exemplo, as modificações precisam ser usadas para evitar a injeção de proxy sidecar para serviços gRPC sem proxy.

Observe que as substituições de injeção só se aplicam quando o namespace está ativado e entram em vigor com a seguinte prioridade: Anotações de pod > NeverInjectSelector > AlwaysInjectSelector > Política padrão

Como ativar/desativar a injeção de pods específicos

Use a seguinte anotação de pod para ativar ou desativar a injeção de um pod específico em um namespace ativado:

...
metadata:
  annotations:
    sidecar.istio.io/inject: "true" / "false"

Ativar/desativar a injeção para grupos específicos de pods

O injetor sidecar pode ser configurado para sempre ou nunca injetar pods em namespaces ativados com base em uma matriz de seletores de rótulos do Kubernetes. Por exemplo, use os seguintes comandos para configurar o injetor sidecar para não injetar um proxy sidecar se o pod tiver o rótulo "run=client":

kubectl edit configmap -n istio-control istio-sidecar-injector

...
config: |-
  policy: enabled
  alwaysInjectSelector:
    []

  neverInjectSelector:
    - matchLabels:
        run: client
...

As implantações de injetor sidecar atuais precisam ser reiniciadas para que essa configuração entre em vigor.

Como configurar metadados de proxy sidecar

Para aceitar outros recursos do Traffic Director, os proxies sidecar podem herdar metadados específicos dos pods de encapsulamento. Por exemplo, inclua a seguinte anotação na especificação do modelo do pod para aplicar o rótulo "version=v2" aos proxies sidecar injetados.

...
metadata:
  annotations:
    cloud.google.com/proxyMetadata: '{"version": "dev"}'

Com o filtro de configuração, o Traffic Director pode compartilhar um subconjunto de configuração somente com os proxies específicos que correspondem a esse rótulo "version=v2".

As implantações atuais precisam ser reiniciadas para que a configuração entre em vigor.

Anotações de pods compatíveis

O Traffic Director é compatível com as anotações de pod a seguir para a injeção sidecar. Mesmo que outras anotações do injetor sidecar possam funcionar, a lista a seguir representa anotações compatíveis com o Traffic Director. Para evitar interrupções ou instabilidade, não crie uma dependência em outras anotações na implantação de produção.

Nome da anotação Valor Descrição
sidecar.istio.io/inject Booleano, representado como uma string. Por exemplo: "true" Especifica se um sidecar do Envoy precisa ser injetado automaticamente na carga de trabalho.
cloud.google.com/proxyMetadata Mapa JSON de pares de chave-valor. Por exemplo: "'{"version": "dev"}'" Especifica os pares de chave-valor em um mapa JSON que precisam ser anexados aos metadados do Envoy.

Como desinstalar o injetor sidecar

Desinstale o injetor sidecar com os seguintes comandos:

kubectl delete -f specs/
kubectl label namespace default istio-injection-