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 Guadrails 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