您正在查看 Apigee Edge 文档。
前往 Apigee X 文档。 信息
添加自定义插件
您可以编写自定义插件,为微网关添加新功能。借助自定义插件,您可以以编程方式与流经微网关的请求和响应进行交互。
本部分介绍如何将插件打包并部署到 Kubernetes 集群中运行的 Edge Microgateway 实例。
本部分的其余内容假定您熟悉如何为标准 Edge Microgateway 设置编写和配置插件。如果尚未设置,请参阅开发自定义插件。
打包插件
如需打包自定义插件,请按以下步骤操作:
按照编写简单插件中的说明编写并测试插件。
将插件代码放置在正确的目录结构中。插件目录必须遵循一组结构。以下示例展示了您必须遵循的结构,其中
response-uppercase和request-headers是包含自定义插件代码的文件夹的名称(这些名称仅为示例,您的文件夹名称可能有所不同):plugin | |-- plugins | |- response-uppercase | |- index.js | |- package.json |- request-headers | | - index.js | - package.jsoncd到plugin文件夹。在
plugin文件夹中,压缩整个plugins文件夹:zip -r plugins.zip plugins/
创建 Docker 映像
- 在 zip 文件所在的同一目录中,创建一个名为
Dockerfile的新文件。 将以下代码添加到
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"]使用您的插件创建一个新的 Edge Microgateway Docker 映像,并将该映像推送到您的 Docker 注册表中。您可以使用所需的任何注册表,例如
docker.io或gcr.io:docker build -t edgemicroplugins .docker tag edgemicroplugins container-registry/your-project/edgemicropluginsdocker push container-registry/your-project/edgemicroplugins例如:
docker build -t edgemicroplugins .docker tag edgemicroplugins gcr.io/my-project/edgemicropluginsdocker push gcr.io/my-project/edgemicroplugins
更新 Edge Microgateway 配置
将插件添加到 Edge Microgateway 配置文件中。您可以在以下位置找到配置文件:
$HOME/.edgemicro/org-env-config.yaml
例如:
$HOME/.edgemicro/myorg-test-config.yaml
在以下示例配置中,添加了自定义插件 response-uppercase。
oauth 插件默认已存在。
edgemicro:
...
plugins:
sequence:
- oauth
- response-uppercase
更新 Kubernetes 集群
最后一步是将配置更改应用于 Kubernetes 集群。Kubernetes 将拉取您推送到容器注册表的新映像(其中包含插件代码),并将其用于任何新创建的 pod。
如果您将 Edge Microgateway 部署为服务
使用 edgemicroctl 命令注入更新后的 Edge Microgateway 配置:
使用新映像更新 Edge Microgateway 部署。例如:
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命令返回的密钥。config_file_path-edgemicro configure命令返回的 Edge Micro 配置文件的路径。container-registry- 您将映像推送到的 Docker 注册表。例如gcr.io或docker.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)
测试插件。调用该 API,看看是否获得预期行为。例如,对于“response uppercase”插件,响应文本会转换为全大写,如下所示:
curl $GATEWAY_IP -H 'x-api-key:3eqeedJRFLlCshwWBiXq4xKFoH1Se3xR'
输出:
HELLO WORLD
手动注入新配置
手动注入是一种简单直接的方法,您可以通过命令行注入新配置。
执行以下命令:
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命令返回的密钥。config_file_path-edgemicro configure命令返回的 Edge Micro 配置文件的路径。container-registry- 您将映像推送到的 Docker 注册表。例如gcr.io或docker.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)
测试插件。调用服务 API,看看是否获得预期行为。例如,对于“response uppercase”插件,响应文本会转换为全大写,如下所示:
curl $GATEWAY_IP -H 'x-api-key:3eqeedJRFLlCshwWBiXq4xKFoH1Se3xR'
输出:
HELLO WORLD
更改 Edge Microgateway 配置
在某些情况下,您可能需要修改 Edge Microgateway 配置。例如,您可能想要向 Edge Microgateway 添加新插件或更改配置参数。本部分介绍如何对在 Kubernetes 中运行的 Edge Microgateway 进行配置更改并应用这些更改。
创建配置文件
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指定
EDGEMICRO_ORG、EDGEMICRO_ENV、EDGEMICRO_KEY、EDGEMICRO_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'对组织和环境的 Edge Microgateway 配置文件进行更改:
$HOME/.edgemicro/your_org-your_env-config.yaml
对配置文件的内容进行两次 Base64 编码:
cat $HOME/.edgemicro/org-env-config.yaml | base64 | tr -d '\n' | base64 | tr -d '\n'
对运行服务的命名空间中的 Kubernetes 应用更改。
kubectl apply -f secret.yaml -n
现有微网关 pod 不会自动获取这些新更改;不过,新 pod 会获取这些更改。您可以删除现有 pod,以便部署创建可反映更改的新 pod。
服务示例
以下示例说明了如何使用新
获取 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删除
edge-microgatewaypod。kubectl delete pod edge-microgateway-57ccc7776b-g7nrg
输出示例:
pod "edge-microgateway-57ccc7776b-g7nrg" deleted再次获取 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 扩缩原则来扩缩部署。
扩缩服务部署
检查部署:
kubectl get deployments
输出示例:
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE edge-microgateway 1 1 1 1 18h helloworld 1 1 1 1 1d输出表明已部署一个副本。
将部署的副本数从 1 扩容到任意数量。在此示例中,
edge-microgateway服务已扩缩。kubectl scale deployment edge-microgateway --replicas=2
(可选)如果您想使用自动扩缩功能,请使用以下命令:
kubectl autoscale deployment edge-microgateway --cpu-percent=50 --min=1 --max=10
检查部署,验证扩缩是否已启用:
kubectl get deployments
输出示例:
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE edge-microgateway 2 2 2 2 18h helloworld 1 1 1 1 1d状态已更改为包含两个副本。
检查 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 Microgateway 配置
您可以将 Edge Microgateway 服务的多个实例部署并配置到 Kubernetes 集群。在此使用场景中,您可以为每个微网关实例配置自己的一组插件和参数。例如:
- Edge Microgateway 服务 A 仅需要突峰流量限制插件。
- Edge Microgateway 服务 B 需要配额和 OAuth 插件,但不需要突发流量限制。
为了解决此使用情形,请使用 Kubernetes 命名空间。例如,您可以将 Edge Microgateway 服务 A 部署到命名空间 foo,并将 Edge Microgateway 服务 B 部署到命名空间 bar。
在以下示例中,组织 OrgA 中配置的 Edge Microgateway 使用 -n 选项部署为命名空间 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
同样,在以下示例中,组织 OrgB 中配置的 Edge Microgateway 使用 -n 选项部署为命名空间 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