Kubernetes 集成任务

您正在查看的是 Apigee Edge 文档。
转到 Apigee X 文档
信息

添加自定义插件

您可以通过编写自定义插件向微网关添加新特性和功能。自定义插件可让您以编程方式与通过微网关的请求和响应进行交互。

本部分介绍如何将插件打包和部署到 Kubernetes 集群中运行的 Edge Microgate 实例。

本部分的其余内容假定您熟悉为标准 Edge Microgate 设置编写和配置插件的方法。如果没有,请参阅开发自定义插件

打包插件

如需打包自定义插件,请按以下步骤操作:

  1. 按照编写一个简单的插件中的说明编写并测试您的插件。

  2. 将插件代码放置在适当的目录结构中。插件目录必须遵循设定的结构。以下示例展示了您必须遵循的结构,其中 response-uppercaserequest-headers 是包含自定义插件代码的文件夹的名称(这些名称仅作为示例,您的文件夹名称可能有所不同):

    plugin
      |
      |-- plugins
        |
        |- response-uppercase
        |     |- index.js
        |     |- package.json
        |- request-headers
        |     | - index.js
              | - package.json
    
  3. cdplugin 文件夹。

  4. plugin 文件夹中,压缩整个 plugins 文件夹:

    zip -r plugins.zip plugins/

创建 Docker 映像

  1. 在该 zip 文件所在的目录中,创建一个名为 Dockerfile 的新文件。
  2. 将以下代码添加到 Dockerfile 并保存文件:

    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. 使用插件创建新的 Edge Microgate Docker 映像,并将该映像推送到 Docker 注册表。您可以使用所需的任何注册表,例如 docker.iogcr.io

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

    例如:

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

更新 Edge Microgate 配置

  1. 将插件添加到您的 Edge Microgate 配置文件。您可以在以下位置找到配置文件:

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

    例如:

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

在以下示例配置中,添加了自定义插件 response-uppercase。默认情况下,oauth 插件就在那里。

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

更新 Kubernetes 集群

最后一步是将配置更改应用到您的 Kubernetes 集群。Kubernetes 将使用您推送到 Container Registry 的插件代码拉取新映像,并将其用于任何新创建的 Pod。

如果您将 Edge Microgate 作为服务进行部署

使用 edgemicroctl 命令注入更新后的 Edge Microgate 配置:

  1. 使用新映像更新 Edge Microgate 部署。例如:

    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)

    其中:

    • your_organization - 您在 edgemicro configure 命令中指定的 Apigee 组织。
    • your_environment - 您在 edgemicro configure 命令中指定的环境。
    • configuration_key - edgemicro configure 命令返回的键。
    • configuration_secret - edgemicro configure 命令返回的 Secret。
    • config_file_path - 从 edgemicro configure 命令返回的 Edge Micro 配置文件的路径。
    • container-registry - 推送映像的 Docker 注册表。例如 gcr.iodocker.io
    • your_project_name - 推送 Docker 映像的 Docker 代码库的项目名称。
    • image_name - 您推送的 Docker 映像的名称。

    例如:

    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. 测试插件。调用该 API 以查看行为是否符合预期。例如,对于“response 网页上的大写”插件,响应文本会转换为全部大写,如下所示:

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

    输出:

    HELLO WORLD
    
手动注入新配置

手动注入是一种简单的方法,您需要从命令行注入新配置。

  1. 执行以下命令:

    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)

    其中:

    • your_org - 您在 edgemicro configure 命令中指定的 Apigee 组织。
    • your_env - 您在 edgemicro configure 命令中指定的环境。
    • your_key - edgemicro configure 命令返回的键。
    • your_secret - edgemicro configure 命令返回的 Secret。
    • config_file_path - 从 edgemicro configure 命令返回的 Edge Micro 配置文件的路径。
    • container-registry - 推送映像的 Docker 注册表。例如 gcr.iodocker.io
    • your_project_name - 推送 Docker 映像的 Docker 代码库的项目名称。
    • image_name - 您推送的 Docker 映像的名称。
    • service_deployment_file - 应用插件所适用的服务的部署文件的路径。例如:samples/helloworld/helloworld.yaml

    例如:

    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. 测试插件。调用服务 API 以查看行为是否符合预期。例如,对于“response 环境中大写字母”插件,响应文本会转换为全部大写,如下所示:

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

    输出:

    HELLO WORLD
    

更改 Edge Microgate 配置

在某些情况下,您可能需要修改 Edge Microgate 配置。例如,您可能想要向 Edge Microgate 添加新插件或更改配置参数。本部分介绍如何更改配置并将配置应用于 Kubernetes 中运行的 Edge Microgate 网关。

  1. 创建配置文件 secret.yaml,如下所示:

    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. 指定 EDGEMICRO_ORGEDGEMICRO_ENVEDGEMICRO_KEYEDGEMICRO_SECRET 的 base64 编码值:

    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. 对组织和环境的 Edge Microgate 配置文件进行更改:

    $HOME/.edgemicro/your_org-your_env-config.yaml
  4. 对配置文件内容进行两倍的 Base64 编码:

    cat $HOME/.edgemicro/org-env-config.yaml | base64 | tr -d '\n' | base64  | tr -d '\n'
  5. 在运行服务的命名空间上对 Kubernetes 应用更改。

    kubectl apply -f secret.yaml -n 

现有微网关 Pod 不会自动获取这些新更改;但是,新的 Pod 将获取这些更改。您可以删除现有 Pod,以便部署创建接收更改的新 Pod。

服务示例

以下示例说明了如何使用

  1. 获取 Pod。

    kubectl get pods

    输出示例:

    NAME                                 READY     STATUS    RESTARTS   AGE
    edge-microgateway-57ccc7776b-g7nrg   1/1       Running   0          19h
    helloworld-6987878fc4-cltc2          1/1       Running   0          1d
    
  2. 删除 edge-microgateway pod。

    kubectl delete pod edge-microgateway-57ccc7776b-g7nrg

    输出示例:

    pod "edge-microgateway-57ccc7776b-g7nrg" deleted
    
  3. 再次获取 Pod。一个新的 Pod 会启动并获取您的配置更改。

    kubectl get pods

    输出示例:

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

扩缩部署

本部分介绍如何使用 Kubernetes 扩缩原则来扩缩部署。

扩缩服务部署

  1. 检查部署:

    kubectl get deployments

    输出示例:

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

    输出结果表明已部署一个副本。

  2. 根据需要将部署从 1 个扩缩到任意数量的副本。在此示例中,edge-microgateway 服务进行了扩缩。

    kubectl scale deployment edge-microgateway --replicas=2
  3. (可选)如果要使用自动扩缩,请使用以下命令:

    kubectl autoscale deployment edge-microgateway --cpu-percent=50 --min=1 --max=10
  4. 检查部署以验证扩缩功能已启用:

    kubectl get deployments

    输出示例:

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

    状态已更改为包含两个副本。

  5. 检查 Pod:

    kubectl get pods

    输出示例:

    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
    

    输出结果显示两个副本都处于运行状态。

将命名空间用于多个 Edge Microgate 配置

您可以为 Kubernetes 集群部署和配置多个 Edge Microgate 服务实例。此使用场景可让您为每个微网关实例配置自己的一组插件和参数。例如:

  • Edge Microgate 服务 A 只需要使用高峰控制插件。
  • Edge Microgate 服务 B 需要配额和 OAuth 插件,但不需要高峰。

如需应对此使用场景,请使用 Kubernetes 命名空间。例如,您可以将 Edge Microgate 服务 A 部署到命名空间 foo,并将 Edge Microgate 服务 B 部署到命名空间 bar 中。

在以下示例中,使用 -n 选项在组织 OrgA 中配置的 Edge Microgate 作为服务部署到命名空间 foo

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

同样,在下面的示例中,使用 -n 选项在组织 OrgB 中配置的 Edge Microgate 作为服务部署到命名空间 bar

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