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:
- Agrega una puerta de enlace y una HTTPRoute nuevas.
- Actualiza un producto de API.
- Crea un producto de API nuevo.
- Crea un nuevo conjunto de operaciones de API.
- Prueba la nueva configuración de la puerta de enlace.
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:
- Configura una nueva puerta de enlace externa de GKE. Para obtener más información y pasos, consulta Implementa una puerta de enlace externa.
- Crea un archivo nuevo llamado
gateway2.yaml
en el espacio de nombresapim
. - 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
- 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
- Aplica la nueva puerta de enlace y HTTPRoute:
kubectl apply -f gateway2.yaml
- 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
- 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 deProgrammed
seaTrue
. - Describe la puerta de enlace para asegurarte de que la ruta esté adjunta:
kubectl describe gateway global-ext-lb2
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
sea1
.- 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 columnaAddress
de la respuesta que se muestra en el Paso 7.HOST_NAME
es el nombre de host definido en elHTTPRoute
de la puerta de enlace.
- 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" }
- 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:
- Crea un archivo nuevo llamado
apim-policy2.yaml
en el espacio de nombresapim
. - 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
- 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.
- 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
seaRUNNING
. - 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 elHTTPRoute
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.
- Crea un archivo nuevo llamado
Actualiza un producto de API
Modifica un producto de API existente para hacer referencia a la nueva política de extensión de APIM:
- Crea un archivo nuevo llamado
api-product-2.yaml
en el espacio de nombresapim
. - 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
- 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:
- Crea un archivo nuevo llamado
api-product-2.yaml
en el espacio de nombresapim
. - 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
- 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:
- Crea un archivo nuevo llamado
item-set-post.yaml
en el espacio de nombresapim
. - 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
- 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?
- Obtén información para desinstalar el operador de APIM de Apigee para Kubernetes.
- Obtén más información sobre las opciones para implementar puertas de enlace.