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"
  

Barreras de seguridad para la solución de problemas

Falta el punto de control de la variable de entorno o está vacío

Si ves el error Client.Timeout exceeded en el registro del pod de los controles de límite del operador de Apigee, estos son algunos pasos para solucionar problemas y determinar si el problema está en los controles de límite o en la infraestructura.

  1. Crea un nuevo archivo yaml con el siguiente contenido. El nombre del archivo yaml puede ser el que desees.
  2.     apiVersion: v1
        kind: Pod
        metadata:
          labels:
          name: apigee-simple-client  
        spec:
          containers:
          - name: apigee-simple-client
            image: "gcr.io/apigee-release/hybrid/apigee-hybrid-cassandra-client:1.10.1"
            imagePullPolicy: Always
            command:
            - sleep
            - "3650d"
          restartPolicy: Never
          hostNetwork: false
      
  3. Aplica el nuevo archivo yaml con el siguiente comando:
  4.     kubectl apply -n apigee-system -f name of the yaml file
      
  5. Ejecuta el pod con el siguiente comando:
  6.     kubectl exec -it -n apigee-system apigee-simple-client -- /bin/bash
        
  7. Ejecuta el siguiente comando dentro del pod apigee-simple-client y verifica el resultado:
  8.     curl -v -I --proxy http://cspnaproxy1.wlb2.nam.nsroot.net:8882 https://apigee.googleapis.com
        

    cspnaproxy1.wlb2.nam.nsroot.net es la dirección del proxy. Puedes usar cualquier dirección de proxy a la que tengas acceso. Si no tienes acceso a un proxy, puedes usar el siguiente comando para probar la conectividad de red:

        curl -v -I https://apigee.googleapis.com
        

    Si el comando curl se conecta correctamente al proxy HTTP y llega a apigee.googleapis.com, el comando curl debería mostrar un código de respuesta HTTP. Si el comando curl no puede conectarse al proxy o no puede conectarse a apigee.googleapis.com a través de él, el comando curl debería mostrar un error.