Soluciona problemas del operador de APIM de Apigee para Kubernetes

Esta página se aplica a Apigee, pero no a Apigee Hybrid.

Consulta la documentación de Apigee Edge.

En esta página, se describe cómo solucionar problemas del operador de APIM de Apigee para Kubernetes. Hay varias herramientas disponibles para resolver cualquier problema que puedas encontrar. En esta página, se describe cómo verificar el estado de los recursos personalizados, usar el explorador de registros y solucionar problemas con el tráfico del entorno de ejecución de Apigee.

Verifica el estado de los recursos personalizados

Cada recurso personalizado que se usa en el operador de APIM de Apigee para Kubernetes contiene un objeto de estado con dos campos:

  • STATE: Describe el estado del recurso. Los valores incluyen running y created.
  • ERRORMESSAGE: Si falla la operación del recurso, el campo del mensaje de error se propaga con un mensaje explicativo.

Cuando se aplica un archivo yaml de recursos personalizados al clúster, Kubernetes realiza los cambios correspondientes en la infraestructura subyacente. La verificación del objeto de estado del recurso personalizado puede proporcionar información sobre el estado del recurso y mostrar cualquier error resultante si fallan las operaciones de infraestructura subyacentes.

Puedes verificar el estado del recurso personalizado con el siguiente comando:

kubectl -n NAMESPACE get CUSTOM_RESOURCE_KIND CUSTOM_RESOURCE_NAME

Aquí:

  • NAMESPACE: Es el espacio de nombres en el que se implementa el recurso personalizado.
  • CUSTOM_RESOURCE_KIND: Es el tipo del recurso personalizado.
  • CUSTOM_RESOURCE_NAME: Es el nombre del recurso personalizado.

Por ejemplo, el siguiente comando verifica el estado del recurso personalizado APIMExtensionPolicy llamado apim-extension-policy en el espacio de nombres apim:

kubectl -n apim get APIMExtensionPolicy apim-extension-policy-1

El resultado es similar a este:

NAME                      STATE                  ERRORMESSAGE
apim-extension-policy     Create_Update_Failed   Permission denied

Ver registros

En esta sección, se describe cómo usar los registros para solucionar problemas relacionados con el recurso de la puerta de enlace de Google Kubernetes Engine (GKE) y el recurso del operador de APIM.

Registros de la puerta de enlace de GKE

Cuando aplicas la APIMExtensionPolicy, la puerta de enlace de GKE que creaste en tu clúster se configura con una extensión de tráfico. La extensión usa el procesamiento externo de Kubernetes (ext-proc) para llamar al entorno de ejecución de Apigee y procesar las políticas. Los registros relacionados con el tráfico de ext-proc pueden ser útiles cuando se solucionan problemas.

Consulta los registros de los textos destacados de ext-proc

Para ver los registros del tráfico de texto destacado ext-proc, haz lo siguiente:

  1. Obtén el ID del servicio de backend creado para el entorno de ejecución de Apigee:
    kubectl get gateways.gateway.networking.k8s.io GATEWAY_NAME
       -o=jsonpath="{.metadata.annotations.networking\.gke\.io/backend-services}"

    En el ejemplo anterior, GATEWAY_NAME es el nombre de la puerta de enlace de GKE.

    El servicio de backend contendrá apigee-service-extension-backend-service en el ID.

  2. Sigue los pasos que se indican en Habilita el registro en un servicio de backend para habilitar el registro.
  3. Para ver los registros en la consola de Google Cloud, ve a la página Explorador de registros:

    Explorador de registros

  4. Revisa Mensajes de registro de un servicio de backend para ver la información de entrada de registro de texto destacado disponible, incluida la estructura de carga útil de JSON para la entrada de registro del balanceador de cargas service_extension_info. Puedes usar el campo Search en el Explorador de registros para filtrar la información relevante.

    El siguiente ejemplo es una entrada de registro que podrías ver para una llamada a la acción de ext-proc que falló:

    {
      "insertId": "s14dmrf10g6hi",
      "jsonPayload": {
        "serviceExtensionInfo": [
          {
            "extension": "ext11",
            "perProcessingRequestInfo": [
              {
                "eventType": "REQUEST_HEADERS",
                "latency": "0.001130s"
              }
            ],
            "backendTargetType": "BACKEND_SERVICE",
            "grpcStatus": "ABORTED",
            "backendTargetName": "gkegw1-2y13-apigee-service-extension-backend-service-443-yhsnrauznpwh",
            "chain": "chain1",
            "resource": "projects/${PROJECT}/locations/us-west1/lbTrafficExtensions/apim-extension"
          }
        ],
        "backendTargetProjectNumber": "projects/763484362408",
        "@type": "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry"
      },
      "httpRequest": {
        ...
      },
      "resource": {
        "type": "internal_http_lb_rule",
        "labels": {
          ...
        }
      },
      "timestamp": "2024-04-01T20:15:15.182137Z",
      "severity": "INFO",
      "logName": "projects/${PROJECT}/logs/loadbalancing.googleapis.com%2Frequests",
      "receiveTimestamp": "2024-04-01T20:15:18.209706689Z"
    }

    Ten en cuenta que el campo grpcStatus muestra ABORTED.

Registros del operador de APIM

El operador de APIM es un operador de Kubernetes que procesa eventos de recursos personalizados de APIM (como crear, leer, actualizar y borrar) y traduce esos eventos en la configuración de Apigee adecuada.

Para ver los registros del operador de APIM, sigue estos pasos:

  1. Para ver los registros en la consola de Google Cloud, ve a la página Explorador de registros:

    Explorador de registros

  2. En el panel de consultas, ingresa una consulta similar a la siguiente:
    resource.type="k8s_container"
    resource.labels.namespace_name="apim"
    labels.k8s-pod/app="apigee-apim-operator" severity>=DEFAULT
    
  3. Haz clic en Ejecutar consulta.
  4. Las entradas de registro filtradas se muestran en el panel Resultados de la consulta.
  5. Anota cualquier problema que tengas con la creación, actualización o eliminación de los servicios de APIMExtensionPolicy en Google Cloud redes o con los productos de API en los planes de administración de Apigee.

    Un ejemplo de error se vería de la siguiente manera:

    ApimExtensionPolicy creation status400
    response body:{
      "error": {
        "code": 400,
        "message": "The request was invalid: backend service https://www.googleapis.com/compute/v1/projects/... must use HTTP/2 as the protocol",
        "status": "INVALID_ARGUMENT",
        "details": [
          {
            "@type": "type.googleapis.com/google.rpc.BadRequest",
            "fieldViolations": [
              {
                "field": "lb_traffic_extension.extension_chains[0].extensions[0].service"
              }
            ]
          },
          {
            "@type": "type.googleapis.com/google.rpc.RequestInfo",
            "requestId": "d4e6f00ab5d367ec"
          }
        ]
      }
    }

Soluciona problemas de errores de acceso 403 en el operador de APIM

Si descubres errores de código de estado 403 que indican problemas de acceso, confirma lo siguiente:

  • Tu clúster de GKE tiene habilitada la federación de identidades para cargas de trabajo. La federación de identidades para cargas de trabajo está habilitada de forma predeterminada para los clústeres creados con el modo Autopilot. Si creaste un clúster con el modo estándar, habilita la federación de identidades para cargas de trabajo como se describe en Habilita la federación de identidades para cargas de trabajo para GKE.
  • La instalación de Helm anota correctamente la cuenta de servicio de Kubernetes (apim-ksa). Puedes confirmar esto con el siguiente comando:
    kubectl describe serviceaccount apim-ksa -n NAMESPACE

    En el que NAMESPACE es el espacio de nombres en el que se implementa el operador de APIM.

    Confirma que apigee-apim-gsa@${PROJECT}.iam.gserviceaccount.com aparezca en el campo Annotations del resultado.

    Por ejemplo:

    kubectl describe serviceaccount apim-ksa -n apim

    El resultado es similar al siguiente: Nombre: apim-ksa Espacio de nombres: apim Etiquetas: … Anotaciones: iam.gke.io/gcp-service-account: apigee-apim-gsa@apigee-product-demo.iam.gserviceaccount.com … Secretos de extracción de imágenes: Secretos activables: Tokens: Eventos:

  • La cuenta de servicio apigee-apim-gsa tiene los roles y permisos de IAM correctos. Puedes confirmarlo con el siguiente comando:
     gcloud iam service-accounts get-iam-policy \
    apigee-apim-gsa@${PROJECT}.iam.gserviceaccount.com

    La cuenta de servicio debe tener el rol roles/iam.workloadIdentityUser.

    Por ejemplo, el siguiente resultado muestra el rol roles/iam.workloadIdentityUser:

    bindings:
    - members:
      - serviceAccount:${PROJECT}.svc.id.goog[/apim-ksa]
      role: roles/iam.workloadIdentityUser
    etag: BwYUpeaM7XQ=
    version: 1
    
  • No hay condiciones de IAM especiales en los roles obligatorios, lo que impediría el acceso del operador.

Soluciona problemas con el tráfico del entorno de ejecución de Apigee

En esta sección, se describe cómo solucionar problemas relacionados con el tráfico del entorno de ejecución de Apigee. En las siguientes secciones, se describe cómo solucionar problemas con solicitudes válidas y no válidas.

Las solicitudes válidas fallan

Si no puedes enviar solicitudes válidas a tu entorno de ejecución de Apigee, es posible que se presenten los siguientes problemas:

  • La puerta de enlace de GKE no puede conectarse al entorno de ejecución de Apigee.
  • Tus credenciales de JWT o de clave de API no son válidas.
  • El producto de API de Apigee no está configurado para el destino y el entorno correctos.
  • El entorno de ejecución de Apigee no conoce el producto de la API de Apigee.

Pasos para solucionar problemas

Para solucionar problemas relacionados con solicitudes válidas, haz lo siguiente:

  • Habilita los registros del balanceador de cargas para la puerta de enlace de GKE y revisa los registros para determinar la causa de las fallas desde el texto destacado de la extensión. Consulta los registros de la puerta de enlace de GKE para obtener más detalles.
  • Confirma que el servicio de backend al que se hace referencia desde el servicio ext-proc esté en buen estado.
  • Revisa la configuración del producto de API en Apigee:
    • Confirma que el producto de la API esté habilitado para el entorno correcto (por ejemplo, test o prod).
    • Confirma que la ruta de recursos coincida con tu solicitud. Una ruta de acceso como / o /** coincidirá con cualquier ruta. También puedes usar comodines * o ** para buscar coincidencias.
    • Confirma que tienes una app para desarrolladores configurada para el producto de API. El Producto de API debe estar vinculado a una app para desarrolladores para validar sus claves de API.
  • Revisa tu solicitud a la puerta de enlace:
    • Confirma que la clave de consumidor se pase en el encabezado x-api-key.
    • Asegúrate de que la clave del consumidor sea válida. Las credenciales de la app para desarrolladores deben estar aprobadas para tu producto de API.

Las solicitudes no válidas se realizan correctamente

Si las solicitudes no válidas a tu entorno de ejecución de Apigee se realizan correctamente, es posible que se presenten los siguientes problemas:

  • FailOpen se establece en true en tu APIMExtensionPolicy.
  • No hay ninguna extensión de tráfico configurada para el balanceador de cargas de tu puerta de enlace de GKE.

Pasos para solucionar problemas

Para solucionar problemas con solicitudes no válidas, sigue estos pasos:

  • Confirma que exista una extensión de servicio y que haga referencia a los servicios de backend y la regla de reenvío correctos para tu puerta de enlace de GKE.

    Usa el siguiente comando para ver la extensión del servicio:

    gcloud beta service-extensions lb-traffic-extensions describe NAME_OF_APIM_EXTENSION_POLICY --location=LOCATION  --project=PROJECT

    Aquí:

    • NAME_OF_APIM_EXTENSION_POLICY: Es el nombre del recurso personalizado APIMExtensionPolicy.
    • PROJECT: El ID del proyecto
    • LOCATION: Es la ubicación del clúster de GKE en el que se implementa tu puerta de enlace.

    El resultado será similar al siguiente ejemplo:

    ...
    extensionChains:
    - extensions:
      - authority: ext11.com
        failOpen: false  # make sure this is false
        name: ext11
        service: https://www.googleapis.com/compute/v1/projects/my-project/regions/us-west1/backendServices/gkegw1-2y13-apigee-service-extension-backend-service-443-yhsnrauznpwh # Confirm this is correct 
        supportedEvents:
        - REQUEST_HEADERS
        - RESPONSE_HEADERS
        - REQUEST_BODY
        - RESPONSE_BODY
        timeout: 0.100s
      matchCondition:
        celExpression: 'true' # Confirm this is set
      name: chain1
    forwardingRules:
    - https://www.googleapis.com/compute/v1/projects/my-project/regions/us-west1/forwardingRules/gkegw1-2y13-default-internal-http-h6c1hhp1ce6q # Confirm this is the correct forwarding rule for your application load balancer
    loadBalancingScheme: INTERNAL_MANAGED
    name: projects/my-project/locations/us-west1/lbTrafficExtensions/apim-extension-policy-1
    

    Faltan estadísticas

    Si no puedes ver las Estadísticas de la API de Apigee para el operador de APIM en la consola de Google Cloud, ten en cuenta que la transferencia de Apigee puede retrasarse unos minutos.

    Recursos adicionales

    También puedes usar los siguientes recursos para solucionar problemas con el operador de APIM y el tráfico del entorno de ejecución de Apigee: