Tareas de integración de Kubernetes

Estás consultando la documentación de Apigee Edge.
Consulta la documentación de Apigee X.
Información

Cómo agregar un complemento personalizado

Puedes agregar funciones y capacidades nuevas a la micropuerta de enlace si escribes complementos personalizados. Los complementos personalizados te permiten interactuar de manera programática con las solicitudes y respuestas que fluyen a través de la micropuerta de enlace.

En esta sección, se explica cómo empaquetar y, luego, implementar complementos en una instancia de Edge Microgateway que se ejecuta en el clúster de Kubernetes.

En el resto de esta sección, se supone que estás familiarizado con la escritura y la configuración de complementos para una configuración estándar de Edge Microgateway. De lo contrario, consulta Cómo desarrollar complementos personalizados.

Empaqueta los complementos

Para empaquetar complementos personalizados, sigue estos pasos:

  1. Escribe y prueba el complemento según las instrucciones que se indican en Cómo escribir un complemento simple.

  2. Coloca el código del complemento en la estructura de directorio adecuada. Los directorios de complementos deben seguir una estructura establecida. En el siguiente ejemplo, se muestra la estructura que debes seguir, en la que response-uppercase y request-headers son los nombres de las carpetas que contienen código de complemento personalizado (estos nombres son solo ejemplos; los nombres de tus carpetas pueden diferir):

    plugin
      |
      |-- plugins
        |
        |- response-uppercase
        |     |- index.js
        |     |- package.json
        |- request-headers
        |     | - index.js
              | - package.json
    
  3. cd a la carpeta plugin.

  4. En la carpeta plugin, comprime toda la carpeta plugins:

    zip -r plugins.zip plugins/

Crear una imagen de Docker

  1. En el mismo directorio en el que se encuentra el archivo ZIP, crea un archivo nuevo llamado Dockerfile.
  2. Agrega el siguiente código a Dockerfile y guarda el archivo:

    FROM gcr.io/apigee-microgateway/edgemicro:latest
    RUN apt-get install unzip
    COPY plugins.zip /opt/apigee/
    RUN chown apigee:apigee /opt/apigee/plugins.zip
    RUN su - apigee -c "unzip /opt/apigee/plugins.zip -d /opt/apigee"
    EXPOSE 8000
    EXPOSE 8443
    ENTRYPOINT ["entrypoint"]
    
  3. Crea una imagen de Docker nueva de Edge Microgateway con los complementos y envía la imagen al registro de Docker. Puedes usar el registro que desees, como docker.io o gcr.io:

    docker build -t edgemicroplugins .
    docker tag edgemicroplugins container-registry/your-project/edgemicroplugins
    docker push container-registry/your-project/edgemicroplugins
    

    Por ejemplo:

    docker build -t edgemicroplugins .
    docker tag edgemicroplugins gcr.io/my-project/edgemicroplugins
    docker push   gcr.io/my-project/edgemicroplugins
    

Actualiza la configuración de Edge Microgateway

  1. Agrega los complementos al archivo de configuración de Edge Microgateway. Puedes encontrar el archivo de configuración aquí:

    $HOME/.edgemicro/org-env-config.yaml
    

    Por ejemplo:

    $HOME/.edgemicro/myorg-test-config.yaml

En la siguiente configuración de muestra, se agregó el complemento personalizado response-uppercase. El complemento oauth ya estaba ahí de forma predeterminada.

  edgemicro:
    ...
    plugins:
      sequence:
        - oauth
        - response-uppercase

Actualiza tu clúster de Kubernetes

El paso final es aplicar el cambio de configuración al clúster de Kubernetes. Kubernetes extraerá la imagen nueva con el código del complemento que enviaste a Container Registry y la usará para los pods recién creados.

Si implementaste Edge Microgateway como servicio

Usa el comando edgemicroctl para insertar la configuración actualizada de Edge Microgateway:

  1. Actualiza la implementación de Edge Microgateway con la imagen nueva. Por ejemplo:

    kubectl apply -f <(edgemicroctl -org=your_organization -env=your_environment -key=configuration_key -sec=configuration_secret -conf=config_file_path -img=container-registry/your_project_name/image_name:latest)

    Donde:

    • your_organization: Es la organización de Apigee que especificaste en el comando edgemicro configure.
    • your_environment: Es el entorno que especificaste en el comando edgemicro configure.
    • configuration_key: Es la clave que muestra el comando edgemicro configure.
    • configuration_secret: Es el secreto que muestra el comando edgemicro configure.
    • config_file_path: Es la ruta de acceso al archivo de configuración de Edge Micro que muestra el comando edgemicro configure.
    • container-registry: Es el registro de Docker al que enviaste la imagen. Por ejemplo, gcr.io o docker.io.
    • your_project_name: Es el nombre del proyecto para el repositorio de Docker al que enviaste la imagen de Docker.
    • image_name: Es el nombre de la imagen de Docker que enviaste.

    Ejemplo:

    kubectl apply -f <(edgemicroctl -org=jdoe -env=test -key=f2d2eaa52b758493d00cec656e574ac947bee1d701c5c5f3295e5eaa39a3b -sec=0c38cda3fac6c59152f15657052ba1728f8003c1a763cf08da2a -conf=/Users/jdoe/.edgemicro/apigeesearch-test-config.yaml -img=gcr.io/jdoe-project/edgemicroplugins:latest)
  2. Prueba el complemento. Llama a la API para ver si obtuviste el comportamiento esperado. Por ejemplo, para el complemento de "respuesta en mayúsculas", el texto de respuesta se convierte en mayúsculas, como se muestra a continuación:

    curl $GATEWAY_IP -H 'x-api-key:3eqeedJRFLlCshwWBiXq4xKFoH1Se3xR'

    Resultado:

    HELLO WORLD
    
Incorpora la configuración nueva de forma manual

La inyección manual es un enfoque sencillo, en el que insertas la configuración nueva desde la línea de comandos.

  1. Ejecuta el siguiente comando:

    kubectl apply -f <(edgemicroctl -org=your_org -env=your_env -key=your_key -sec=your_secret -conf=config_file_path -img=container-registry/your_project_name/image_name:latest -svc=service_deployment_file)

    Donde:

    • your_org: Es la organización de Apigee que especificaste en el comando edgemicro configure.
    • your_env: Es el entorno que especificaste en el comando edgemicro configure.
    • your_key: Es la clave que muestra el comando edgemicro configure.
    • your_secret: Es el secreto que muestra el comando edgemicro configure.
    • config_file_path: Es la ruta de acceso al archivo de configuración de Edge Micro que muestra el comando edgemicro configure.
    • container-registry: Es el registro de Docker al que enviaste la imagen. Por ejemplo, gcr.io o docker.io.
    • your_project_name: Es el nombre del proyecto para el repositorio de Docker al que enviaste la imagen de Docker.
    • image_name: Es el nombre de la imagen de Docker que enviaste.
    • service_deployment_file: Es la ruta de acceso al archivo de implementación del servicio para el que se aplicarán los complementos. Por ejemplo: samples/helloworld/helloworld.yaml.

    Por ejemplo:

    kubectl apply -f <(edgemicroctl -org=myorg -env=test-key=0e3ecea28a64099410594406b30e54439af5265f8 -sec=e3919250bee37c69cb2e5b41170b488e1c1d -conf=/Users/jdoe/.edgemicro/myorg-test-config.yaml -img=gcr.io/myproject/edgemicroplugins:latest -svc=samples/helloworld/helloworld.yaml)
  2. Prueba el complemento. Llama a la API de servicio para ver si obtienes el comportamiento esperado. Por ejemplo, para el complemento de “respuesta en mayúsculas”, el texto de respuesta se convierte a todo en mayúsculas, como se muestra a continuación:

    curl $GATEWAY_IP -H 'x-api-key:3eqeedJRFLlCshwWBiXq4xKFoH1Se3xR'

    Resultado:

    HELLO WORLD
    

Realiza cambios en la configuración de Edge Microgateway

En algunos casos, es posible que debas modificar la configuración de Edge Microgateway. Por ejemplo, es posible que desees agregar un complemento nuevo a Edge Microgateway o cambiar un parámetro de configuración. En esta sección, se explica cómo realizar y aplicar cambios de configuración a Edge Microgateway que se ejecuta en Kubernetes.

  1. Crea un archivo de configuración secret.yaml como se muestra a continuación:

    apiVersion: v1
    kind: Secret
    metadata:
      name: mgwsecret
    type: Opaque
    data:
      mgorg: EDGEMICRO_ORG
      mgenv: EDGEMICRO_ENV
      mgkey: EDGEMICRO_KEY
      mgsecret: EDGEMICRO_SECRET
      mgconfig: EDGEMICRO_CONFIG
    
  2. Especifica el valor codificado en base64 de EDGEMICRO_ORG, EDGEMICRO_ENV, EDGEMICRO_KEY, EDGEMICRO_SECRET:

    echo -n "your-org" | base64 | tr -d '\n'
    echo -n "your-org-env" | base64 | tr -d '\n'
    echo -n "your-mg-key" | base64 | tr -d '\n'
    echo -n "your-mg-secret" | base64 | tr -d '\n'
    
  3. Realiza los cambios en el archivo de configuración de Edge Microgateway para la organización y el entorno:

    $HOME/.edgemicro/your_org-your_env-config.yaml
  4. Codifica en Base64 el doble del contenido del archivo de configuración:

    cat $HOME/.edgemicro/org-env-config.yaml | base64 | tr -d '\n' | base64  | tr -d '\n'
  5. Aplica cambios a Kubernetes en el espacio de nombres en el que se ejecuta tu servicio.

    kubectl apply -f secret.yaml -n 

Los Pods de micropuerta de enlace existentes no recogen estos cambios de forma automática. Sin embargo, los Pods nuevos recibirán los cambios. Puedes borrar el Pod existente para que la implementación cree uno nuevo que capte el cambio.

Ejemplo de servicio

En el siguiente ejemplo, se muestra cómo actualizar una implementación de servicio con una nueva

  1. Obtén los Pods.

    kubectl get pods

    Resultado de ejemplo:

    NAME                                 READY     STATUS    RESTARTS   AGE
    edge-microgateway-57ccc7776b-g7nrg   1/1       Running   0          19h
    helloworld-6987878fc4-cltc2          1/1       Running   0          1d
    
  2. Borra el Pod edge-microgateway.

    kubectl delete pod edge-microgateway-57ccc7776b-g7nrg

    Resultado de ejemplo:

    pod "edge-microgateway-57ccc7776b-g7nrg" deleted
    
  3. Obtén los Pods nuevamente. Se iniciará un Pod nuevo y se harán los cambios de configuración.

    kubectl get pods

    Resultado de ejemplo:

    NAME                                 READY     STATUS    RESTARTS   AGE
    edge-microgateway-57ccc7776b-7f6tc   1/1       Running   0          5s
    helloworld-6987878fc4-cltc2          1/1       Running   0          1d
    

Escala tu implementación

En esta sección, se explica cómo puedes usar los principios de escalamiento de Kubernetes para escalar tus implementaciones.

Escala una implementación de servicio

  1. Verifica las implementaciones:

    kubectl get deployments

    Resultado de ejemplo:

    NAME                DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
    edge-microgateway   1         1         1            1           18h
    helloworld          1         1         1            1           1d
    

    El resultado indica que se implementó una réplica.

  2. Escala la implementación de 1 a tantas réplicas como desees. En este ejemplo, se escala el servicio edge-microgateway.

    kubectl scale deployment edge-microgateway --replicas=2
  3. Si quieres usar el ajuste de escala automático, usa este comando (opcional):

    kubectl autoscale deployment edge-microgateway --cpu-percent=50 --min=1 --max=10
  4. Revisa las implementaciones para verificar que el escalamiento esté habilitado:

    kubectl get deployments

    Resultado de ejemplo:

    NAME                DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
    edge-microgateway   2         2         2            2           18h
    helloworld          1         1         1            1           1d
    

    Se cambió el estado para incluir dos réplicas.

  5. Verifica los Pods:

    kubectl get pods

    Resultado de ejemplo:

    NAME                                 READY     STATUS    RESTARTS   AGE
    edge-microgateway-57ccc7776b-g7nrg   1/1       Running   0          18h
    edge-microgateway-57ccc7776b-rvfz4   1/1       Running   0          41s
    helloworld-6987878fc4-cltc2          1/1       Running   0          1d
    

    En el resultado, se muestra que ambas réplicas se encuentran en estado de ejecución.

Usa espacios de nombres para varios parámetros de configuración de Edge Microgateway

Puedes implementar y configurar varias instancias de servicios de Edge Microgateway en el clúster de Kubernetes. Este caso práctico te permite configurar cada instancia de micropuerta de enlace con su propio conjunto de complementos y parámetros. Por ejemplo:

  • El servicio A de Edge Microgateway solo requiere el complemento de protección contra aumentos de tráfico.
  • El servicio B de Edge Microgateway requiere la cuota y el complemento de OAuth, pero no la protección contra aumentos repentinos.

Para abordar este caso de uso, usa los espacios de nombres de Kubernetes. Por ejemplo, puedes implementar el servicio A de Edge Microgateway en el espacio de nombres foo y el servicio B de Edge Microgateway en el espacio de nombres bar.

En el siguiente ejemplo, Edge Microgateway configurado en la organización OrgA se implementa como un servicio en el espacio de nombres foo mediante la opción -n:

kubectl apply -f <(edgemicroctl -org=myorgA -env=test-key=0e3ecea28a64099410594406b30e54439af5265f8 -sec=e3919250bee37c69cb2e5b41170b488e1c1d -conf=/Users/joed/.edgemicro/orgA-test-config.yaml -svc=samples/helloworld/helloworld.yaml) -n foo

Del mismo modo, en el siguiente ejemplo, Edge Microgateway configurado en la organización OrgB se implementa como un servicio en el espacio de nombres bar mediante la opción -n:

kubectl apply -f <(edgemicroctl -org=myorgB -env=test-key=0e3ecea28a64099410594406b30e54439af5265f8 -sec=e3919250bee37c69cb2e5b41170b488e1c1d -conf=/Users/joed/.edgemicro/orgB-test-config.yaml -svc=samples/helloworld/helloworld.yaml) -n bar