Actualizar las políticas de gestión de APIs con el operador de Apigee para Kubernetes

Esta página se aplica a Apigee y Apigee Hybrid.

Consulta la documentación de Apigee Edge.

A medida que tus necesidades de gestión de APIs crezcan y cambien, es posible que tengas que añadir nuevos servicios a tu clúster o actualizar las rutas y las opciones de entrada. En esta página se describe cómo actualizar el clúster para completar las siguientes tareas:

Antes de empezar

Antes de empezar esta tarea, asegúrate de completar los pasos que se describen en Crear un APIMExtensionPolicy. En esta página se da por hecho que has configurado un clúster de Google Kubernetes Engine (GKE), has instalado el operador de Apigee para Kubernetes, has creado una puerta de enlace de Google Kubernetes Engine (GKE) y has aplicado al menos una política de gestión de APIs a la puerta de enlace.

Roles obligatorios

Si has asignado los roles necesarios a tu cuenta de servicio tal como se describe en Instalar el operador de Apigee para Kubernetes, no se necesitan roles ni permisos de gestión de identidades y accesos adicionales para completar estas tareas.

Puedes autorizar acciones en recursos de tu clúster de Google Kubernetes Engine mediante el mecanismo de control de acceso basado en roles (RBAC) integrado en Kubernetes. Para obtener más información, consulta Autorizar acciones en clústeres mediante el control de acceso basado en roles.

Añadir un nuevo Gateway y una nueva HTTPRoute

En esta sección, añadirás un nuevo Gateway y un nuevo HTTPRoute a tu clúster. En las guías de tareas anteriores, las configuraciones de ejemplo usaban una pasarela de GKE externa. Si se implementan varias pasarelas en la misma región, deben ser del mismo tipo (ambas externas o ambas internas). Por este motivo, la configuración de ejemplo de esta guía también usará una pasarela externa.

El operador de Apigee para Kubernetes se puede usar con pasarelas de GKE internas o externas, pero no puedes desplegar ambos tipos de pasarelas en la misma región.

Para añadir un nuevo Gateway y una nueva HTTPRoute a tu clúster, sigue estos pasos:

  1. Configura una nueva puerta de enlace de GKE externa. Para obtener más información y conocer los pasos que debes seguir, consulta el artículo Implementar una pasarela externa.
  2. Crea un recurso global SslCertificate gestionado por Google:
    gcloud compute ssl-certificates create CERT_NAME \
      --domains=HOST_NAME \
      --global

    Donde:

    • CERT_NAME es el nombre del certificado que quieres crear.
    • HOST_NAME_2 es el nombre de host de la nueva pasarela.

  3. Crea un archivo llamado gateway2.yaml en el espacio de nombres apim.
  4. Copia el siguiente contenido en el archivo nuevo:
    # gateway2.yaml
    apiVersion: gateway.networking.k8s.io/v1beta1
    kind: Gateway
    metadata:
      name: global-ext-lb2
      spec:
      gatewayClassName: gke-l7-global-external-managed
      listeners:
      - name: https
        protocol: HTTPS
        allowedRoutes:
          kinds:
          - kind: HTTPRoute
          namespaces:
            from: All
        port: 443
        tls:
          options:
            networking.gke.io/pre-shared-certs: CERT_NAME
  5. Añade una nueva HTTPRoute para /post al mismo archivo, tal como se destaca a continuación:
    # http-route2.yaml
      apiVersion: gateway.networking.k8s.io/v1beta1
      kind: HTTPRoute
      metadata:
        name: http-bin-route-post
        namespace: http
      spec:
        parentRefs:
          - kind: Gateway
            name: global-ext-lb2
            namespace: default
        hostnames:
          - HOST_NAME_2
        rules:
        - matches:
          - path:
              type: PathPrefix
              value: "/post"
          backendRefs:
          - name: httpbin
            kind: Service
            port: 80
            namespace: http
  6. Aplica los nuevos Gateway y HTTPRoute:
    kubectl apply -f gateway2.yaml
  7. Comprueba el estado de HTTPRoute con el siguiente comando::
    kubectl -n http get HttpRoute

    La salida debería ser similar a la siguiente:

    NAME             HOSTNAMES                                                  AGE
    http-bin-route   ["my-hostname-2"]   12d
    
  8. Comprueba el estado de la pasarela con el siguiente comando:
    kubectl get gateway global-ext-lb2

    La salida debería ser similar a la siguiente:

    NAME             CLASS                            ADDRESS        PROGRAMMED   AGE
    global-ext-lb2   gke-l7-global-external-managed   34.54.193.92   True         11d
    

    Confirma que la columna Address contiene una dirección IP válida y que el estado de Programmed es True.

  9. Describe la pasarela para asegurarte de que la ruta esté adjunta:
    kubectl describe gateway global-ext-lb2
  10. La salida debería ser similar a la siguiente:

    ...
    Listeners:
      Attached Routes:  1
      Conditions:
        Last Transition Time:  2024-10-03T03:10:17Z
    ...

    Confirma que el valor de Attached Routes es 1.

  11. Envía una solicitud a la pasarela para verificar que la ruta funciona:
    curl -k -X POST https://GATEWAY_IP_ADDRESS/post -H "Host: HOST_NAME_2"

    Donde:

    • GATEWAY_IP_ADDRESS es la dirección IP de la pasarela, tal como se muestra en la columna Address de la respuesta devuelta en el paso 7.
    • HOST_NAME_2 es el nombre de host definido en HTTPRoute de la pasarela.

  12. La salida debería ser similar a la siguiente:
      {
        "args": {},
        "headers": {
          "Accept": "*/*",
          "Host": "apigee-apim-operator-test.apigee.net",
          "User-Agent": "curl/8.7.1",
          "X-Cloud-Trace-Context": "2bb8a80e29e80662ff9cb89971c447d9/13083106619927322701"
        },
        "origin": "67.164.1.10,34.54.193.72",
        "url": "https://apigee-apim-operator-test.apigee.net/post"
      }
      
  13. Crea una nueva política de extensión de APIM que haga referencia a la ruta HTTP del nuevo Gateway creado en un paso anterior:
    1. Crea un archivo llamado apim-policy2.yaml en el espacio de nombres apim.
    2. Copia el siguiente contenido en el archivo nuevo:
      # apim-policy2.yaml
      apiVersion: apim.googleapis.com/v1
      kind: APIMExtensionPolicy
      metadata:
        name: global-ext-lb2-apim-policy-2
        namespace: apim
      spec:
        location: global
        failOpen: false
        timeout: 1000ms
        defaultSecurityEnabled: true
        targetRef: # identifies the Gateway where the extension should be installed
          name: global-ext-lb2
          kind: Gateway
          namespace: default
    3. Aplica la nueva política de extensión de APIM:
      kubectl apply -f apim-policy2.yaml

      Una vez que se aplica el archivo, el operador de Apigee para Kubernetes crea recursos de red en segundo plano.

    4. Comprueba el estado de la política de extensiones de APIM:
      kubectl -n apim get APIMExtensionPolicy

      La salida debería ser similar a la siguiente:

      NAME                           STATE        ERRORMESSAGE
      global-ext-lb2-apim-policy-2   RUNNING
      

      Confirma que el valor de STATE es RUNNING.

    5. Espera cinco minutos para que los cambios se propaguen a todas las instancias del balanceador de carga y, a continuación, usa el siguiente comando para verificar que se produce un error en una solicitud a la nueva pasarela:
      curl -k -X POST https://GATEWAY_IP_ADDRESS/post -H "Host: HOST_NAME_2"

      Donde:

      • GATEWAY_IP_ADDRESS es la dirección IP de la pasarela obtenida en un paso anterior.
      • HOST_NAME_2 es el nombre de host definido en HTTPRoute de la pasarela.

      La solicitud debería fallar y devolver una respuesta similar a la siguiente:

      {
        "fault": {
          "faultstring": "Raising fault. Fault name : RF-insufficient-request-raise-fault",
          "detail": {
            "errorcode": "steps.raisefault.RaiseFault"
          }
        }
      }

      Esto significa que la extensión de servicio de Apigee está activa y que se aplica la verificación de la clave de API y del token de acceso. Para saber qué pasos debes seguir para crear una aplicación de desarrollador, obtener una clave de API y probar tu nueva pasarela con la clave, consulta Probar la extensión de servicio de Apigee.

Actualizar un producto de API

Modifica un producto de API para que haga referencia a la nueva política de extensión de APIM:

  1. Crea un archivo llamado api-product-2.yaml en el espacio de nombres apim.
  2. Copia el siguiente contenido en el archivo nuevo:
    # api-product-2.yaml
    apiVersion: apim.googleapis.com/v1
    kind: APIProduct
    metadata:
      name: api-product-2
      namespace: apim
    spec:
      name: api-product-2
      approvalType: auto
      description: Http bin GET calls
      displayName: api-product-2
    EnforcementRefs:
      - name: global-ext-lb1-apim-policy
        kind: APIMExtensionPolicy
        group: apim.googleapis.com
        namespace: apim
      - name: global-ext-lb2-apim-policy
        kind: APIMExtensionPolicy
        group: apim.googleapis.com
        namespace: apim
      attributes:
      - name: access
        value: private
  3. Aplica el nuevo archivo de producto de API:
    kubectl apply -f api-product-2.yaml

    Los cambios tardarán aproximadamente tres minutos en aplicarse en todo el clúster.

En este ejemplo, se actualiza la sección EnforcementRefs del producto de la API api-product-2 para hacer referencia a global-ext-lb1-apim-policy y global-ext-lb2-apim-policy, tal como se muestra en las partes destacadas de yaml.

Crear un producto de API

Crea un producto de API:

  1. Crea un archivo llamado api-product-2.yaml en el espacio de nombres apim.
  2. Copia el siguiente contenido en el archivo nuevo:
    # api-product-2.yaml
    apiVersion: apim.googleapis.com/v1
    kind: APIProduct
    metadata:
      name: api-product-2
      namespace: apim
    spec:
      name: api-product-2
      approvalType: auto
      description: Http bin GET calls
      displayName: api-product-2
      enforcementRefs:
      - name: global-ext-lb2-apim-policy
        kind: APIMExtensionPolicy
        group: apim.googleapis.com
        namespace: apim
      attributes:
      - name: access
        value: private
  3. Aplica el nuevo archivo de producto de API:
    kubectl apply -f api-product-2.yaml

    Los cambios tardarán aproximadamente tres minutos en aplicarse en todo el clúster.

En este ejemplo, se crea la sección EnforcementRefs del nuevo producto de API api-product-2 para hacer referencia a global-ext-lb2-apim-policy, tal como se muestra en las partes destacadas de yaml.

Crear un conjunto de operaciones de API

Crea un conjunto de operaciones de API:

  1. Crea un archivo llamado item-set-post.yaml en el espacio de nombres apim.
  2. Copia el siguiente contenido en el archivo nuevo:
    # item-set-post.yaml
    apiVersion: apim.googleapis.com/v1
    kind: APIOperationSet
    metadata:
      name: item-set-post
      namespace: apim
    spec:
      apiProductRefs:
        - name: api-product-2
          kind: APIProduct
          group: apim.googleapis.com
          namespace: apim
      quota:
        limit: 1
        interval: 1
        timeUnit: minute
      restOperations:
        - name: PostItems
          path: "/post"
          methods:
          - POST
  3. Aplica el nuevo archivo de conjunto de operaciones de la API:
    kubectl apply -f item-set-post.yaml

    Los cambios tardarán aproximadamente tres minutos en aplicarse en todo el clúster.

En este ejemplo, se crea el valor restOperations del nuevo conjunto de operaciones de API item-set-post para hacer referencia a la ruta /post, tal como se muestra en las partes destacadas del archivo.

Probar la nueva configuración de la pasarela

Para probar la nueva configuración de la pasarela, envía la siguiente solicitud a la nueva ruta /post:

curl -k -X POST https://GATEWAY_IP_ADDRESS/post -H "Host: HOST_NAME_2"

Donde:

  • GATEWAY_IP_ADDRESS es la dirección IP de la pasarela obtenida en un paso anterior.
  • HOST_NAME es el nombre de host definido en HTTPRoute de la pasarela.

La solicitud debería realizarse correctamente y devolver una respuesta similar a la siguiente:

{
  "args": {},
  "headers": {
    "Accept": "*/*",
    "Host": "apigee-apim-operator-test.apigee.net",
    "User-Agent": "curl/8.7.1",
    "X-Api-Key": "f0N6sXXXclGXXXe0oP5XXXdA20PjgrP2x8xXXh7z4XXXKiYt",
    "X-Cloud-Trace-Context": "bb3a768787099bda628781188bfb318b/15554891713516675739"
  },
  "origin": "34.54.193.72",
  "url": "https://34.54.193.72/post"
}

Solucionar problemas

Si tienes problemas al actualizar y ampliar las políticas de gestión de APIs que se usan con Apigee Operator para Kubernetes, consulta el artículo Solucionar problemas de Apigee Operator para Kubernetes para ver soluciones a errores habituales.

Siguientes pasos