Diagnostica problemas con las barreras de seguridad

Descripción general de las barreras de seguridad

Las barreras de seguridad de Apigee Hybrid son un mecanismo que alertará a los clientes sobre un posible problema antes de que este afecte una instancia de Hybrid. En otras palabras, las barreras de seguridad de Hybrid detendrán un comando en sus recorridos si el comando pone en riesgo la estabilidad de una instancia de Hybrid. Ya sea una configuración incorrecta o un recurso insuficiente, las barreras de seguridad de Hybrid evitarán cualquier modificación en una instancia de Hybrid hasta que se quite el riesgo del problema. De esta forma, se evita que el cliente tenga que dedicar tiempo a problemas que normalmente tardarían horas o días en resolverse.

Usa barreras de seguridad con Apigee Hybrid

Para usar las barreras de seguridad de Hybrid, ejecuta los mismos comandos de instalación de Helm de Hybrid o de actualización de Helm de Hybrid documentados en las instrucciones de instalación de Hybrid. No se necesitan comandos adicionales para ejecutar las barreras de seguridad.

Cuando emites un comando de Helm para Apigee Hybrid, se producen dos situaciones antes de que el comando de Helm aplique la configuración a tu instancia de Hybrid:

  • Helm crea un Pod de barreras de seguridad temporal con la configuración aplicada. Si el Pod de barreras de seguridad se inicia en el estado correcto, el Pod probará tu instancia híbrida con la configuración aplicada. Si se pasan las pruebas, se finaliza el Pod de barreras de seguridad y la configuración se aplica a tu instancia de Apigee Hybrid.
  • Si las pruebas fallan, el Pod de barreras de seguridad se deja en mal estado para permitir el diagnóstico del Pod. El comando de Helm mostrará un mensaje de error en el que se informa que el Pod de la barrera de seguridad falló.

En el siguiente ejemplo, se muestra el uso de las barreras de seguridad para probar la conectividad de red desde una instancia de Hybrid al plano de control de Apigee como parte de la instalación del componente apigee-datastore. Puedes usar la misma secuencia para todos los componentes de Apigee Hybrid:

Instala el componente apigee-datastore con el siguiente comando:

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

Si hay un error inmediato, el comando de Helm también mostrará un mensaje de error en el que se mostrarán las verificaciones de barreras de seguridad con errores, como en el siguiente ejemplo:

 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 ver qué verificación falló y por qué, revisa los registros del Pod de barreras de seguridad como el siguiente ejemplo:

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"}

En este ejemplo, el mensaje de prueba fallida real es esta parte:

{"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"}

El Pod de barreras de seguridad se aprovisiona automáticamente cuando emites el comando de Helm. Si se pasa la prueba de conectividad del plano de control de Apigee, el Pod de barreras de seguridad se termina al final de la ejecución.

Verifica el estado de los Pods con rapidez después de emitir el comando helm install. En el siguiente resultado de ejemplo, se muestran los Pods de barreras de seguridad en el estado correcto, lo que significa que se pasó la prueba de conectividad del plano de control:

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

Si la prueba de conectividad del plano de control de Apigee falla, el Pod de barreras de seguridad permanecerá en un estado de error similar al siguiente resultado de ejemplo:

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

Inhabilita temporalmente las barreras de seguridad

Si necesitas inhabilitar las verificaciones de barreras de seguridad, agrega la marca --no-hooks al comando de Helm. En el siguiente ejemplo, se muestra la marca --no-hooks en un comando de Helm:

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

Configura barreras de seguridad en el archivo de anulación

A partir de la versión 1.12 de Apigee Hybrid, las barreras de seguridad se configuran de forma predeterminada en cada gráfico. Puedes anular la URL de la imagen, la etiqueta y la política de extracción de imágenes en el archivo overrides.

Por ejemplo, la URL de imagen de barreras de seguridad, la etiqueta y la política de extracción que se muestran a continuación se agregarán a tu archivo de anulaciones:

# 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

Usa tolerancias de Kubernetes con barreras de seguridad

También puedes agregar tolerancias a las barreras de seguridad en tu archivo overrides. Si no se definen tolerancias en la configuración overrides de las barreras de seguridad, estas usarán cualquier tolerancia definida de forma global.

Por ejemplo, para incluir tolerancias específicamente en la sección Barreras de seguridad de tu archivo overrides, debes agregar algo similar a la siguiente estrofa:

  # 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"