Actualiza las políticas de administración de APIs con el 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.

A medida que tus necesidades de administración de APIs crecen y cambian, es posible que debas agregar servicios nuevos a tu clúster o actualizar las rutas y las opciones de entrada existentes. En esta página, se describe cómo actualizar tu clúster para completar las siguientes tareas:

Antes de comenzar

Antes de comenzar esta tarea, asegúrate de completar los pasos que se describen en Cómo aplicar una política con el operador de APIM de Apigee para Kubernetes. En esta página, se da por sentado que configuraste un clúster de Google Kubernetes Engine (GKE), instalaste el operador de APIM de Apigee para Kubernetes, creaste una puerta de enlace de Google Kubernetes Engine (GKE) y aplicaste al menos una política de administración de APIs a la puerta de enlace.

Roles obligatorios

Si asignaste los roles necesarios a tu cuenta de servicio como se describe en Instala el operador de APIM de Apigee para Kubernetes, no se requieren roles ni permisos de IAM adicionales para completar estas tareas.

Puedes autorizar acciones en los 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 Autoriza acciones en clústeres mediante el control de acceso basado en roles.

Agrega una puerta de enlace y una HTTPRoute nuevas

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

El operador de APIM se puede usar con puertas de enlace de GKE internas o externas, pero no puedes implementar ambos tipos de puertas de enlace en la misma región.

Para agregar una nueva puerta de enlace y HTTPRoute a tu clúster, completa los siguientes pasos:

  1. Configura una nueva puerta de enlace externa de GKE. Para obtener más información y pasos, consulta Implementa una puerta de enlace externa.
  2. Crea un archivo nuevo llamado gateway2.yaml en el espacio de nombres apim.
  3. 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: apigee-lb-new-cert-sept
  4. Agrega una nueva HTTPRoute para /post al mismo archivo, 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
  5. Aplica la nueva puerta de enlace y HTTPRoute:
    kubectl apply -f gateway2.yaml
  6. Verifica el estado de HTTPRoute con el siguiente comando:
    kubectl -n http get HttpRoute

    El resultado debería ser similar al siguiente ejemplo:

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

    El resultado debería ser similar al siguiente ejemplo:

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

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

  8. Describe la puerta de enlace para asegurarte de que la ruta esté adjunta:
    kubectl describe gateway global-ext-lb2
  9. El resultado debería ser similar al siguiente ejemplo:

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

    Confirma que el valor de Attached Routes sea 1.

  10. Envía una solicitud a la puerta de enlace para verificar que la ruta funcione:
    curl -X POST http://GATEWAY_IP_ADDRESS/post -H "Host: HOST_NAME"

    Aquí:

    • GATEWAY_IP_ADDRESS es la dirección IP de la puerta de enlace, como se muestra en la columna Address de la respuesta que se muestra en el Paso 7.
    • HOST_NAME es el nombre de host definido en el HTTPRoute de la puerta de enlace.

  11. El resultado debería ser similar al siguiente ejemplo:
      {
        "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"
      }
      
  12. Crea una nueva política de extensión de APIM que haga referencia a la HTTPRoute de la puerta de enlace nueva que creaste en un paso anterior:
    1. Crea un archivo nuevo 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/v1alpha1
      kind: APIMExtensionPolicy
      metadata:
        name: global-ext-lb2-apim-policy-2
        namespace: apim
      spec:
        location: global
        failOpen: false
        timeout: 1000ms
        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 extensiones de APIM:
      kubectl apply -f apim-policy2.yaml

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

    4. Verifica el estado de la política de extensión de APIM:
      kubectl -n apim get APIMExtensionPolicy

      El resultado debería ser similar al siguiente ejemplo:

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

      Confirma que el valor de STATE sea RUNNING.

    5. Espera cinco minutos para asegurarte de que los cambios se propaguen a todas las instancias del balanceador de cargas y, luego, usa el siguiente comando para verificar que falle una solicitud a la nueva puerta de enlace:
      curl -X POST http://GATEWAY_IP_ADDRESS/post -H "Host: HOSTNAME"

      Aquí:

      • GATEWAY_IP_ADDRESS es la dirección IP de la puerta de enlace que se obtuvo en un paso anterior.
      • HOST_NAME es el nombre de host definido en el HTTPRoute de la puerta de enlace.

      La solicitud debería fallar con 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 a Apigee está activa y que se aplica la verificación de la clave de API y el token de acceso. Para conocer los pasos necesarios para crear una app para desarrolladores, obtener una clave de API y probar tu nueva puerta de enlace con la clave, consulta Cómo probar la extensión de servicio de Apigee.

Actualiza un producto de API

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

  1. Crea un archivo nuevo 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/v1alpha1
    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 productos 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, como se muestra en las partes destacadas de yaml.

Crea un nuevo producto de API

Crea un nuevo producto de API:

  1. Crea un archivo nuevo 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/v1alpha1
    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 productos 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, como se muestra en las partes destacadas de yaml.

Crea un nuevo conjunto de operaciones de API

Crea un nuevo conjunto de operaciones de API:

  1. Crea un archivo nuevo 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/v1alpha1
    kind: APIOperationSet
    metadata:
      name: item-set-post
      namespace: apim
    spec:
      apiProductRefs:
        - name: api-product-1
          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 de acceso /post, como se muestra en las partes destacadas del archivo.

Prueba la nueva configuración de la puerta de enlace

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

curl -X POST http://GATEWAY_IP_ADDRESS/post -H "Host: HOST_NAME"

Aquí:

  • GATEWAY_IP_ADDRESS es la dirección IP de la puerta de enlace que se obtuvo en un paso anterior.
  • HOST_NAME es el nombre de host definido en el HTTPRoute de la puerta de enlace.

La solicitud debería realizarse correctamente y mostrar 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 para actualizar y extender las políticas de administración de APIs que se usan con el operador de APIM, consulta Soluciona problemas del operador de APIM para obtener soluciones a errores comunes.

¿Qué sigue?