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"