Como diagnosticar problemas com proteções

Visão geral do Guardrails

O Guardrails da Apigee híbrida é um mecanismo que alerta os clientes sobre um possível problema antes que ele afete uma instância híbrida. Em outras palavras, o Hybrid Guardrails irá interromper um comando se ele colocar em risco a estabilidade de uma instância híbrida. Seja uma configuração incorreta ou algum recurso insuficiente, o Hybrid Guardrails irá impedir qualquer modificação em uma instância híbrida até que o risco do problema seja removido. Assim, o cliente não perde tempo com problemas que normalmente levariam horas ou dias para serem resolvidos.

Como usar o Guardrails com a Apigee híbrida

Para usar o Hybrid Guardrails, execute os mesmos comandos de instalação ou upgrade do Hybrid Helm documentados nas instruções de instalação do Hybrid Helm. Nenhum comando adicional é necessário para executar o Guardrail.

Quando você emite um comando do Helm para a Apigee híbrida, duas coisas acontecem antes que o comando helm aplique a configuração à instância híbrida:

  • O Helm cria um pod temporário do Guardrails com a configuração aplicada. Se o pod do Guardrails gerar um estado íntegro, o pod testará a instância híbrida em relação à configuração aplicada. Se o teste for aprovado, o pod do Guardrails será encerrado e a configuração será aplicada à sua instância da Apigee híbrida.
  • Se o teste falhar, o pod do Guardails será deixado em um estado não íntegro para permitir o diagnóstico do pod. O comando helm vai mostrar uma mensagem de erro informando que o pod do Guardrails falhou.

O exemplo a seguir mostra o uso do Guardrails para testar a conectividade de rede de uma instância híbrida com o plano de controle da Apigee como parte da instalação do componente apigee-datastore. É possível usar a mesma sequência para todos os componentes da Apigee híbrida:

Instale o componente apigee-datastore usando o seguinte comando:

helm upgrade datastore apigee-datastore/ \
  --install \
  --namespace apigee \
  --atomic \
  -f overrides.yaml

Se houver um erro imediato, o comando Helm também vai mostrar uma mensagem de erro mostrando que as verificações do Guardrails falharam, como no exemplo a seguir:

 helm upgrade datastore apigee-datastore/ \
  --install \
  --namespace apigee \
  -f ../my-overrides.yaml

  . . .
    Error: UPGRADE FAILED: pre-upgrade hooks failed: 1 error occurred:
      * pod apigee-hybrid-helm-guardrail-datastore failed

Para conferir qual verificação falhou e o motivo da falha, confira os registros do pod do Guardrails, como o exemplo a seguir:

kubectl logs -n apigee apigee-hybrid-helm-guardrail-datastore
{"level":"INFO","timestamp":"2024-02-01T20:28:55.934Z","msg":"logging enabled","log-level":"INFO"}
{"level":"INFO","timestamp":"2024-02-01T20:28:55.935Z","msg":"","checkpoint":"upgrade","component":"apigee-datastore"}
{"level":"INFO","timestamp":"2024-02-01T20:28:55.935Z","msg":"initiating pre-install checks"}
{"level":"INFO","timestamp":"2024-02-01T20:28:55.935Z","msg":"check validation starting...","check":"controlplane_connectivity"}
{"level":"ERROR","timestamp":"2024-02-01T20:28:55.961Z","msg":"connectivity test failed","check":"controlplane_connectivity","host":"https://apigee.googleapis.com","error":"Get \"https://apigee.googleapis.com\": dial tcp: lookup apigee.googleapis.com on 10.92.0.10:53: no such host"}

Neste exemplo, a mensagem de falha no teste é esta:

{"level":"ERROR","timestamp":"2024-02-01T20:28:55.961Z","msg":"connectivity test failed","check":"controlplane_connectivity","host":"https://apigee.googleapis.com","error":"Get \"https://apigee.googleapis.com\": dial tcp: lookup apigee.googleapis.com on 10.92.0.10:53: no such host"}

O pod do Guardrails é provisionado automaticamente quando você executa o comando helm. Se o teste de conectividade do plano de controle da Apigee for aprovado, o pod do Guardrails será encerrado ao final da execução.

Verifique o status dos pods rapidamente depois de emitir o comando helm install. O exemplo de saída a seguir mostra os pods do Guardrail em um estado íntegro, o que significa que o teste de conectividade do plano de controle foi aprovado:

kubectl get pods -n apigee -w
NAME                                      READY    STATUS             RESTARTS    AGE
apigee-hybrid-helm-guardrail-datastore    0/1      Pending            0           0s
apigee-hybrid-helm-guardrail-datastore    0/1      Pending            0           1s
apigee-hybrid-helm-guardrail-datastore    0/1      ContainerCreating  0           1s
apigee-hybrid-helm-guardrail-datastore    0/1      Completed          0           2s
apigee-hybrid-helm-guardrail-datastore    0/1      Completed          0           3s
apigee-hybrid-helm-guardrail-datastore    0/1      Terminating        0           3s
apigee-hybrid-helm-guardrail-datastore    0/1      Terminating        0           3s

Se o teste de conectividade do plano de controle da Apigee falhar, o pod do Guardrails vai permanecer no estado "Erro" semelhante ao exemplo de saída a seguir:

kubectl get pods -n apigee -w
NAME                                      READY    STATUS             RESTARTS    AGE
apigee-hybrid-helm-guardrail-datastore    0/1      Pending            0           0s
apigee-hybrid-helm-guardrail-datastore    0/1      Pending            0           0s
apigee-hybrid-helm-guardrail-datastore    0/1      ContainerCreating  0           0s
apigee-hybrid-helm-guardrail-datastore    0/1      Error              0           4s
apigee-hybrid-helm-guardrail-datastore    0/1      Error              0           5s
apigee-hybrid-helm-guardrail-datastore    0/1      Error              0           6s

Como desativar temporariamente o Guardrail

Se você precisar desativar as verificações do Guardrail, adicione a flag --no-hooks ao comando Helm. O exemplo a seguir mostra a flag --no-hooks em um comando do Helm:

helm upgrade datastore apigee-datastore/ \
  --install \
  --namespace apigee \
  -f ../my-overrides.yaml \
  --no-hooks

Como configurar o Guardrail no arquivo de substituições

A partir da versão 1.12 da Apigee híbrida, o Guardrails é configurado por padrão em cada gráfico. Só é possível substituir o URL da imagem, a tag e a política de extração de imagem no arquivo overrides.

Por exemplo, o URL da imagem, a tag e a política de pull do Guardrails abaixo seriam adicionados ao arquivo de substituição:

# Apigee Ingressgateway
ingressGateway:
  image:
    pullPolicy: Always

## NOTE: The Guardrails config is below. The ingressgateway config above is for position reference only and is NOT required for Guardrails config.

# Apigee Guardrails
guardrails:
  image:
    url: "gcr.io/ng-hybrid/guardrails/apigee-watcher"
    tag: "12345_6789abcde"
    pullPolicy: Always

Como usar tolerâncias do Kubernetes com o Guardrails

Também é possível adicionar tolerâncias às Guardrails no arquivo overrides. Se nenhuma tolerância for definida na configuração overrides do Guardrails, ele usará qualquer tolerância definida globalmente.

Por exemplo, para incluir tolerâncias especificamente na seção "Guardrails" do arquivo overrides, adicione algo semelhante à seguinte estrofe:

  # Apigee Guardrails
  guardrails:
    image:
      url: "gcr.io/ng-hybrid/guardrails/apigee-watcher"
      tag: "12345_6789abcde"
      pullPolicy: Always
    tolerations:
    - key: "say"
      operator: "Equal"
      value: "taunt"
      effect: "NoSchedule"