您正在查看 Apigee Edge 文档。
前往 Apigee X 文档。 信息
本主题介绍如何在 Docker 容器中运行 Edge Microgateway。本主题中介绍的步骤假定您对 Docker、Docker 命令以及 Edge Microgateway 的设置和配置有基本的了解。如需了解详情,请参阅 Docker 和 Edge Microgateway 的文档
前提条件
在 Docker 容器中运行 Edge Microgateway 之前,您必须执行以下任务:
为您的 Apigee 组织/环境配置 Edge Microgateway:
edgemicro configure -o your_org -e your_env -u your_username
如需详细了解配置,请参阅第 1 部分:配置 Edge Microgateway。
执行配置步骤后,找到配置文件。默认位置如下:
$HOME/.edgemicro/your_org-your_env-config.yaml
其中,
your_org和your_env是您运行edgemicro config命令时使用的组织和环境。在 Docker 容器中启动 Edge Microgateway 时,您将需要此文件。请确保您拥有运行
edgemicro config命令时返回的密钥和密钥凭据。例如:The following credentials are required to start edge micro key: d9c34e1aff68ed969273c016699eabf48780e4f652242e72fc88a43e21252cb0 secret: 3bc95a71c86a3c8ce04537fbcb788158731t51dfc6cdec13b7c05aa0bd969430在 Docker 容器中启动 Edge Microgateway 之前,您需要创建(或已创建)进行经过身份验证的 API 代理调用所需的 Apigee Edge 实体。这些实体包括支持 Edge Microgateway 的代理、API 产品、开发者和开发者应用。如需查看完整说明,请参阅在 Apigee Edge 上创建实体。
将 Edge Micro 作为 Docker 容器运行
下载 Edge Microgateway 的 Docker 映像:
docker pull gcr.io/apigee-microgateway/edgemicro:latest
在继续执行后续步骤之前,请务必先完成前提条件部分中的所有步骤。
运行以下命令,对位于
$HOME/.edgemicro中的 Edge Microgateway 配置文件进行 base64 编码:export EDGEMICRO_CONFIG=`base64 $HOME/.edgemicro/your_org-your_env-config.yaml`
其中,
your_org和your_env是您运行edgemicro config命令时使用的组织和环境。请记得用反引号 (`) 将命令括起来。例如:
export EDGEMICRO_CONFIG=`base64 $HOME/.edgemicro/docs-test-config.yaml`
以容器形式运行 Edge Microgateway。该命令会设置多个环境变量,供容器运行时用于启动 Edge Microgateway:
docker run -P -p 8000:8000 -d --name edgemicro \ -v /var/tmp:/opt/apigee/logs \ -e EDGEMICRO_PROCESSES=1 \ -e EDGEMICRO_ORG=your_org \ -e EDGEMICRO_ENV=your_env \ -e EDGEMICRO_KEY=your_key \ -e EDGEMICRO_SECRET=your_secret \ -e "EDGEMICRO_CONFIG=$EDGEMICRO_CONFIG" \ -e SERVICE_NAME=edgemicro \ --security-opt=no-new-privileges \ --cap-drop=ALL \ gcr.io/apigee-microgateway/edgemicro:latest
参数
参数 说明 -P将所有公开的端口发布到主机。另请参阅 Docker 运行参考。 -p明确映射单个端口或端口范围。另请参阅 Docker 运行参考。 -d在分离模式下运行。另请参阅 Docker 运行参考。 -v, --volume指定卷装载。请注意,如果您将 Edge Microgateway 配置为在 Docker 容器中使用 TLS,则在装载日志文件目录时,必须公开端口 8443。另请参阅卷 [共享文件系统]。另请参阅在 Docker 容器中使用 TLS。 EDGEMICRO_ORG您用于配置 Edge Microgateway 的 Apigee 组织的名称。 EDGEMICRO_ENV您用于配置 Edge Microgateway 的 Apigee 环境的名称。 EDGEMICRO_PROCESSES要启动的进程数。 EDGEMICRO_KEY配置 Edge Microgateway 时返回的密钥。 EDGEMICRO_SECRET配置 Edge Microgateway 时返回的 Secret。 EDGEMICRO_CONFIG包含 base64 编码的 Edge Microgateway 配置文件。 SERVICE_NAME如果您使用的是 Kubernetes,系统会自动填充此参数。否则,您可以随意设置。如果您未指定任何内容,则服务名称会设置为 default。DEBUG设置为 *可启用调试。HTTP_PROXYHTTPS_PROXY当 Edge Microgateway 在防火墙后运行且网关无法与 Apigee Edge 通信时使用。如需了解详情,请参阅在公司防火墙后设置 Edge Microgateway。 例如:
HTTP_PROXY=http://10.203.0.1:5187/NO_PROXYEdge Microgateway 不应代理到的网域的列表(以英文逗号分隔)。 如需了解详情,请参阅在公司防火墙后设置 Edge Microgateway。 例如:
localhost,127.0.0.1,localaddress,.localdomain.comNODE_EXTRA_CA_CERTS(可选)如果您使用的 CA 未受到 Node.js 的默认信任,请使用此参数。将此参数的值设置为包含一个或多个 PEM 格式的受信任证书的文件的路径。有关详情,请参阅 TLS 证书。 --security-opt(可选)设置所需的 Docker 安全选项。请参阅 Docker 文档中的安全配置。 --cap-drop(可选)设置容器中允许的 Linux 功能的限制。请参阅 Docker 文档中的运行时特权和 Linux 功能。 例如:
docker run -P -p 8000:8000 -d --name edgemicro \ -v /var/tmp:/opt/apigee/logs \ -e EDGEMICRO_PROCESS=1 \ -e EDGEMICRO_ORG=docs \ -e EDGEMICRO_ENV=test \ -e EDGEMICRO_KEY=d9c34e1aff68ed969273b016699eabf48780e4f652242e72fc88a23e21252cb0 \ -e EDGEMICRO_SECRET=3bc95a71c86a3c8ce04137fbcb788158731t51dfc6cdec13b7c05aa0bd969430 \ -e "EDGEMICRO_CONFIG=$EDGEMICRO_CONFIG" \ -e SERVICE_NAME=edgemicro \ --security-opt=no-new-privileges \ --cap-drop=ALL \ gcr.io/apigee-microgateway/edgemicro
如需检查容器是否正在运行,请执行以下操作:
docker ps
您应看到类似于以下内容的输出:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 8b92e082ea9c edgemicro "/tmp/entrypoint.sh" 12 minutes ago Up 12 minutes 0.0.0.0:8000->8000/tcp, 0.0.0.0:32775->8443/tcp edgemicro
测试 API 调用
在容器中启动 Edge Microgateway 后,您可以向其发出 API 调用。
例如,如果您的 API 的基本路径为 /hello:
http://localhost:8000/hello
示例输出:
{"error":"missing_authorization","error_description":"Missing Authorization header"}
如果您看到此响应,则表示 Edge Microgateway 已成功处理 API 调用。不过,默认情况下,Edge Microgateway 需要使用 API 密钥进行身份验证。在下一部分中,您将使用有效的 API 密钥测试 API。
使用有效的 API 密钥测试 API
在 Edge 界面中,前往您之前创建的开发者应用。在“开发者应用”页面中,显示使用方密钥并复制该密钥。此值是 API 密钥。您将使用此密钥进行经过身份验证的 API 调用。
使用 x-api-key 标头调用 API,如下所示。您从开发者应用复制的使用方密钥值就是 API 密钥。默认情况下,Edge Microgateway 希望您在名为 x-api-key 的标头中传递密钥,如下所示:
curl -i http://localhost:8000/hello -H "x-api-key:apikey"
例如:
curl -i http://localhost:8000/hello -H "x-api-key:PydUKRDGIXRqF2xh4usn1FLHbhGKVIz"
如果您想详细了解如何通过 Edge Microgateway 使用 API 密钥和 OAuth 令牌进行经过身份验证的 API 调用,请参阅第 4 部分:保护 Edge Microgateway。
停止 Edge Microgateway
使用以下 Docker 命令停止 Edge Microgateway:
docker stop edgemicro
重启 Edge Microgateway
停止 Edge Microgateway 后,您可以使用以下 Docker 命令重启它:
docker start edgemicro
在 Docker 容器中使用 TLS
本部分介绍如何为在 Docker 容器中运行的 Edge Microgateway 配置 TLS。您可以将 Edge Microgateway 服务器配置为使用 TLS 处理传入的请求(北向),还可以将 Edge Microgateway 配置为 TLS 客户端,以处理发往目标端点的出站请求(南向)。
证书文件的放置位置
运行 Edge Microgateway 的 Docker 容器在 /opt/apigee/.edgemicro 上有一个装载点。将 Edge Microgateway 配置为使用 TLS 证书时,您可以在该装载点上提供证书文件,并在 Edge Microgateway 配置文件中引用这些文件。此配置文件通常位于 $HOME/.edgemicro 目录中,名为 your_org-your_env-config.yaml。例如:
...
edgemicro:
ssl:
key: /opt/apigee/.edgemicro/southbound/tls.key
cert: /opt/apigee/.edgemicro/southbound/tls.crt
...
使用不受 Node.js 信任的 CA
如果您使用的证书授权机构 (CA) 默认不受 Node.js 信任(例如自签名证书),请考虑在运行容器时使用参数 NODE_EXTRA_CA_CERTS。
将此参数设置为包含一个或多个 PEM 格式的可信证书的文件的路径。如需了解此参数的使用方式,请参阅示例如何配置北向 TLS 和如何配置南向 TLS。
例如:
docker run -P -p 8443:8443 -d --name edgemicro \
-v $HOME/.edgemicro:/opt/apigee/.edgemicro \
-v $HOME/.edgemicro:/opt/apigee/logs \
-e NODE_EXTRA_CA_CERTS=/opt/apigee/.edgemicro/rootca.pem \
-e EDGEMICRO_PORT=8443 \
-e EDGEMICRO_ORG=docs \
-e EDGEMICRO_ENV=test \
-e EDGEMICRO_KEY=ac36574905fb54fdae65fc5433e831bec2680efb98220a355f2e917e52973c \
-e EDGEMICRO_SECRET=aac81dff6c326eaa222d53c15c8841fa78ea863bf4472568c9ce2d80a3bc56 \
-e "EDGEMICRO_CONFIG=$EDGEMICRO_CONFIG" \
--link helloworld:helloworld gcr.io/apigee-microgateway/edgemicro
另请参阅将 Edge Micro 作为 Docker 容器运行。
关闭 TLS 验证
虽然不建议这样做,但在某些情况下,您可能希望为在容器中运行的 Edge Microgateway 停用 TLS 验证。默认情况下,Edge Microgateway Docker 容器中未内置用于停用 TLS 的功能。若要完成此任务,您必须为 Edge Microgateway 创建自定义 Docker 映像。以下是构建自定义映像和关闭 TLS 验证的一般说明。
从
https://github.com/apigee-internal/microgateway克隆或下载 Edge Microgateway 源代码库。cd到源代码目录中的microgateway/kubernetes/docker/edgemicro目录。例如:
cd $HOME/git/microgateway/kubernetes/docker/edgemicro打开文件
entrypoint.sh并修改代码,以接受NODE_TLS_REJECT_UNAUTHORIZED环境变量。稍后,当您运行容器时,您将为此变量指定一个值。构建 Docker 容器:
docker build -t edgemicro .运行容器时,请指定
-e NODE_TLS_REJECT_UNAUTHORIZED = 1选项。例如:
docker run -P -p 8443:8443 -d --name edgemicro \
-v $HOME/.edgemicro:/opt/apigee/.edgemicro \
-v $HOME/.edgemicro:/opt/apigee/logs \
-e NODE_TLS_REJECT_UNAUTHORIZED = 1 \
-e EDGEMICRO_PORT=8443 \
-e EDGEMICRO_ORG=docs \
-e EDGEMICRO_ENV=test \
-e EDGEMICRO_KEY=ac36574905fb54fdae65fc5433e831bec2680efb98220a355f2e917e52973c \
-e EDGEMICRO_SECRET=aac81dff6c326eaa222d53c15c8841fa78ea863bf4472568c9ce2d80a3bc56 \
-e "EDGEMICRO_CONFIG=$EDGEMICRO_CONFIG" \
--link helloworld:helloworld gcr.io/apigee-microgateway/edgemicro
示例:如何配置北向 TLS
本部分介绍了如何在 Edge Microgateway 服务器上设置北向(入站)TLS 连接。北向 TLS 允许客户端在向 Edge Microgateway 发出 API 调用时使用 HTTPS。 以下示例使用自签名证书。
1. 初始设置步骤
- 在您的系统中找到
openssl.cnf文件。例如/etc/ssl/openssl.cnf。 - 打开
opensssl.cnf文件进行修改。 确保您的配置文件中包含
req_extensions。例如,您的文件中应包含类似如下所示的信息:[ req ] ... req_extensions = v3_req ... [ v3_req ] extendedKeyUsage = serverAuth, clientAuth, codeSigning, emailProtection basicConstraints = CA:FALSE keyUsage = nonRepudiation, digitalSignature, keyEncipherment将以下节添加到
openssl.cnf以生成正确的 SNI 属性:[ alt_names ] DNS.1 = www.example.com DNS.2 = example.com DNS.3 = localhost DNS.4 = localhost.localdomain DNS.5 = 127.0.0.1 DNS.6 = ::1 DNS.7 = fe80::1opensssl.cnf文件示例:[ req ] distinguished_name = req_distinguished_name attributes = req_attributes req_extensions = v3_req [ v3_req ] extendedKeyUsage = serverAuth, clientAuth, codeSigning, emailProtection basicConstraints = CA:FALSE keyUsage = nonRepudiation, digitalSignature, keyEncipherment [ req_distinguished_name ] countryName = Country Name (2 letter code) countryName_min = 2 countryName_max = 2 stateOrProvinceName = State or Province Name (full name) localityName = Locality Name (eg, city) 0.organizationName = Organization Name (eg, company) organizationalUnitName = Organizational Unit Name (eg, section) commonName = Common Name (eg, fully qualified host name) commonName_max = 64 emailAddress = Email Address emailAddress_max = 64 [ req_attributes ] challengePassword = A challenge password challengePassword_min = 4 challengePassword_max = 20 [ alt_names ] DNS.1 = www.example.com DNS.2 = example.com DNS.3 = localhost DNS.4 = localhost.localdomain DNS.5 = 127.0.0.1 DNS.6 = ::1 DNS.7 = fe80::1如果您尚未初始化和配置 Edge Microgateway,请按照前提条件部分中的步骤操作。完成后,您应该已创建 Edge Microgateway 感知代理、API 产品、开发者和开发者应用。此外,您还应该已运行
edgemicro configure命令并收到密钥和 Secret。
2. 生成自签名证书
接下来,生成建立 TLS 所需的证书和密钥:
cd到$HOME/.edgemicro目录。创建以下 bash 脚本。您可以随意为其命名。例如:
keygen.sh。#!/bin/bash # generate ca openssl genrsa -out rootca.key 2048 openssl req -x509 -new -nodes -key rootca.key -sha256 -days 1024 -out rootca.pem # generate key openssl genrsa -out tls.key 2048 openssl req -new -key tls.key -out tls.csr # sign cert openssl x509 -req -in tls.csr -CA rootca.pem -CAkey rootca.key -CAcreateserial -out tls.crt -days 1024 -sha256 -extensions 'v3_req' -extfile path/openssl.cnf
在 bash 文件中,确保
openssl.cnf文件的路径正确无误。执行 bash 文件。系统会提示您输入证书信息。请务必为“通用名称”使用
localhost。检查是否已创建以下文件:
rootca.keyrootca.pemtls.keytls.csrrootca.srltls.crt
3. 修改 Edge Microgateway 配置文件
在编辑器中打开 Edge Micro 配置文件。例如:
vi $HOME/.edgemicro/myorg-test-config.yaml按如下方式修改
edgemicrostanza。请注意,您正在更改port和ssl属性:edge_config: ... edgemicro: port: 8443 max_connections: 1000 config_change_poll_interval: 600 ssl: key: /opt/apigee/.edgemicro/tls.key cert: /opt/apigee/.edgemicro/tls.crt passphrase: admin123 rejectUnauthorized: true requestCert: false logging: ...执行以下命令,对位于
$HOME/.edgemicro中的 Edge Microgateway 配置文件进行 base64 编码:export EDGEMICRO_CONFIG=`base64 $HOME/.edgemicro/your_org-your_env-config.yaml`
其中,
your_org和your_env是您运行edgemicro config命令时使用的组织和环境。请记得用反引号 (`) 将命令括起来。例如:
export EDGEMICRO_CONFIG=`base64 $HOME/.edgemicro/docs-test-config.yaml`
另请参阅将 Edge Micro 作为 Docker 容器运行。
4. 运行容器
执行以下命令,以运行包含 Edge Microgateway 的 Docker 容器:
docker run -P -p 8443:8443 -d --name edgemicro \ -v path_to_your_edgemicro_dir:/opt/apigee/.edgemicro \ -v path_to_your_logs_dir:/opt/apigee/logs \ -e NODE_EXTRA_CA_CERTS=/opt/apigee/.edgemicro/rootca.pem \ -e EDGEMICRO_PORT=8443 \ -e EDGEMICRO_ORG=$EDGEMICRO_ORG \ -e EDGEMICRO_ENV=$EDGEMICRO_ENV \ -e EDGEMICRO_KEY=$EDGEMICRO_KEY \ -e EDGEMICRO_SECRET=$EDGEMICRO_SECRET \ -e "EDGEMICRO_CONFIG=$EDGEMICRO_CONFIG" \ gcr.io/apigee-microgateway/edgemicro:latest
请注意该命令中使用的以下参数;这些参数与将 Edge Micro 作为 Docker 容器运行中所述的基本命令不同。
- 将
port设置为8443。 - 卷挂载用于挂载密钥和证书文件。
NODE_EXTRA_CA_CERTS变量用于添加自定义 CA(在自签名证书的情况下需要这样做)。
- 将
5. 测试 TLS 配置
执行以下 c网址 命令以测试设置。将您的基本路径和 API 密钥替换到命令中。以下示例假定您位于
rootca.pem所在的目录中,并且您创建的代理具有基本路径/hello:curl -v https://localhost:8443/hello --cacert rootca.pem \ -H "x-api-key: Az82fdnfONVCOOE4NKhajxAboDgA3FAo"详细的 c网址 输出显示了 TLS 握手的每个步骤。如果您看到 HTTP 200 响应,则表示配置成功:
* Trying ::1...ey:Az82fdnfONVCOOE4NKhajxAboDgA3FAo" * TCP_NODELAY set * Connected to localhost (::1) port 8443 (#0) * ALPN, offering h2 * ALPN, offering http/1.1 * Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH * successfully set certificate verify locations: * CAfile: rootca.pem CApath: none * TLSv1.2 (OUT), TLS handshake, Client hello (1): * TLSv1.2 (IN), TLS handshake, Server hello (2): * TLSv1.2 (IN), TLS handshake, Certificate (11): * TLSv1.2 (IN), TLS handshake, Server key exchange (12): * TLSv1.2 (IN), TLS handshake, Server finished (14): * TLSv1.2 (OUT), TLS handshake, Client key exchange (16): * TLSv1.2 (OUT), TLS change cipher, Client hello (1): * TLSv1.2 (OUT), TLS handshake, Finished (20): * TLSv1.2 (IN), TLS change cipher, Client hello (1): * TLSv1.2 (IN), TLS handshake, Finished (20): * SSL connection using TLSv1.2 / ECDHE-RSA-AES128-GCM-SHA256 * ALPN, server accepted to use http/1.1 * Server certificate: * subject: C=US; ST=CO; L=Boulder; O=Docs; OU=Docs; CN=localhost; emailAddress=docs@apigee.com * start date: Dec 14 22:35:28 2018 GMT * expire date: Oct 3 22:35:28 2021 GMT * common name: localhost (matched) * issuer: C=US; ST=CO; L=Boulder; O=Docs; OU=Docs; CN=localhost; emailAddress=docs@apigee.com * SSL certificate verify ok. > GET /hello HTTP/1.1 > Host: localhost:8443 > User-Agent: curl/7.54.0 > Accept: */* > x-api-key:Az82fdnfaONVCOE4NKhajxAboDA3FAo > < HTTP/1.1 200 OK < x-powered-by: Apigee < access-control-allow-origin: * < x-frame-options: ALLOW-FROM RESOURCE-URL < x-xss-protection: 1 < x-content-type-options: nosniff < content-type: text/plain; charset=utf-8 < etag: W/"d-GHB1ZrJKk/wdVTdB/jgBsw" < date: Fri, 14 Dec 2018 22:43:13 GMT < via: 1.1 google < alt-svc: clear < x-response-time: 1325 < Connection: keep-alive < Transfer-Encoding: chunked < * Connection #0 to host localhost left intact Hello, Guest!
示例:如何配置南向 TLS
本部分介绍了如何在 Edge Microgateway 服务器和后端目标应用之间设置南向(出站)TLS 连接。以下示例使用自签名证书。
1. 初始设置步骤
- 在您的系统中找到
openssl.cnf文件。例如/etc/ssl/openssl.cnf。 - 打开
opensssl.cnf文件进行修改。 确保您的配置文件中包含
req_extensions。例如,您的文件中应包含类似如下所示的信息:[ req ] ... req_extensions = v3_req ... [ v3_req ] extendedKeyUsage = serverAuth, clientAuth, codeSigning, emailProtection basicConstraints = CA:FALSE keyUsage = nonRepudiation, digitalSignature, keyEncipherment将以下节添加到
openssl.cnf以生成正确的 SNI 属性:[ alt_names ] DNS.1 = helloworld DNS.2 = localhost DNS.3 = localhost.localdomain DNS.4 = 127.0.0.1 DNS.5 = ::1 DNS.6 = fe80::1opensssl.cnf文件示例:[ req ] distinguished_name = req_distinguished_name attributes = req_attributes req_extensions = v3_req [ v3_req ] extendedKeyUsage = serverAuth, clientAuth, codeSigning, emailProtection basicConstraints = CA:FALSE keyUsage = nonRepudiation, digitalSignature, keyEncipherment [ req_distinguished_name ] countryName = Country Name (2 letter code) countryName_min = 2 countryName_max = 2 stateOrProvinceName = State or Province Name (full name) localityName = Locality Name (eg, city) 0.organizationName = Organization Name (eg, company) organizationalUnitName = Organizational Unit Name (eg, section) commonName = Common Name (eg, fully qualified host name) commonName_max = 64 emailAddress = Email Address emailAddress_max = 64 [ req_attributes ] challengePassword = A challenge password challengePassword_min = 4 challengePassword_max = 20 [ alt_names ] DNS.1 = helloworld DNS.2 = localhost DNS.3 = localhost.localdomain DNS.4 = 127.0.0.1 DNS.5 = ::1 DNS.6 = fe80::1运行
edgemicro configure命令:edgemicro configure -o your_org -e your_env -u your_username
如需详细了解配置,请参阅第 1 部分:配置 Edge Microgateway。
复制从
edgemicro configure返回的密钥和密码凭据。您需要这些值才能运行容器。例如:The following credentials are required to start edge micro key: d9c34e1aff68ed969273c016699eabf48780e4f652242e72fc88a43e21252cb0 secret: 3bc95a71c86a3c8ce04537fbcb788158731t51dfc6cdec13b7c05aa0bd969430
2. 创建 Node.js 目标应用
cd到.edgemicro目录。创建以下 bash 脚本。您可以随意为其命名。例如:
keygen.sh。#!/bin/bash # generate ca openssl genrsa -out rootca.key 2048 openssl req -x509 -new -nodes -key rootca.key -sha256 -days 1024 -out rootca.pem # generate key openssl genrsa -out tls.key 2048 openssl req -new -key tls.key -out tls.csr # sign cert openssl x509 -req -in tls.csr -CA rootca.pem -CAkey rootca.key -CAcreateserial -out tls.crt -days 1024 -sha256 -extensions 'v3_req' -extfile path/openssl.cnf
在 bash 文件中,确保
openssl.cnf文件的路径正确无误。执行 bash 文件。系统会提示您输入证书信息。请务必为“通用名称”使用
hellworld。检查是否已创建以下文件:
rootca.keyrootca.pemtls.keytls.csrrootca.srltls.crt
创建一个名为
server.js的新文件。'use strict'; const express = require('express'); const https = require('https'); const fs = require('fs'); const options = { key: fs.readFileSync("tls.key"), cert: fs.readFileSync("tls.crt") }; // Constants const PORT = 9443; const HOST = '0.0.0.0'; // App const app = express(); app.get('/', (req, res) => { res.send('Hello world\n'); }); https.createServer(options, app).listen(PORT);在
server.js所在的目录中创建一个package.json文件。例如:{ "name": "helloworld", "version": "1.0.0", "description": "", "main": "server.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1", "start": "node server.js" }, "author": "", "license": "ISC", "dependencies": { "express": "^4.16.4", "fs": "0.0.1-security", "https": "^1.0.0" } }运行
npm install以获取依赖项。在与
server.js相同的目录中创建一个新的 Dockerfile,其中WORKDIR是 Node.js 应用根目录的路径:FROM node:8-alpine WORKDIR path-to-your-node-app COPY package*.json ./ RUN npm install COPY . . EXPOSE 9443 CMD [ "npm", "start" ]
构建 Docker 映像:
docker build -t helloworld .启动示例应用:
docker run -P -p 9443:9443 --name helloworld helloworld
3. 在 Apigee Edge 上创建实体
使用这些设置创建 Edge Microgateway 感知代理。如需了解详情,请参阅在 Edge 上创建支持 Edge Microgateway 的 API 代理。
- 代理名称:
edgemicro_local - 修订版本:
1 - 基本路径:
/local - 目标:
https://helloworld:9443
- 代理名称:
创建 API 产品。如需了解详情,请参阅创建商品。
创建开发者。如需了解详情,请参阅创建开发者。
创建开发者应用。如需了解详情,请参阅创建开发者应用
4. 运行容器
在编辑器中打开 Edge Micro 配置文件。例如:
vi $HOME/.edgemicro/myorg-test-config.yaml按如下方式修改
edgemicrostanza。请注意,您正在更改port和ssl属性:edge_config: ... edgemicro: port: 8443 max_connections: 1000 config_change_poll_interval: 600 ssl: key: /opt/apigee/.edgemicro/tls.key cert: /opt/apigee/.edgemicro/tls.crt passphrase: admin123 rejectUnauthorized: true requestCert: false logging: ...执行以下命令,对位于
$HOME/.edgemicro中的 Edge Microgateway 配置文件进行 base64 编码:export EDGEMICRO_CONFIG=`base64 $HOME/.edgemicro/your_org-your_env-config.yaml`
其中,
your_org和your_env是您运行edgemicro config命令时使用的组织和环境。请记得用反引号 (`) 将命令括起来。例如:
export EDGEMICRO_CONFIG=`base64 $HOME/.edgemicro/docs-test-config.yaml`
运行以下命令,以在 Docker 容器中启动 Edge Microgateway。
docker run -P -p 8443:8443 -d --name edgemicro \ -v path_to_your_edgemicro_dir:/opt/apigee/.edgemicro \ -v path_to_your_logs_dir:/opt/apigee/logs \ -e EDGEMICRO_PORT=8443 \ -e EDGEMICRO_ORG=$EDGEMICRO_ORG \ -e EDGEMICRO_ENV=$EDGEMICRO_ENV \ -e EDGEMICRO_KEY=$EDGEMICRO_KEY \ -e EDGEMICRO_SECRET=$EDGEMICRO_SECRET \ -e "EDGEMICRO_CONFIG=$EDGEMICRO_CONFIG" \ --link helloworld:helloworld gcr.io/apigee-microgateway/edgemicro
5. 测试 TLS 配置
执行以下 c网址 命令以测试设置。将您在支持微网关的代理中使用的基本路径和从您在 Apigee Edge 上创建的开发者应用中获得的 API 密钥替换为相应的值。例如:
curl https://localhost:8443/local -k -H "x-api-key: xxxx" -v您应该会看到以下错误:
... * subject: C=CA; ST=Ontario; L=Toronto; O=Google Canada; OU=Google Cloud Platform; CN=edgemicro; emailAddress=srinandans@google.com * start date: Dec 10 02:12:22 2018 GMT * expire date: Sep 29 02:12:22 2021 GMT * issuer: C=CA; ST=Ontario; L=Toronto; O=Google Canada; OU=Google Cloud Platform; CN=edgemicro; emailAddress=srinandans@google.com * SSL certificate verify result: unable to get local issuer certificate (20), continuing anyway. > GET /local HTTP/1.1 > Host: localhost:8443 > User-Agent: curl/7.54.0 > Accept: */* > x-api-key: 9fVC65pFj8LrmlPmVyxFjx4KgAHTxqSd > < HTTP/1.1 502 Bad Gateway < Date: Wed, 12 Dec 2018 05:25:01 GMT < Connection: keep-alive < Content-Length: 93 < * Connection #0 to host localhost left intact {"message":"unable to verify the first certificate","code":"UNABLE_TO_VERIFY_LEAF_SIGNATURE"}重新运行 Edge Microgateway,但这次添加
NODE_EXTRA_CA_CERTS变量。docker run -P -p 8443:8443 -d --name edgemicro \ -v path_to_your_edgemicro_dir:/opt/apigee/.edgemicro \ -v path_to_your_logs_dir:/opt/apigee/logs \ -e NODE_EXTRA_CA_CERTS=/opt/apigee/.edgemicro/rootca.pem \ -e EDGEMICRO_PORT=8443 \ -e EDGEMICRO_ORG=$EDGEMICRO_ORG \ -e EDGEMICRO_ENV=$EDGEMICRO_ENV \ -e EDGEMICRO_KEY=$EDGEMICRO_KEY \ -e EDGEMICRO_SECRET=$EDGEMICRO_SECRET \ -e "EDGEMICRO_CONFIG=$EDGEMICRO_CONFIG" \ --link helloworld:helloworld gcr.io/apigee-microgateway/edgemicro
执行以下 c网址 命令。像之前一样替换您的基本路径和 API 密钥。例如:
curl https://localhost:8443/local -k -H "x-api-key: xxxx" -v检查输出。成功后,您将收到 HTTP 200 状态响应:
... > GET /local HTTP/1.1 > Host: localhost:8443 > User-Agent: curl/7.54.0 > Accept: */* > x-api-key: 9fVC65pFj8LrmlPmVyxFjx4KgAHTxqSd > < HTTP/1.1 200 OK < x-powered-by: Express < content-type: text/html; charset=utf-8 < etag: W/"c-M6tWOb/Y57lesdjQuHeB1P/qTV0" < date: Wed, 12 Dec 2018 05:49:28 GMT < x-response-time: 421 < Connection: keep-alive < Transfer-Encoding: chunked < Hello world
添加自定义插件
您可以编写自定义插件,为微网关添加新功能。借助自定义插件,您可以以编程方式与流经微网关的请求和响应进行交互。
您可以通过以下两种方式将插件部署到在 Docker 容器中运行的 Edge Microgateway 实例:
本部分的其余内容假定您熟悉如何为标准 Edge Microgateway 设置编写和配置插件。如果尚未设置,请参阅开发自定义插件。
方案 A:将插件目录装载到卷上
(在 v.2.5.27 中添加)通过卷装载添加插件的步骤与向 Edge Microgateway 添加任何自定义插件所需的步骤类似。运行 Docker 容器时,您可以将本地系统上的插件目录(卷)装载到容器装载点 /opt/apigee/plugins。然后,在 Edge Microgateway 配置文件中指定本地卷目录。
以下步骤说明了如何使用 Docker 装载点来包含自定义插件。
停止 Edge Microgateway:
edgemicro stop为自定义插件创建目录。例如,创建
$HOME/edgemicro/custom/plugins将自定义插件目录添加到 Edge Microgateway 配置文件。例如:
plugins: dir: $HOME/edgemicro/custom/plugins sequence: - oauth - response-uppercase ````按照编写简单插件中的说明编写并测试插件。请务必将插件代码放置在正确的目录结构中。例如:
custom | |-- plugins | |- response-uppercase | |- index.js | |- package.json |- request-headers | | - index.js | - package.json运行 Docker 容器,使用的命令类似于以下命令,其中您使用
-v选项将插件目录装载到 Docker 卷上。在以下示例命令中,插件目录$HOME/edgemicro/custom/plugins(自定义插件所在的位置)映射到容器的装载点/opt/apigee/plugins:docker run -P -p 8000:8000 -d --name edgemicro \ -v /var/tmp:/opt/apigee/logs \ -v $HOME/edgemicro/custom/plugins:/opt/apigee/plugins \ -e EDGEMICRO_PROCESSES=1 \ -e EDGEMICRO_ORG=jdoe \ -e EDGEMICRO_ENV=test \ -e EDGEMICRO_KEY=39c4b561100cd7f258768d1072f3e1d7c17b5f36a18fe89972bb5c9ce7e58fb \ -e EDGEMICRO_SECRET=f5f9e239a38b4e6cc99c2aa067716a84aebdcff9580a7925fc500e402b1a5fa \ -e "EDGEMICRO_CONFIG=$EDGEMICRO_CONFIG" \ -e SERVICE_NAME=edgemicro \ --security-opt=no-new-privileges \ --cap-drop=ALL gcr.io/apigee-microgateway/edgemicro:latest调用您的 API 以测试插件。
如需了解详情,请参阅卷 [共享文件系统]。
方案 B:将插件构建到容器中
在此选项中,您将插件构建到容器中。
1. 打包插件
按照编写简单插件中的说明编写并测试插件。
将插件代码放置在正确的目录结构中。插件目录必须遵循一组结构。以下示例展示了您必须遵循的结构,其中
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/
2. 创建 Docker 映像
接下来,创建一个 Dockerfile,以将插件代码添加到 Edge Microgateway 映像。
- 在 zip 文件所在的同一目录中,创建一个名为
Dockerfile的新文件。 将以下代码添加到
Dockerfile并保存文件:USER root RUN apk update && \ apk upgrade && \ apk add zipapk add zip && \ mkdir /opt/apigee/customplugins && \ chown apigee:apigee /opt/apigee/customplugins COPY plugins.zip /opt/apigee/customplugins RUN su - apigee -c "unzip /opt/apigee/customplugins/plugins.zip -d /opt/apigee/customplugins" EXPOSE 8000 EXPOSE 8443 USER apigee ENTRYPOINT ["entrypoint"]使用您的插件创建新的 Edge Microgateway Docker 映像:
docker build -t image-name .例如:
docker build -t edgemicroplugins .
3. 更新 Edge Microgateway 配置
现在,插件已打包完毕,您需要将它们添加到 Edge Microgateway 配置文件中。
在编辑器中打开 Edge Microgateway 配置文件:
$HOME/.edgemicro/org-env-config.yaml
例如:
vi $HOME/.edgemicro/myorg-test-config.yaml
将插件目录添加到配置文件中。在以下示例中,
dir属性指定了插件代码的位置(您在 Dockerfile 中指定的位置)。您还必须指定插件目录的名称,在下面的示例中为response-uppercase。edgemicro: ... plugins: dir: /opt/apigee/plugins sequence: - oauth - response-uppercase
4. 启动微网关
最后,您必须在容器中启动微网关。
运行以下命令,对位于
$HOME/.edgemicro中的 Edge Microgateway 配置文件进行 base64 编码:export EDGEMICRO_CONFIG=`base64 $HOME/.edgemicro/your_org-your_env-config.yaml`
其中,
your_org和your_env是您运行edgemicro config命令时使用的组织和环境。请记得用反引号 (`) 将命令括起来。例如:
export EDGEMICRO_CONFIG=`base64 $HOME/.edgemicro/docs-test-config.yaml`
以容器形式运行 Edge Microgateway。该命令会设置多个环境变量,供容器运行时用于启动 Edge Microgateway:
docker run -P -p 8000:8000 -d --name edgemicroplugins \ -e EDGEMICRO_PLUGIN_DIR=/opt/apigee/customplugins/plugins \ -e EDGEMICRO_ORG=your_org \ -e EDGEMICRO_ENV=your_env \ -e EDGEMICRO_KEY=your_key \ -e EDGEMICRO_SECRET=your_secret \ -e "EDGEMICRO_CONFIG=$EDGEMICRO_CONFIG" \ -e SERVICE_NAME=edgemicroplugins image_name
例如:
docker run -P -p 8000:8000 -d --name edgemicroplugins \ -e EDGEMICRO_PLUGIN_DIR=/opt/apigee/customplugins/plugins \ -e EDGEMICRO_ORG=docs \ -e EDGEMICRO_ENV=test \ -e EDGEMICRO_KEY=d9c34e1aff68ed969273b016699eabf48780e4f652242e72fc88a23e21252cb0 \ -e EDGEMICRO_SECRET=3bc95a71c86a3c8ce04137fbcb788158731t51dfc6cdec13b7c05aa0bd969430 \ -e "EDGEMICRO_CONFIG=$EDGEMICRO_CONFIG" \ -e SERVICE_NAME=edgemicroplugins edgemicroplugins
调用您的 API 以测试插件:
通过调用您的 API 并验证输出是否符合预期,测试插件代码是否会执行:
curl -i http://localhost:8000/hello -H "x-api-key:apikey"
例如,
response-uppercase插件可能会返回如下响应:curl -i http://localhost:8000/hello -H "x-api-key:PydUKRDGIXRqF2xh4usn1FLHbhGKVIz" HELLO, WORLD!