您正在查看 Apigee Edge 文档。
前往 Apigee X 文档。 信息
Edge Microgateway v. 3.2.x
本主题介绍如何管理和配置 Edge Microgateway。
在有互联网连接的情况下升级 Edge Microgateway
本部分介绍了如何升级现有的 Edge Microgateway 安装。 如果您在没有互联网连接的情况下运行,请参阅我可以在没有互联网连接的情况下安装 Edge Microgateway 吗?。
Apigee 建议您先使用新版本测试现有配置,然后再升级生产环境。
- 执行以下
npm
命令以升级到最新版本的 Edge Microgateway:npm upgrade edgemicro -g
如需安装特定版本的 Edge Microgateway,您需要在安装命令中指定版本号。例如,如需安装版本 3.2.3,请使用以下命令:
npm install edgemicro@3.2.3 -g
- 查看版本号。例如,如果您安装的是 3.2.3 版,请执行以下操作:
edgemicro --version current nodejs version is v12.5.0 current edgemicro version is 3.2.3
- 最后,升级到最新版本的 edgemicro-auth 代理:
edgemicro upgradeauth -o $ORG -e $ENV -u $USERNAME
进行配置更改
您需要了解的配置文件包括:
- 默认系统配置文件
- 新初始化的 Edge Microgateway 实例的默认配置文件
- 运行实例的动态配置文件
本部分介绍了这些文件以及更改这些文件时需要注意的事项。
默认系统配置文件
安装 Edge Microgateway 后,系统会将默认的系统配置文件放置在此处:
prefix/lib/node_modules/edgemicro/config/default.yaml
其中 prefix 是 npm
前缀目录。如果您找不到此目录,请参阅
Edge Microgateway 的安装位置。
如果您更改系统配置文件,则必须重新初始化、重新配置并重启 Edge Microgateway:
edgemicro initedgemicro configure [params]
edgemicro start [params]
新初始化的 Edge Microgateway 实例的默认配置文件
当您运行 edgemicro init
时,系统配置文件(如上所述)default.yaml
会放置在 ~/.edgemicro
目录中。
如果您更改 ~/.edgemicro
中的配置文件,则必须重新配置并重启 Edge Microgateway:
edgemicro stopedgemicro configure [params]
edgemicro start [params]
正在运行的实例的动态配置文件
当您运行 edgemicro configure [params]
时,系统会在 ~/.edgemicro
中创建一个动态配置文件。该文件的命名方式为 org-env-config.yaml
,其中 org 和 env 是您的 Apigee Edge 组织和环境名称。您可以使用此文件进行配置更改,然后在不停机的情况下重新加载这些更改。例如,如果您添加并配置了插件,则可以重新加载配置,而不会造成任何停机,如下所述。
如果 Edge Microgateway 正在运行(零停机选项):
- 重新加载 Edge Microgateway 配置:
edgemicro reload -o $ORG -e $ENV -k $KEY -s $SECRET
其中:
- $ORG 是您的 Edge 组织名称(您必须是组织管理员)。
- $ENV 是您组织中的环境(例如“test”或“prod”)。
- $KEY 是 configure 命令之前返回的密钥。
- $SECRET 是 configure 命令之前返回的密钥。
例如:
edgemicro reload -o docs -e test -k 701e70ee718ce6dc188...78b6181d000723 \ -s 05c14356e42ed1...4e34ab0cc824
如果 Edge Microgateway 已停止:
- 重启 Edge Microgateway:
edgemicro start -o $ORG -e $ENV -k $KEY -s $SECRET
其中:
- $ORG 是您的 Edge 组织名称(您必须是组织管理员)。
- $ENV 是您组织中的环境(例如“test”或“prod”)。
- $KEY 是 configure 命令之前返回的密钥。
- $SECRET 是 configure 命令之前返回的密钥。
例如:
edgemicro start -o docs -e test -k 701e70ee718ce...b6181d000723 \ -s 05c1435...e34ab0cc824
以下是一个配置文件示例。如需详细了解配置文件设置,请参阅 Edge Microgateway 配置参考文档。
edge_config: bootstrap: >- https://edgemicroservices-us-east-1.apigee.net/edgemicro/bootstrap/organization/docs/environment/test jwt_public_key: 'https://docs-test.apigee.net/edgemicro-auth/publicKey' managementUri: 'https://api.enterprise.apigee.com' vaultName: microgateway authUri: 'https://%s-%s.apigee.net/edgemicro-auth' baseUri: >- https://edgemicroservices.apigee.net/edgemicro/%s/organization/%s/environment/%s bootstrapMessage: Please copy the following property to the edge micro agent config keySecretMessage: The following credentials are required to start edge micro products: 'https://docs-test.apigee.net/edgemicro-auth/products' edgemicro: port: 8000 max_connections: 1000 max_connections_hard: 5000 config_change_poll_interval: 600 logging: level: error dir: /var/tmp stats_log_interval: 60 rotate_interval: 24 plugins: sequence: - oauth headers: x-forwarded-for: true x-forwarded-host: true x-request-id: true x-response-time: true via: true oauth: allowNoAuthorization: false allowInvalidAuthorization: false verify_api_key_url: 'https://docs-test.apigee.net/edgemicro-auth/verifyApiKey' analytics: uri: >- https://edgemicroservices-us-east-1.apigee.net/edgemicro/axpublisher/organization/docs/environment/test
设置环境变量
需要 Edge 组织和环境值的命令行界面命令,以及启动 Edge Microgateway 所需的密钥和密文,都可以存储在以下环境变量中:
EDGEMICRO_ORG
EDGEMICRO_ENV
EDGEMICRO_KEY
EDGEMICRO_SECRET
设置这些变量是可选的。如果您设置了这些变量,则在使用命令行界面 (CLI) 配置和启动 Edge Microgateway 时,无需指定其值。
在 Edge Microgateway 服务器上配置 SSL
请观看以下视频,了解如何在 Apigee Edge Microgateway 中配置 TLS:
视频 | 说明 |
---|---|
配置单向北向 TLS | 了解如何在 Apigee Edge Microgateway 中配置 TLS。 本视频简要介绍了 TLS 及其重要性,介绍了 Edge Microgateway 中的 TLS,并演示了如何配置北向单向 TLS。 |
配置双向北向 TLS | 这是介绍如何在 Apigee Edge Microgateway 中配置 TLS 的第二个视频。此视频介绍了如何配置南向双向 TLS。 |
配置单向和双向南向 TLS | 在 Apigee Edge Microgateway 中配置 TLS 的第三个视频介绍了如何配置南向单向和双向 TLS。 |
您可以将 Microgateway 服务器配置为使用 SSL。例如,配置 SSL 后,您可以使用“https”协议通过 Edge Microgateway 调用 API,如下所示:
https://localhost:8000/myapi
如需在 Microgateway 服务器上配置 SSL,请按以下步骤操作:
- 使用 openssl 实用程序或您偏好的任何方法生成或获取 SSL 证书和密钥。
- 将
edgemicro:ssl
属性添加到 Edge Microgateway 配置文件。如需查看完整的选项列表,请参阅下表。例如:
edgemicro: ssl: key: <absolute path to the SSL key file> cert: <absolute path to the SSL cert file> passphrase: admin123 #option added in v2.2.2 rejectUnauthorized: true #option added in v2.2.2 requestCert: true
- 重启 Edge Microgateway。根据您修改的配置文件(默认文件或运行时配置文件),按照进行配置更改中列出的步骤操作。
以下是配置文件的 edgemicro
部分示例,其中配置了 SSL:
edgemicro: port: 8000 max_connections: 1000 max_connections_hard: 5000 logging: level: error dir: /var/tmp stats_log_interval: 60 rotate_interval: 24 plugins: sequence: - oauth ssl: key: /MyHome/SSL/em-ssl-keys/server.key cert: /MyHome/SSL/em-ssl-keys/server.crt passphrase: admin123 #option added in v2.2.2 rejectUnauthorized: true #option added in v2.2.2
下面列出了所有受支持的服务器选项:
选项 | 说明 |
---|---|
key |
ca.key 文件的路径(采用 PEM 格式)。 |
cert |
ca.cert 文件的路径(采用 PEM 格式)。 |
pfx |
包含客户端私钥、证书和 CA 证书(采用 PFX 格式)的 pfx 文件的路径。 |
passphrase |
包含私钥或 PFX 的密码的字符串。 |
ca |
指向包含 PEM 格式受信任证书列表的文件的路径。 |
ciphers |
用于描述要使用的密码的字符串,以“:”分隔。 |
rejectUnauthorized |
如果为 true,系统会根据提供的 CA 列表验证服务器证书。如果验证失败,则会返回错误。 |
secureProtocol |
要使用的 SSL 方法。例如,SSLv3_method 用于强制将 SSL 设为版本 3。 |
servername |
SNI(服务器名称指示)TLS 扩展的服务器名称。 |
requestCert |
true(双向 SSL);false(单向 SSL) |
使用客户端 SSL/TLS 选项
在连接到目标端点时,您可以将 Edge Microgateway 配置为 TLS 或 SSL 客户端。在 Microgateway 配置文件中,使用 targets 元素设置 SSL/TLS 选项。请注意,您可以指定多个具体目标。下面提供了一个多目标示例。
以下示例提供了将应用于所有主机的设置:
edgemicro: ... targets: ssl: client: key: /Users/jdoe/nodecellar/twowayssl/ssl/client.key cert: /Users/jdoe/nodecellar/twowayssl/ssl/ca.crt passphrase: admin123 rejectUnauthorized: true
在此示例中,这些设置仅应用于指定的主机:
edgemicro: ... targets: - host: 'myserver.example.com' ssl: client: key: /Users/myname/twowayssl/ssl/client.key cert: /Users/myname/twowayssl/ssl/ca.crt passphrase: admin123 rejectUnauthorized: true
下面是 TLS 的示例:
edgemicro: ... targets: - host: 'myserver.example.com' tls: client: pfx: /Users/myname/twowayssl/ssl/client.pfx passphrase: admin123 rejectUnauthorized: true
如果您想将 TLS/SSL 设置应用于多个特定目标,则必须将配置中的第一个主机指定为“empty”(空),以启用通用请求,然后按任何顺序指定特定主机。在此示例中,这些设置会应用于多个特定主机:
targets: - host: ## Note that this value must be "empty" ssl: client: key: /Users/myname/twowayssl/ssl/client.key cert: /Users/myname/twowayssl/ssl/ca.crt passphrase: admin123 rejectUnauthorized: true - host: 'myserver1.example.com' ssl: client: key: /Users/myname/twowayssl/ssl/client.key cert: /Users/myname/twowayssl/ssl/ca.crt rejectUnauthorized: true - host: 'myserver2.example.com' ssl: client: key: /Users/myname/twowayssl/ssl/client.key cert: /Users/myname/twowayssl/ssl/ca.crt rejectUnauthorized: true
下面列出了所有受支持的客户端选项:
选项 | 说明 |
---|---|
pfx |
包含客户端私钥、证书和 CA 证书(采用 PFX 格式)的 pfx 文件的路径。 |
key |
ca.key 文件的路径(采用 PEM 格式)。 |
passphrase |
包含私钥或 PFX 的密码的字符串。 |
cert |
ca.cert 文件的路径(采用 PEM 格式)。 |
ca |
指向包含 PEM 格式受信任证书列表的文件的路径。 |
ciphers |
用于描述要使用的密码的字符串,以“:”分隔。 |
rejectUnauthorized |
如果为 true,系统会根据提供的 CA 列表验证服务器证书。如果验证失败,则会返回错误。 |
secureProtocol |
要使用的 SSL 方法。例如,SSLv3_method 用于强制将 SSL 设为版本 3。 |
servername |
SNI(服务器名称指示)TLS 扩展的服务器名称。 |
自定义 edgemicro-auth 代理
默认情况下,Edge Microgateway 使用部署在 Apigee Edge 上的代理进行 OAuth2 身份验证。
此代理会在您首次运行 edgemicro configure
时部署。您可以更改此代理的默认配置,以向 JSON Web 令牌 (JWT) 添加对自定义声明的支持、配置令牌过期时间,以及生成刷新令牌。如需了解详情,请参阅 GitHub 中的 edgemicro-auth 页面。
使用自定义身份验证服务
默认情况下,Edge Microgateway 使用部署在 Apigee Edge 上的代理进行 OAuth2 身份验证。
此代理会在您首次运行 edgemicro configure
时部署。默认情况下,此代理的网址在 Edge Microgateway 配置文件中指定,如下所示:
authUri: https://myorg-myenv.apigee.net/edgemicro-auth
如果您想使用自己的自定义服务来处理身份验证,请将配置文件中的 authUri
值更改为指向您的服务。例如,您可能有一个使用 LDAP 验证身份的服务。
管理日志文件
Edge Microgateway 会记录每个请求和响应的相关信息。日志文件提供了对调试和问题排查有用的信息。
日志文件的存储位置
默认情况下,日志文件存储在 /var/tmp
中。
如何更改默认日志文件目录
日志文件的存储目录在 Edge Microgateway 配置文件中指定。另请参阅更改配置。
edgemicro: home: ../gateway port: 8000 max_connections: -1 max_connections_hard: -1 logging: level: info dir: /var/tmp stats_log_interval: 60 rotate_interval: 24
更改 dir 值以指定其他日志文件目录。
将日志发送到控制台
您可以配置日志记录,以便将日志信息发送到标准输出,而不是发送到日志文件。将 to_console
标志设置为 true,如下所示:
edgemicro: logging: to_console: true
采用此设置后,日志将发送到标准输出。目前,您无法同时将日志发送到标准输出和日志文件。
如何设置日志记录级别
您可以在 edgemicro
配置中指定要使用的日志级别。如需查看日志级别及其说明的完整列表,请参阅 edgemicro 属性。
例如,以下配置会将日志记录级别设置为 debug
:
edgemicro: home: ../gateway port: 8000 max_connections: -1 max_connections_hard: -1 logging: level: debug dir: /var/tmp stats_log_interval: 60 rotate_interval: 24
如何更改日志间隔时间
您可以在 Edge Microgateway 配置文件中配置这些间隔时间。另请参阅更改配置。
可配置的属性包括:
- stats_log_interval:(默认值:60)将统计记录写入 API 日志文件的时间间隔(以秒为单位)。
- rotate_interval:(默认值:24)日志文件轮替的间隔(以小时为单位)。例如:
edgemicro: home: ../gateway port: 8000 max_connections: -1 max_connections_hard: -1 logging: level: info dir: /var/tmp stats_log_interval: 60 rotate_interval: 24
如何放宽严格的日志文件权限
默认情况下,Edge Microgateway 会生成应用日志文件 (api-log.log
),并将文件权限级别设置为 0600。此权限级别不允许外部应用或用户读取日志文件。如需放宽此严格权限级别,请将 logging:disableStrictLogFile
设置为 true
。当此属性为 true
时,系统会创建日志文件,并将文件权限设置为 0755。如果为 false
或未提供该属性,则权限默认为 0600。
已在 v3.2.3 中添加。
例如:
edgemicro: logging: disableStrictLogFile: true
良好的日志文件维护做法
随着时间的推移,日志文件数据会不断累积,Apigee 建议您采用以下做法:
- 由于日志文件可能会变得非常大,因此请确保日志文件目录有足够的空间。请参阅以下部分:日志文件的存储位置和如何更改默认日志文件目录。
- 每周至少删除一次日志文件或将其移至单独的归档目录。
- 如果您的政策是删除日志,您可以使用 CLI 命令
edgemicro log -c
移除(清理)较旧的日志。
日志文件命名惯例
每个 Edge Microgateway 实例都会生成一个扩展名为 .log
的日志文件。日志文件的命名惯例如下:
edgemicro-HOST_NAME-INSTANCE_ID-api.log
例如:
edgemicro-mymachine-local-MTQzNTgNDMxODAyMQ-api.log
日志文件内容简介
添加时间:v2.3.3
默认情况下,日志记录服务会忽略下载的代理、商品和 JSON Web 令牌 (JWT) 的 JSON。如果您想将这些对象输出到控制台,请在启动 Edge Microgateway 时设置命令行标志 DEBUG=*
。例如:
DEBUG=* edgemicro start -o docs -e test -k abc123 -s xyz456
“api”日志文件的内容
“api”日志文件包含有关通过 Edge Microgateway 传输请求和响应的详细信息。“api”日志文件的命名方式如下:
edgemicro-mymachine-local-MTQzNjIxOTk0NzY0Nw-api.log
对于向 Edge Microgateway 发出的每个请求,“api”日志文件中都会捕获四个事件:
- 来自客户端的传入请求
- 向目标发出的出站请求
- 来自目标的传入响应
- 向客户发出的响应
这些单独的条目中的每一个都采用简写符号表示,以便使日志文件更紧凑。下面是代表这四个事件的四个示例条目。在日志文件中,它们如下所示(行号仅供文档中参考,不会显示在日志文件中)。
(1) 1436403888651 info req m=GET, u=/, h=localhost:8000, r=::1:59715, i=0 (2) 1436403888665 info treq m=GET, u=/, h=127.0.0.18080, i=0 (3) 1436403888672 info tres s=200, d=7, i=0 (4) 1436403888676 info res s=200, d=11, i=0
我们来逐一了解一下:
1. 来自客户端的传入请求示例:
1436403888651 info req m=GET, u=/, h=localhost:8000, r=::1:59715, i=0
- 1436403888651 - Unix 日期戳
- info - 日志记录级别。此值取决于事务的上下文以及
edgemicro
配置中设置的日志记录级别。请参阅如何设置日志记录级别。 对于统计记录,级别设置为stats
。系统会按照使用stats_log_interval
配置设置的定期间隔时间报告统计记录。另请参阅如何更改日志间隔时间。 - req - 用于标识事件。在本例中,从客户端发出请求。
- m - 请求中使用的 HTTP 动词。
- u - 网址中位于基路径后面的部分。
- h - Edge Microgateway 正在监听的主机和端口号。
- r - 发起客户端请求的远程主机和端口。
- i - 请求 ID。所有四个事件条目都将共用此 ID。系统会为每个请求分配一个唯一的请求 ID。按请求 ID 关联日志记录有助于深入了解目标的延迟时间。
- d - 自 Edge Microgateway 收到请求以来经过的时长(以毫秒为单位)。在上例中,系统在 7 毫秒后收到了目标对请求 0 的响应(第 3 行),并在又过了 4 毫秒后将响应发送给了客户端(第 4 行)。换句话说,请求总延迟时间为 11 毫秒,其中目标延迟时间为 7 毫秒,Edge Microgateway 本身延迟时间为 4 毫秒。
2. 向目标发出的传出请求示例:
1436403888665 info treq m=GET, u=/, h=127.0.0.1:8080, i=0
- 1436403888651 - Unix 日期戳
- info - 日志记录级别。此值取决于事务的上下文以及
edgemicro
配置中设置的日志记录级别。请参阅如何设置日志记录级别。 对于统计记录,级别设置为stats
。系统会按照使用stats_log_interval
配置设置的定期间隔时间报告统计记录。另请参阅如何更改日志间隔时间。 - treq - 用于标识事件。在本例中,是目标请求。
- m - 目标请求中使用的 HTTP 动词。
- u - 网址中位于基路径后面的部分。
- h - 后端目标的主机和端口号。
- i - 日志条目的 ID。所有四个事件条目都将共用此 ID。
3. 来自目标的传入响应示例
1436403888672 info tres s=200, d=7, i=0
1436403888651 - Unix 日期戳
- info - 日志记录级别。此值取决于事务的上下文以及
edgemicro
配置中设置的日志记录级别。请参阅如何设置日志记录级别。 对于统计记录,级别设置为stats
。系统会按照使用stats_log_interval
配置设置的定期间隔时间报告统计记录。另请参阅如何更改日志间隔时间。 - tres - 用于标识事件。在本例中,是目标响应。
- s - HTTP 响应状态。
- d - 时长(以毫秒为单位)。目标执行 API 调用所花费的时间。
- i - 日志条目的 ID。所有四个事件条目都将共用此 ID。
4. 发送给客户端的出站响应示例
1436403888676 info res s=200, d=11, i=0
1436403888651 - Unix 日期戳
- info - 日志记录级别。此值取决于事务的上下文以及
edgemicro
配置中设置的日志记录级别。请参阅如何设置日志记录级别。 对于统计记录,级别设置为stats
。系统会按照使用stats_log_interval
配置设置的定期间隔时间报告统计记录。另请参阅如何更改日志间隔时间。 - res - 用于标识事件。在本例中,是响应客户端。
- s - HTTP 响应状态。
- d - 时长(以毫秒为单位)。这是 API 调用所花费的总时间,包括目标 API 所花费的时间和 Edge Microgateway 本身所花费的时间。
- i - 日志条目的 ID。所有四个事件条目都将共用此 ID。
日志文件时间安排
日志文件会按 rotate_interval 配置属性指定的时间间隔进行轮替。系统会继续将条目添加到同一日志文件,直到轮替间隔时间到期。不过,Edge Microgateway 每次重启都会收到一个新的 UID,并使用此 UID 创建一组新的日志文件。另请参阅良好的日志文件维护做法。
错误消息
某些日志条目将包含错误消息。如需帮助确定错误的位置和原因,请参阅 Edge Microgateway 错误参考。
Edge Microgateway 配置参考文档
配置文件的位置
本部分介绍的配置属性位于 Edge Microgateway 配置文件中。另请参阅更改配置。
edge_config 属性
这些设置用于配置 Edge Microgateway 实例与 Apigee Edge 之间的交互。
- bootstrap:(默认值:无)指向 Apigee Edge 上运行的 Edge Microgateway 专用服务的网址。Edge Microgateway 使用此服务与 Apigee Edge 通信。执行用于生成公钥/私钥对的命令时,系统会返回此网址:
edgemicro genkeys
。如需了解详情,请参阅设置和配置 Edge Microgateway。 - jwt_public_key:(默认值:无)指向部署在 Apigee Edge 上的 Edge Microgateway 代理的网址。此代理可用作身份验证端点,用于向客户端颁发已签名的访问令牌。当您执行部署代理的命令 edgemicro configure 时,系统会返回此网址。如需了解详情,请参阅设置和配置 Edge Microgateway。
- quotaUri:如果您想通过部署到贵组织的
edgemicro-auth
代理来管理配额,请设置此配置属性。如果未设置此属性,配额端点默认为内部 Edge Microgateway 端点。edge_config: quotaUri: https://your_org-your_env.apigee.net/edgemicro-auth
edgemicro 属性
这些设置用于配置 Edge Microgateway 进程。
- port:(默认值:8000)Edge Microgateway 进程监听的端口号。
- max_connections:(默认值:-1)指定 Edge Microgateway 可以接收的并发传入连接数量上限。如果超出此数量,系统会返回以下状态:
res.statusCode = 429; // Too many requests
- max_connections_hard:(默认值:-1)Edge Microgateway 在关闭连接之前可以接收的并发请求的数量上限。此设置旨在防范拒绝服务攻击。通常,将其设置为大于 max_connections 的数字。
-
日志记录:
-
level:(默认:error)
- info -(推荐)记录通过 Edge Microgateway 实例传输的所有请求和响应。
- warn - 仅记录警告消息。
- error - 仅记录错误消息。
- debug - 记录调试消息以及信息、警告和错误消息。
- trace - 记录错误的轨迹信息以及信息、警告和错误消息。
- none - 不创建日志文件。
- dir:(默认:/var/tmp)存储日志文件的目录。
- stats_log_interval:(默认值:60)将统计记录写入 API 日志文件的时间间隔(以秒为单位)。
- rotate_interval:(默认值:24)日志文件轮替的间隔(以小时为单位)。
-
level:(默认:error)
- 插件:插件可为 Edge Microgateway 添加功能。如需详细了解如何开发插件,请参阅开发自定义插件。
- dir:从 ./gateway 目录到 ./plugins 目录的相对路径,或绝对路径。
- sequence:要添加到 Edge Microgateway 实例的插件模块的列表。这些模块将按照此处指定的顺序执行。
-
debug :向 Edge Microgateway 进程添加远程调试功能。
- port:要监听的端口号。例如,将 IDE 调试程序设置为监听此端口。
- args:调试进程的参数。例如:
args --nolazy
- config_change_poll_interval:(默认值:600 秒)Edge Microgateway 会定期加载新配置,并在发生任何更改时执行重新加载。轮询会提取在 Edge 上进行的任何更改(对产品、微网关感知型代理等的更改),以及对本地配置文件进行的更改。
- disable_config_poll_interval(默认值:false)将其设置为 true 可关闭自动更改轮询。
- request_timeout:为目标请求设置超时。超时设置为以秒为单位。如果发生超时,Edge Microgateway 会返回 504 状态代码。(已添加 v2.4.x)
- keep_alive_timeout:您可以使用此属性设置 Edge Microgateway 超时(以毫秒为单位)。(默认:5 秒)(添加于 v3.0.6)
- headers_timeout:此属性用于限制 HTTP 解析器等待接收完整 HTTP 标头的时间(以毫秒为单位)。
例如:
edgemicro: keep_alive_timeout: 6000 headers_timeout: 12000
在内部,该参数会为请求设置 Node.js
Server.headersTimeout
属性。(默认:比使用edgemicro.keep_alive_timeout
设置的时间多 5 秒。此默认设置可防止负载平衡器或代理错误地断开连接。)(已添加 v3.1.1) - noRuleMatchAction(字符串):如果
accesscontrol
插件中指定的匹配规则未解析(不匹配),则执行的操作(允许或拒绝访问权限)。有效值:ALLOW
或DENY
默认值:ALLOW
(添加时间:v3.1.7) - enableAnalytics:(默认值:true)将此属性设置为 false 可防止加载 Google Analytics 插件。在这种情况下,系统不会调用 Apigee Edge Analytics。如果设置为 true 或未提供此属性,Google Analytics 插件会照常运行。如需了解详情,请参阅 edgemicro 属性。(已添加 v3.1.8)。
示例:
edgemicro enableAnalytics=false|true
- on_target_response_abort:借助此属性,您可以控制在客户端(Edge Microgateway)和目标服务器之间的连接过早关闭时 Edge Microgateway 的行为方式。
值 说明 默认 如果未指定 on_target_response_abort
,则默认行为是截断响应,而不显示错误。在日志文件中,系统会显示一条警告消息,其中包含targetResponse aborted
和 502 响应代码。appendErrorToClientResponseBody
系统会将自定义错误 TargetResponseAborted
返回给客户端。在日志文件中,系统会显示一条警告消息,其中包含targetResponse aborted
和 502 响应代码。此外,系统会记录错误TargetResponseAborted
并显示消息Target response ended prematurely.
abortClientRequest
Edge Microgateway 会中止请求,并将一条警告写入日志文件: TargetResponseAborted
,其中包含 502 请求状态代码。
示例:
edgemicro: on_target_response_abort: appendErrorToClientResponseBody | abortClientRequest
标头属性
这些设置用于配置如何处理特定 HTTP 标头。
- x-forwarded-for:(默认:true)设置为 false 可防止将 x-forwarded-for 标头传递给目标。请注意,如果请求中包含 x-forwarded-for 标头,其值将设置为 Edge Analytics 中的 client-ip 值。
- x-forwarded-host:(默认值:true)设置为 false 可防止将 x-forwarded-host 标头传递给目标。
- x-request-id:(默认值:true)将其设为 false 可防止将 x-request-id 标头传递给目标。
- x-response-time:(默认值:true)将其设置为 false 可防止将 x-response-time 标头传递给目标。
- via:(默认值:true)将其设置为 false 可防止将 via 标头传递给目标。
oauth 属性
这些设置用于配置 Edge Microgateway 如何强制执行客户端身份验证。
- allowNoAuthorization:(默认值:false)如果设置为 true,则允许 API 调用在没有任何 Authorization 标头的情况下通过 Edge Microgateway。将此值设置为 false 以要求提供 Authorization 标头(默认)。
- allowInvalidAuthorization:(默认值:false)如果设置为 true,则即使 Authorization 标头中传递的令牌无效或已过期,也允许通过 API 调用。将此值设置为 false 以要求使用有效令牌(默认值)。
- authorization-header:(默认值:Authorization: Bearer)用于将访问令牌发送到 Edge Microgateway 的标头。如果目标需要出于其他用途使用 Authorization 标头,您可能需要更改默认值。
- api-key-header:(默认值:x-api-key)用于将 API 密钥传递给 Edge Microgateway 的标头或查询参数的名称。另请参阅使用 API 密钥。
- keep-authorization-header:(默认值:false)如果设置为 true,系统会将请求中发送的 Authorization 标头传递给目标(系统会保留该标头)。
- allowOAuthOnly - 如果设置为 true,则每个 API 都必须带有包含不记名访问令牌的 Authorization 标头。允许您仅允许 OAuth 安全模型(同时保持向后兼容性)。(添加于 2.4.x)
- allowAPIKeyOnly - 如果设置为 true,则每个 API 都必须包含包含 API 密钥的 x-api-key 标头(或自定义位置)。允许您仅允许使用 API 密钥安全模型(同时保持向后兼容性)。(添加于 2.4.x)
- gracePeriod - 此参数有助于防止因系统时钟与 JWT 授权令牌中指定的“有效期开始时间”(nbf) 或“签发时间”(iat) 之间存在细微差异而导致错误。将此参数设置为秒数,以允许出现此类差异。(已添加 2.5.7)
特定于插件的属性
如需详细了解每个插件的可配置属性,请参阅“使用插件”。
过滤代理
您可以过滤 Edge Microgateway 实例将处理哪些支持 Microgateway 的代理。
Edge Microgateway 启动后,会下载其所属组织中的所有 Microgateway 感知型代理。使用以下配置可限制微网关将处理哪些代理。例如,以下配置会将微网关将要处理的代理限制为三个:edgemicro_proxy-1
、edgemicro_proxy-2
和 edgemicro_proxy-3
:
edgemicro: proxies: - edgemicro_proxy-1 - edgemicro_proxy-2 - edgemicro_proxy-3
按名称过滤商品
使用以下配置可限制 Edge Microgateway 下载和处理的 API 产品数量。如需过滤已下载的产品,请将 productnamefilter
查询参数添加到 Edge Microgateway *.config.yaml
文件中列出的 /products
API。例如:
edge_config: bootstrap: >- https://edgemicroservices.apigee.net/edgemicro/bootstrap/organization/willwitman/environment/test jwt_public_key: 'https://myorg-test.apigee.net/edgemicro-auth/publicKey' managementUri: 'https://api.enterprise.apigee.com' vaultName: microgateway authUri: 'https://%s-%s.apigee.net/edgemicro-auth' baseUri: >- https://edgemicroservices.apigee.net/edgemicro/%s/organization/%s/environment/%s bootstrapMessage: Please copy the following property to the edge micro agent config keySecretMessage: The following credentials are required to start edge micro products: 'https://myorg-test.apigee.net/edgemicro-auth/products?productnamefilter=%5E%5BEe%5Ddgemicro.%2A%24'
请注意,查询参数的值必须采用正则表达式格式指定,并经过网址编码。例如,正则表达式 ^[Ee]dgemicro.*$
会捕获“edgemicro-test-1”“edgemicro_demo”和“Edgemicro_New_Demo”等名称。适合在查询参数中使用的网址编码值为:%5E%5BEe%5Ddgemicro.%2A%24
。
以下调试输出显示,系统仅下载了经过过滤的商品:
... 2020-05-27T03:13:50.087Z [76060] [microgateway-config network] products download from https://gsc-demo-prod.apigee.net/edgemicro-auth/products?productnamefilter=%5E%5BEe%5Ddgemicro.%2A%24 returned 200 OK ... .... .... { "apiProduct":[ { "apiResources":[ ], "approvalType":"auto", "attributes":[ { "name":"access", "value":"public" } ], "createdAt":1590549037549, "createdBy":"k***@g********m", "displayName":"test upper case in name", "environments":[ "prod", "test" ], "lastModifiedAt":1590549037549, "lastModifiedBy":"k***@g********m", "name":"Edgemicro_New_Demo", "proxies":[ "catchall" ], "quota":"null", "quotaInterval":"null", "quotaTimeUnit":"null", "scopes":[ ] }, { "apiResources":[ ], "approvalType":"auto", "attributes":[ { "name":"access", "value":"public" } ], "createdAt":1590548328998, "createdBy":"k***@g********m", "displayName":"edgemicro test 1", "environments":[ "prod", "test" ], "lastModifiedAt":1590548328998, "lastModifiedBy":"k***@g********m", "name":"edgemicro-test-1", "proxies":[ "Lets-Encrypt-Validation-DoNotDelete" ], "quota":"null", "quotaInterval":"null", "quotaTimeUnit":"null", "scopes":[ ] }, { "apiResources":[ "/", "/**" ], "approvalType":"auto", "attributes":[ { "name":"access", "value":"public" } ], "createdAt":1558182193472, "createdBy":"m*********@g********m", "displayName":"Edge microgateway demo product", "environments":[ "prod", "test" ], "lastModifiedAt":1569077897465, "lastModifiedBy":"m*********@g********m", "name":"edgemicro_demo", "proxies":[ "edgemicro-auth", "edgemicro_hello" ], "quota":"600", "quotaInterval":"1", "quotaTimeUnit":"minute", "scopes":[ ] } ] }
按自定义属性过滤商品
如需根据自定义属性过滤商品,请执行以下操作:
- 在 Edge 界面中,选择您配置 Edge Microgateway 的组织/环境中的 edgemicro_auth 代理。
- 在“开发”标签页中,在编辑器中打开“JavaCallout”政策。
- 添加键为
products.filter.attributes
的自定义属性,并附上属性名称的英文逗号分隔列表。只有包含任何自定义属性名称的商品才会返回到 Edge Microgateway。 - 您可以选择停用此检查,方法是将自定义属性
products.filter.env.enable
设置为false
,以查看当前环境是否已启用该产品。 (默认值为 true。) - (仅限私有云)如果您使用的是 Edge for Private Cloud,请将属性
org.noncps
设置为true
,以便为非 CPS 环境拉取产品。
例如:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <JavaCallout async="false" continueOnError="false" enabled="true" name="JavaCallout"> <DisplayName>JavaCallout</DisplayName> <FaultRules/> <Properties> <Property name="products.filter.attributes">attrib.one, attrib.two</Property> <Property name="products.filter.env.enable">false</Property> <Property name="org.noncps">true</Property> </Properties> <ClassName>io.apigee.microgateway.javacallout.Callout</ClassName> <ResourceURL>java://micro-gateway-products-javacallout-2.0.0.jar</ResourceURL> </JavaCallout>
按撤销状态过滤商品
API 产品有三种状态代码:待处理、已批准和已撤消。我们在 edgemicro-auth 代理的“设置 JWT 变量”政策中添加了一个名为 allowProductStatus
的新属性。如需使用此属性过滤 JWT 中列出的 API 产品,请执行以下操作:
- 在 Apigee 代理编辑器中打开 edgemicro-auth 代理。
- 将
allowProductStatus
属性添加到 SetJWTVariables 政策的 XML 中,并指定要过滤的状态代码的逗号分隔列表。例如,若要按待处理和已撤消状态过滤,请执行以下操作:<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <Javascript timeLimit="20000" async="false" continueOnError="false" enabled="true" name="Set-JWT-Variables"> <DisplayName>Set JWT Variables</DisplayName> <FaultRules/> <Properties> <Property name="allowProductStatus">Pending,Revoked</Property> </Properties> <ResourceURL>jsc://set-jwt-variables.js</ResourceURL> </Javascript>
如果您只想列出已获批准的商品,请按如下方式设置此属性:
<Property name="allowProductStatus">Approved</Property>
- 保存代理。
如果不存在 Property 标记,则 JWT 中会列出所有状态代码的产品。
如需使用此新属性,您必须升级 edgemicro-auth 代理。
配置 Google Analytics 推送频率
您可以使用以下配置参数来控制 Edge Microgateway 向 Apigee 发送分析数据的频率:
- bufferSize(可选):缓冲区在开始丢弃最早记录之前可以容纳的 Google Analytics 记录的数量上限。默认:10000
- batchSize(可选):发送到 Apigee 的一批分析记录的大小上限。默认:500
- flushInterval(可选):发送到 Apigee 的批量分析记录每次刷新之间的毫秒数。默认:5000
例如:
analytics: bufferSize: 15000 batchSize: 1000 flushInterval: 6000
遮盖分析数据
以下配置可防止请求路径信息显示在 Edge 分析中。将以下代码添加到微网关配置中,以掩盖请求 URI 和/或请求路径。请注意,URI 由请求的主机名和路径部分组成。
analytics: mask_request_uri: 'string_to_mask' mask_request_path: 'string_to_mask'
在 Edge Analytics 中对 API 调用进行分隔
您可以配置分析插件以分隔特定 API 路径,使其在 Edge Analytics 信息中心中显示为单独的代理。例如,您可以在信息中心内隔离健康检查 API,以免将其与实际的 API 代理调用混淆。在“分析”信息中心内,分隔的代理采用以下命名模式:
edgemicro_proxyname-health
下图显示了“分析”信息中心中分隔的两个代理:edgemicro_hello-health
和 edgemicro_mock-health
:
使用以下参数可在 Google Analytics 信息中心中将相对路径和绝对路径分隔为单独的代理:
- relativePath(可选):指定要在 Google Analytics 信息中心内进行分隔的相对路径。例如,如果您指定
/healthcheck
,则包含路径/healthcheck
的所有 API 调用都会在信息中心内显示为edgemicro_proxyname-health
。请注意,此标志会忽略代理基础路径。 如需根据完整路径(包括 basepath)进行分隔,请使用proxyPath
标志。 - proxyPath(可选):指定要分隔在分析信息中心内的完整 API 代理路径(包括代理基本路径)。例如,如果您指定
/mocktarget/healthcheck
(其中/mocktarget
是代理基本路径),则路径为/mocktarget/healthcheck
的所有 API 调用都会在信息中心中显示为edgemicro_proxyname-health
。
例如,在以下配置中,包含 /healthcheck
的任何 API 路径都将由分析插件分隔。这意味着,/foo/healthcheck
和 /foo/bar/healthcheck
将在 Google Analytics 信息中心内作为名为 edgemicro_proxyname-health
的单独代理进行分隔。
analytics: uri: >- https://xx/edgemicro/ax/org/docs/environment/test bufferSize: 100 batchSize: 50 flushInterval: 500 relativePath: /healthcheck
在以下配置中,代理路径为 /mocktarget/healthcheck
的任何 API 都会在分析信息中心中作为名为 edgemicro_proxyname-health
的单独代理进行分隔。
analytics: uri: >- https://xx/edgemicro/ax/org/docs/environment/test bufferSize: 100 batchSize: 50 flushInterval: 500 proxyPath: /mocktarget/healthcheck
在公司防火墙后面设置 Edge Microgateway
使用 HTTP 代理与 Apigee Edge 通信
在 3.1.2 版中添加。
如需使用 HTTP 代理在 Edge Microgateway 和 Apigee Edge 之间进行通信,请执行以下操作:
- 设置环境变量
HTTP_PROXY
、HTTPS_PROXY
和NO_PROXY
。这些变量用于控制您希望用于与 Apigee Edge 通信的每个 HTTP 代理的主机,或哪些主机不应处理与 Apigee Edge 的通信。例如:export HTTP_PROXY='http://localhost:3786' export HTTPS_PROXY='https://localhost:3786' export NO_PROXY='localhost,localhost:8080'
请注意,
NO_PROXY
可以是一个以英文逗号分隔的列表,其中包含 Edge Microgateway 不应代理到的网域。如需详细了解这些变量,请参阅 https://www.npmjs.com/package/request#controlling-proxy-behaviour-using-environment-variables
- 重启 Edge Microgateway。
使用 HTTP 代理进行目标通信
在 3.1.2 版中添加。
如需使用 HTTP 代理在 Edge Microgateway 和后端目标之间进行通信,请执行以下操作:
- 将以下配置添加到微网关配置文件中:
edgemicro: proxy: tunnel: true | false url: proxy_url bypass: target_host # target hosts to bypass the proxy. enabled: true | false
其中:
- tunnel:(可选)如果为 true,Edge Microgateway 会使用 HTTP CONNECT 方法通过单个 TCP 连接建立 HTTP 隧道。(如果用于配置代理的环境变量(如下所述)启用了 TLS,也是如此)。默认值:
false
- url:HTTP 代理网址。
- bypass(可选):指定一个或多个应绕过 HTTP 代理的目标主机网址(以英文逗号分隔)。如果未设置此属性,请使用 NO_PROXY 环境变量指定要绕过的目标网址。
- enabled:如果为 true 且已设置
proxy.url
,则使用 HTTP 代理的proxy.url
值。 如果为 true 且未设置proxy.url
,请使用 HTTP 代理环境变量HTTP_PROXY
和HTTPS_PROXY
中指定的代理,如使用 HTTP 代理与 Apigee Edge 通信中所述。
例如:
edgemicro: proxy: tunnel: true url: 'http://localhost:3786' bypass: 'localhost','localhost:8080' # target hosts to bypass the proxy. enabled: true
- tunnel:(可选)如果为 true,Edge Microgateway 会使用 HTTP CONNECT 方法通过单个 TCP 连接建立 HTTP 隧道。(如果用于配置代理的环境变量(如下所述)启用了 TLS,也是如此)。默认值:
- 重启 Edge Microgateway。
在 Microgateway 感知型代理中使用通配符
您可以在 edgemicro_*(支持 Microgateway)代理的基本路径中使用一个或多个“*”通配符。例如,/team/*/members 的基本路径允许客户端调用 https://[host]/team/blue/members 和 https://[host]/team/green/members,而无需创建新的 API 代理来支持新团队。请注意,不支持 /**/
。
重要提示:Apigee 不支持将通配符“*”用作基本路径的第一个元素。例如,不支持以下项:/*/
搜索。
轮替 JWT 密钥
在最初生成 JWT 之后的一段时间内,您可能需要更改在 Edge 加密 KVM 中存储的私钥/公钥对。生成新密钥对的过程称为密钥轮替。
Edge Microgateway 如何使用 JWT
JSON Web 令牌 (JWT) 是 RFC7519 中所述的令牌标准。JWT 提供了一种签署一组声明的方法,这些声明可由 JWT 的接收方可靠地验证。
您可以使用 CLI 生成 JWT,并在 API 调用的 Authorization 标头中使用它,而不是使用 API 密钥。例如:
curl -i http://localhost:8000/hello -H "Authorization: Bearer eyJhbGciOiJ..dXDefZEA"
如需了解如何使用 CLI 生成 JWT,请参阅生成令牌。
什么是密钥轮替?
在最初生成 JWT 之后的一段时间内,您可能需要更改在 Edge 加密 KVM 中存储的私钥/公钥对。生成新密钥对的过程称为密钥轮替。轮替密钥时,系统会生成一个新的私钥/公钥对,并将其存储在 Apigee Edge 组织/环境中的“microgateway”KVM 中。此外,旧的公钥及其原始密钥 ID 值会保留下来。
如需生成 JWT,Edge 会使用存储在加密 KVM 中的信息。在您首次设置(配置)Edge Microgateway 时,系统会创建一个名为 microgateway
的 KVM 并填充密钥。KVM 中的密钥用于对 JWT 进行签名和加密。
KVM 键包括:
-
private_key - 用于为 JWT 签名的最新(最近创建的)RSA 私钥。
-
public_key - 用于验证使用 private_key 签名的 JWT 的最新(最近创建的)证书。
-
private_key_kid - 最新(最近创建)的私钥 ID。此密钥 ID 与 private_key 值相关联,用于支持密钥轮替。
-
public_key1_kid - 最新(最近创建)的公钥 ID。此键与 public_key1 值相关联,用于支持密钥轮替。此值与私钥 kid 相同。
-
public_key1 - 最新(最近创建)的公钥。
执行密钥轮替时,系统会替换映射中的现有键值,并添加新键以保留旧公钥。例如:
-
public_key2_kid - 旧公钥 ID。此键与 public_key2 值相关联,用于支持密钥轮替。
-
public_key2 - 旧公钥。
系统将使用新公钥验证提交以供验证的 JWT。如果验证失败,系统将使用旧公钥,直到 JWT 过期(在 token_expiry* 间隔时间后,默认 30 分钟)。这样,您就可以“轮替”密钥,而不会立即中断 API 流量。
如何进行密钥轮替
本部分介绍了如何执行密钥轮替。
- 如需升级 KVM,请使用
edgemicro upgradekvm
命令。如需详细了解如何运行此命令,请参阅升级 KVM。您只需执行此步骤一次。 - 如需升级 edgemicro-oauth 代理,请使用
edgemicro upgradeauth
命令。 如需详细了解如何运行此命令,请参阅 升级 edgemicro-auth 代理。您只需执行此步骤一次。 - 将以下行添加到
~/.edgemicro/org-env-config.yaml
文件中,其中必须指定您配置微网关使用的组织和环境:jwk_public_keys: 'https://$ORG-$ENV.apigee.net/edgemicro-auth/jwkPublicKeys'
运行密钥轮替命令以轮替密钥。如需详细了解此命令,请参阅轮替密钥。
edgemicro rotatekey -o $ORG -e $ENV -k $KEY -s $SECRET
例如:
edgemicro rotatekey -o docs -e test \ -k 27ee39567c75e4567a66236cbd4e86d1cc93df6481454301bd5fac4d3497fcbb \ -s 4618b0008a6185d7327ebf53bee3c50282ccf45a3cceb1ed9828bfbcf1148b47
密钥轮替后,Edge 会将多个密钥返回给 Edge Microgateway。请注意,在以下示例中,每个密钥都有一个唯一的“kid”(密钥 ID)值。然后,微网关使用这些密钥来验证授权令牌。如果令牌验证失败,微网关会查看密钥集中是否有较旧的密钥,并尝试使用该密钥。返回的密钥的格式为 JSON Web 密钥 (JWK)。如需了解此格式,请参阅 RFC 7517。
{ "keys": [ { "kty": "RSA", "n": "nSl7R_0wKLiWi6cO3n8aOJwYGBtinq723Jgg8i7KKWTSTYoszOjgGsJf_MX4JEW1YCScwpE5o4o8ccQN09iHVTlIhk8CNiMZNPipClmRVjaL_8IWvMQp1iN66qy4ldWXzXnHfivUZZogCkBNqCz7VSC5rw2Jf57pdViULVvVDGwTgf46sYveW_6h8CAGaD0KLd3vZffxIkoJubh0yMy0mQP3aDOeIGf_akeZeZ6GzF7ltbKGd954iNTiKmdm8IKhz6Y3gLpC9iwQ-kex_j0CnO_daHl1coYxUSCIdv4ziWIeM3dmjQ5_2dEvUDIGG6_Az9hTpNgPE5J1tvrOHAmunQ", "e": "AQAB", "kid": "2" }, { "kty": "RSA", "n": "8BKwzx34BMUcHwTuQtmp8LFRCMxbkKg_zsWD6eOMIUTAsORexTGJsTy7z-4aH0wJ3fT-3luAAUPLBQwGcuHo0P1JnbtPrpuYjaJKSZOeIMOnlryJCspmv-1xG4qAqQ9XaZ9C97oecuj7MMoNwuaZno5MvsY-oi5B_gqED3vIHUjaWCErd4reONyFSWn047dvpE6mwRhZbcOTkAHT8ZyKkHISzopkFg8CD-Mij12unxA3ldcTV7yaviXgxd3eFSD1_Z4L7ZRsDUukCJkJ-8qY2-GWjewzoxl-mAW9D1tLK6qAdc89yFem3JHRW6L1le3YK37-bs6b2a_AqJKsKm5bWw", "e": "AQAB", "kid": "1" } ] }
配置“不早于”延迟
对于 3.1.5 及更低版本,由 rotatekey
命令生成的新私钥会立即生效,并且生成的新令牌会使用新私钥进行签名。不过,只有在微网关配置刷新后,新的公钥才会每 10 分钟(默认)向 Edge Microgateway 实例提供一次。由于令牌签名和微网关实例刷新之间存在这种延迟,因此在所有实例都收到最新的公钥之前,系统会拒绝使用最新密钥签名的令牌。
如果存在多个微网关实例,公钥延迟有时会导致状态为 403 的间歇性运行时错误,因为令牌验证会在一个实例上通过,但在另一个实例上失败,直到所有实例都刷新为止。
从版本 3.1.6 开始,rotatekey
命令中新增了一个标志,可让您指定新私钥生效的延迟时间,以便所有微网关实例有时间刷新并接收新公钥。新标志为 --nbf
,表示“不早于”。
此标志采用整数值,表示延迟时长(分钟)。
在以下示例中,延迟时间设置为 15 分钟:
edgemicro rotatekey -o docs -e test \ -k 27ee39567c75e4567a66236cbd4e86d1cc93df6481454301bd5fac4d3497fcbb \ -s 4618b0008a6185d7327ebf53bee3c50282ccf45a3cceb1ed9828bfbcf1148b47 \ --nbf 15
请注意,良好的做法是将延迟时间设置为超过 config_change_poll_internal
配置设置(默认为 10 分钟)。另请参阅 edgemicro 属性。
过滤下载的代理
默认情况下,Edge Microgateway 会下载 Edge 组织中以命名前缀“edgemicro_”开头的所有代理。您可以更改此默认设置,以下载名称与模式匹配的代理。
- 打开 Edge Micro 配置文件:
~/.edgemicro/org-env-config.yaml
- 在 edge_config 下添加 proxyPattern 元素。例如,以下模式将下载 edgemicro_foo、edgemicro_fast 和 edgemicro_first 等代理。
edge_config: … proxyPattern: edgemicro_f*
指定不使用 API 代理的产品
在 Apigee Edge 中,您可以创建不包含任何 API 代理的 API 产品。此产品配置允许与该产品关联的 API 密钥适用于贵组织中部署的任何代理。从 2.5.4 版开始,Edge Microgateway 支持此产品配置。
调试和问题排查
连接到调试程序
您可以使用调试程序(例如 node-inspector)运行 Edge Microgateway。这对于排查问题和调试自定义插件非常有用。
- 在调试模式下重启 Edge Microgateway。为此,请将
DEBUG=*
添加到start
命令的开头:DEBUG=* edgemicro start -o $ORG -e $ENV -k $KEY -s $SECRET
如需将调试输出重定向到文件,您可以使用以下命令:
export DEBUG=* nohup edgemicro start \ -o $ORG -e $ENV -k $KEY -s $SECRET 2>&1 | tee /tmp/file.log
- 启动调试程序,并将其设置为监听调试进程的端口号。
- 现在,您可以单步调试 Edge Microgateway 代码、设置断点、监视表达式等。
您可以指定与调试模式相关的标准 Node.js 标志。例如,--nolazy
有助于调试异步代码。
检查日志文件
如果您遇到问题,请务必检查日志文件,了解执行详情和错误信息。如需了解详情,请参阅管理日志文件。
使用 API 密钥安全功能
API 密钥提供了一种简单的机制,用于对向 Edge Microgateway 发出请求的客户端进行身份验证。您可以从包含 Edge Microgateway 身份验证代理的 Apigee Edge 产品中复制使用方密钥(也称为客户端 ID)值,以获取 API 密钥。
缓存键
API 密钥会换取令牌,这些令牌会被缓存。您可以通过向 Edge Microgateway 传入请求设置 Cache-Control: no-cache
标头来停用缓存。
使用 API 密钥
您可以在 API 请求中将 API 密钥作为查询参数或在标头中传递。默认情况下,标头和查询参数名称均为 x-api-key
。
查询参数示例:
curl http://localhost:8000/foobar?x-api-key=JG616Gjz7xs4t0dvpvVsGdI49G34xGsz
标头示例:
curl http://localhost:8000/foobar -H "x-api-key:JG616Gjz7xs4t0dvpvVsGdI49G34xGsz"
配置 API 密钥名称
默认情况下,x-api-key
是 API 密钥标头和查询参数的名称。
您可以在配置文件中更改此默认值,如进行配置更改中所述。例如,如需将名称更改为 apiKey,请执行以下操作:
oauth: allowNoAuthorization: false allowInvalidAuthorization: false api-key-header: apiKey
在此示例中,查询参数和标头名称均更改为 apiKey
。无论是哪种情况,名称 x-api-key
都将无法再使用。另请参阅更改配置。
例如:
curl http://localhost:8000/foobar -H "apiKey:JG616Gjz7xs4t0dvpvVsGdI49G34xGsz"
如需详细了解如何将 API 密钥与代理请求搭配使用,请参阅 安全的 Edge Microgateway。
启用上游响应代码
默认情况下,如果响应不是 200 状态,oauth
插件只会返回 4xx 错误状态代码。您可以更改此行为,使其始终返回确切的 4xx 或 5xx 代码(具体取决于错误)。
如需启用此功能,请将 oauth.useUpstreamResponse: true
属性添加到 Edge Microgateway 配置中。例如:
oauth: allowNoAuthorization: false allowInvalidAuthorization: false gracePeriod: 10 useUpstreamResponse: true
使用 OAuth2 令牌安全功能
本部分介绍了如何获取 OAuth2 访问令牌和刷新令牌。访问令牌用于通过微网关进行安全的 API 调用。刷新令牌用于获取新的访问令牌。
如何获取访问令牌
本部分介绍了如何使用 edgemicro-auth
代理获取访问令牌。
您还可以使用 edgemicro token
CLI 命令获取访问令牌。
如需详细了解该 CLI,请参阅管理令牌。
API 1:将凭据作为正文参数发送
在网址中替换您的组织和环境名称,并将从 Apigee Edge 上的开发者应用获取的使用方 ID 和使用方密钥值替换为 client_id 和 client_secret 正文参数:
curl -i -X POST "http://<org>-<test>.apigee.net/edgemicro-auth/token" \ -d '{"grant_type": "client_credentials", "client_id": "your_client_id", \ "client_secret": "your_client_secret"}' -H "Content-Type: application/json"
API 2:在基本身份验证标头中发送凭据
以基本身份验证标头的形式发送客户端凭据,并以表单参数的形式发送 grant_type
。RFC 6749:OAuth 2.0 授权框架中也讨论了此命令形式。
http://<org>-<test>.apigee.net/edgemicro-auth/token -v -u your_client_id:your_client_secret \ -d 'grant_type=client_credentials' -H "Content-Type: application/x-www-form-urlencoded"
输出示例
API 会返回 JSON 响应。请注意,token
和 access_token
属性没有区别。您可以使用任一方法。请注意,expires_in
是一个以秒为单位的整数值。
{ "token": "eyJraWQiOiIxIiwidHlwIjoi", "access_token": "eyJraWQiOiIxIiwid", "token_type": "bearer", "expires_in": 1799 }
如何获取刷新令牌
如需获取刷新令牌,请向 edgemicro-auth
代理的 /token
端点发出 API 调用。您必须使用 password
授权类型进行此 API 调用。以下步骤将引导您完成此过程。
- 使用
/token
API 获取访问令牌和刷新令牌。请注意,授权类型为password
:curl -X POST \ https://your_organization-your_environment.apigee.net/edgemicro-auth/token \ -H 'Content-Type: application/json' \ -d '{ "client_id":"mpK6l1Bx9oE5zLdifoDbF931TDnDtLq", "client_secret":"bUdDcFgv3nXffnU", "grant_type":"password", "username":"mpK6lBx9RoE5LiffoDbpF931TDnDtLq", "password":"bUdD2FvnMsXffnU" }'
该 API 会返回一个访问令牌和一个刷新令牌。响应类似于以下内容。请注意,
expires_in
值为整数,并以秒为单位指定。{ "token": "your-access-token", "access_token": "your-access-token", "token_type": "bearer", "expires_in": 108, "refresh_token": "your-refresh-token", "refresh_token_expires_in": 431, "refresh_token_issued_at": "1562087304302", "refresh_token_status": "approved" }
- 现在,您可以通过调用同一 API 的
/refresh
端点,使用刷新令牌获取新的访问令牌。例如:curl -X POST \ https://willwitman-test.apigee.net/edgemicro-auth/refresh \ -H 'Content-Type: application/json' \ -d '{ "client_id":"mpK6l1Bx9RoE5zLifoDbpF931TDnDtLq", "client_secret":"bUdDc2Fv3nMXffnU", "grant_type":"refresh_token", "refresh_token":"your-refresh-token" }'
API 会返回新的访问令牌。响应如下所示:
{ "token": "your-new-access-token" }
永久监控
Forever 是一个 Node.js 工具,可在进程意外终止或出现错误时自动重启 Node.js 应用。Edge Microgateway 有一个 forever.json 文件,您可以通过配置该文件来控制 Edge Microgateway 应重启的次数和间隔时间。此文件会配置一个名为 forever-monitor 的 Forever 服务,该服务会以编程方式管理 Forever。
您可以在 Edge Microgateway 根安装目录中找到 forever.json 文件。请参阅 Edge Microgateway 的安装位置。如需详细了解配置选项,请参阅 forever-monitor 文档。
edgemicro forever
命令包含一些标志,可让您指定 forever.json
文件的位置(-f
标志),以及启动/停止 Forever 监控进程(-a
标志)。例如:
edgemicro forever -f ~/mydir/forever.json -a start
如需了解详情,请参阅 CLI 参考文档中的永久监控。
指定配置文件端点
如果您运行多个 Edge Microgateway 实例,则可能希望从一个位置管理它们的配置。为此,您可以指定一个 HTTP 端点,Edge Micro 可以从该端点下载其配置文件。您可以在使用 -u 标志启动 Edge Micro 时指定此端点。
例如:
edgemicro start -o jdoe -e test -u http://mylocalserver/mgconfig -k public_key -s secret_key
其中,mgconfig 端点会返回配置文件的内容。此文件默认位于 ~/.edgemicro
中,采用以下命名惯例:org-env-config.yaml
。
停用 TCP 连接数据缓冲
您可以使用 nodelay
配置属性为 Edge Microgateway 使用的 TCP 连接停用数据缓冲。
默认情况下,TCP 连接会使用 Nagle 算法对数据进行缓冲,然后再发送。将 nodelay
设为 true
会停用此行为(每次调用 socket.write()
时,数据都会立即发送)。如需了解详情,请参阅 Node.js 文档。
如需启用 nodelay
,请按如下方式修改 Edge Micro 配置文件:
edgemicro: nodelay: true port: 8000 max_connections: 1000 config_change_poll_interval: 600 logging: level: error dir: /var/tmp stats_log_interval: 60 rotate_interval: 24
在独立模式下运行 Edge Microgateway
您可以运行与任何 Apigee Edge 依赖项完全断开连接的 Edge Microgateway。这种场景称为独立模式,可让您在不连接到互联网的情况下运行和测试 Edge Microgateway。
在独立模式下,以下功能无法正常运行,因为它们需要连接到 Apigee Edge:
- OAuth 和 API 密钥
- 配额
- 分析
另一方面,自定义插件和突发流量抑制功能会正常运行,因为它们不需要连接到 Apigee Edge。此外,借助名为 extauth
的新插件,您可以在独立模式下使用 JWT 授权对微网关的 API 调用。
配置和启动网关
如需在独立模式下运行 Edge Microgateway,请执行以下操作:
- 创建一个名为
$HOME/.edgemicro/$ORG
的配置文件。-
$ENV-config.yaml例如:
vi $HOME/.edgemicro/foo-bar-config.yaml
- 将以下代码粘贴到文件中:
edgemicro: port: 8000 max_connections: 1000 config_change_poll_interval: 600 logging: level: error dir: /var/tmp stats_log_interval: 60 rotate_interval: 24 plugins: sequence: - extauth - spikearrest headers: x-forwarded-for: true x-forwarded-host: true x-request-id: true x-response-time: true via: true extauth: publickey_url: https://www.googleapis.com/oauth2/v1/certs spikearrest: timeUnit: second allow: 10 buffersize: 0
- 导出值为“1”的以下环境变量:
export EDGEMICRO_LOCAL=1
- 执行以下
start
命令,在其中提供用于实例化本地代理的值:edgemicro start -o $ORG -e $ENV -a $LOCAL_PROXY_NAME \ -v $LOCAL_PROXY_VERSION -t $TARGET_URL -b $BASE_PATH
其中:
- $ORG 是您在配置文件名称中使用的“组织”名称。
- $ENV 是您在配置文件名称中使用的“env”名称。
- $LOCAL_PROXY_NAME 是将要创建的本地代理的名称。您可以使用任何名称。
- $LOCAL_PROXY_VERSION 是代理的版本号。
- $TARGET_URL 是代理目标的网址。(target 是代理调用的服务。)
- $BASE_PATH 是代理的基本路径。此值必须以正斜杠开头。对于根基本路径,只需指定一个正斜杠;例如“/”。
例如:
edgemicro start -o local -e test -a proxy1 -v 1 -t http://mocktarget.apigee.net -b /
- 测试配置。
curl http://localhost:8000/echo { "error" : "missing_authorization" }
由于
extauth
插件位于foo-bar-config.yaml
文件中,因此您会收到“missing_authorization”错误。此插件会验证 API 调用的 Authorization 标头中必须存在的 JWT。在下一部分中,您将获取一个 JWT,以便 API 调用能够顺利完成且不会出错。
示例:获取授权令牌
以下示例展示了如何从 Apigee Edge (edgemicro-auth/jwkPublicKeys
) 上的 Edge Microgateway JWT 端点获取 JWT。执行 Edge Microgateway 的标准设置和配置时,系统会部署此端点。
如需从 Apigee 端点获取 JWT,您必须先进行标准 Edge Microgateway 设置,并连接到互联网。此处的 Apigee 端点仅用于举例,并非必需。您可以根据需要使用其他 JWT 令牌端点。如果是,则需要使用为该端点提供的 API 获取 JWT。
以下步骤介绍了如何使用 edgemicro-auth/jwkPublicKeys
端点获取令牌:
- 您必须执行 Edge Microgateway 的标准设置和配置,才能将
edgemicro-auth
代理部署到 Apigee Edge 上的组织/环境。如果您之前已执行此步骤,则无需重复执行。 - 如果您已将 Edge Microgateway 部署到 Apigee Cloud,则必须连接到互联网,才能从此端点获取 JWT。
-
停止 Edge Microgateway:
edgemicro stop
- 在您之前创建的配置文件 (
$HOME/.edgemicro
/org-env-config.yaml
) 中,将extauth:publickey_url
属性指向 Apigee Edge 组织/环境中的edgemicro-auth/jwkPublicKeys
端点。例如:extauth: publickey_url: 'https://your_org-your_env.apigee.net/edgemicro-auth/jwkPublicKeys'
-
像之前一样重启 Edge Microgateway,使用您在配置文件名称中使用的 org/env 名称。例如:
edgemicro start -o foo -e bar -a proxy1 -v 1 -t http://mocktarget.apigee.net -b /
-
从授权端点获取 JWT 令牌。由于您使用的是
edgemicro-auth/jwkPublicKeys
端点,因此可以使用以下 CLI 命令:
您可以使用 edgemicro token
命令或 API 为 Edge Microgateway 生成 JWT。例如:
edgemicro token get -o your_org -e your_env \ -i G0IAeU864EtBo99NvUbn6Z4CBwVcS2 -s uzHTbwNWvoSmOy
其中:
- your_org 是您之前配置 Edge Microgateway 的 Apigee 组织的名称。
- your_env 是组织中的环境。
i
选项用于指定开发者应用中的使用方密钥,该应用包含包含edgemicro-auth
代理的产品。s
选项用于指定包含edgemicro-auth
代理的商品的开发者应用的使用方密钥。
此命令会要求 Apigee Edge 生成一个 JWT,然后该 JWT 可用于验证 API 调用。
另请参阅生成令牌。测试独立配置
如需测试配置,请在 Authorization 标头中添加令牌,然后调用 API,如下所示:
curl http://localhost:8000/echo -H "Authorization: Bearer your_token
示例:
curl http://localhost:8000/echo -H "Authorization: Bearer eyJraWQiOiIxIiwidHlwIjo...iryF3kwcDWNv7OQ"
输出示例:
{ "headers":{ "user-agent":"curl/7.54.0", "accept":"*/*", "x-api-key":"DvUdLlFwG9AvGGpEgfnNGwtvaXIlUUvP", "client_received_start_timestamp":"1535134472699", "x-authorization-claims":"eyJhdDbiO...M1OTE5MTA1NDkifQ==", "target_sent_start_timestamp":"1535134472702", "x-request-id":"678e3080-a7ae-11e8-a70f-87ae30db3896.8cc81cb0-a7c9-11e8-a70f-87ae30db3896", "x-forwarded-proto":"http", "x-forwarded-host":"localhost:8000", "host":"mocktarget.apigee.net", "x-cloud-trace-context":"e2ac4fa0112c2d76237e5473714f1c85/1746478453618419513", "via":"1.1 localhost, 1.1 google", "x-forwarded-for":"::1, 216.98.205.223, 35.227.194.212", "connection":"Keep-Alive" }, "method":"GET", "url":"/", "body":"" }
使用本地代理模式
在本地代理模式下,Edge Microgateway 不需要在 Apigee Edge 上部署微网关感知代理。而是在启动微网关时,通过提供本地代理名称、基本路径和目标网址来配置“本地代理”。然后,对微网关的 API 调用会发送到本地代理的目标网址。在所有其他方面,本地代理模式的工作方式与在正常模式下运行 Edge Microgateway 完全相同。身份验证、突发流量抑制和配额强制执行、自定义插件等功能的运作方式也相同。
应用场景和示例
如果您只需要将一个代理与 Edge Microgateway 实例相关联,本地代理模式非常有用。例如,您可以将 Edge Microgateway 作为 Sidecar 代理注入 Kubernetes,其中 Microgateway 和服务各自在单个 pod 中运行,并且 Microgateway 管理与其配套服务之间的流量。下图展示了此架构,其中 Edge Microgateway 在 Kubernetes 集群中充当边车代理。每个微网关实例只与其配套服务上的单个端点通信:
这种架构风格的优势在于,Edge Microgateway 可为部署到容器环境(例如 Kubernetes 集群)的各项服务提供 API 管理。
配置本地代理模式
如需将 Edge Microgateway 配置为在本地代理模式下运行,请按以下步骤操作:
- 运行
edgemicro init
以设置本地配置环境,就像在典型的 Edge Microgateway 设置中一样。另请参阅配置 Edge Microgateway。 - 运行
edgemicro configure
,就像在典型的 Edge Microgateway 设置过程中一样。例如:edgemicro configure -o your_org -e your_env -u your_apigee_username
此命令会将 edgemicro-auth 政策部署到 Edge,并返回启动 Microgateway 所需的密钥和密文。如果您需要帮助,请参阅配置 Edge Microgateway。
- 在 Apigee Edge 上,创建一个 API 产品并满足以下强制性配置要求(您可以根据需要管理所有其他配置):
在 Apigee Edge 上,创建开发者,或者您也可以根据需要使用现有开发者。如需帮助,请参阅使用 Edge 管理界面添加开发者。
- 在 Apigee Edge 上,创建一个开发者应用。您必须将刚刚创建的 API 产品添加到该应用。如需帮助,请参阅在 Edge 管理界面中注册应用。
- 在安装了 Edge Microgateway 的机器上,导出以下环境变量,并将其值设为“1”。
export EDGEMICRO_LOCAL_PROXY=1
- 执行以下
start
命令:edgemicro start -o your_org -e your_environment -k your_key -s your_secret \ -a local_proxy_name -v local_proxy_version -t target_url -b base_path
其中:
- your_org 是您的 Apigee 组织。
- your_environment 是您组织中的环境。
- your_key 是您运行
edgemicro configure
时返回的键。 - your_secret 是您运行
edgemicro configure
时返回的 Secret。 - local_proxy_name 是将要创建的本地代理的名称。
- local_proxy_version 是代理的版本号。
- target_url 是代理的目标(代理将调用的服务)的网址。
- base_path 是代理的基本路径。此值必须以正斜杠开头。对于根基本路径,只需指定一个正斜杠;例如“/”。
例如:
edgemicro start -o your_org -e test -k 7eb6aae644cbc09035a...d2eae46a6c095f \ -s e16e7b1f5d5e24df...ec29d409a2df853163a -a proxy1 -v 1 \ -t http://mocktarget.apigee.net -b /echo
测试配置
您可以通过调用代理端点来测试本地代理配置。例如,如果您指定了 /echo
作为基本路径,则可以按如下方式调用代理:
curl http://localhost:8000/echo { "error" : "missing_authorization", "error_description" : "Missing Authorization header" }
由于您未提供有效的 API 密钥,因此此初始 API 调用产生了错误。您可以在之前创建的“开发者”应用中找到该密钥。在 Edge 界面中打开应用,复制使用方密钥,然后按如下方式使用该密钥:
curl http://localhost:8000/echo -H 'x-api-key:your_api_key'
例如:
curl http://localhost:8000/echo -H "x-api-key:DvUdLlFwG9AvGGpEgfnNGwtvaXIlUUvP"
输出示例:
{ "headers":{ "user-agent":"curl/7.54.0", "accept":"*/*", "x-api-key":"DvUdLlFwG9AvGGpEgfnNGwtvaXIlUUvP", "client_received_start_timestamp":"1535134472699", "x-authorization-claims":"eyJhdWQiOi...TQ0YmUtOWNlOS05YzM1OTE5MTA1NDkifQ==", "target_sent_start_timestamp":"1535134472702", "x-request-id":"678e3080-a7ae-11e8-a70f-87ae30db3896.8cc81cb0-a7c9-11e8-a70f-87ae30db3896", "x-forwarded-proto":"http", "x-forwarded-host":"localhost:8000", "host":"mocktarget.apigee.net", "x-cloud-trace-context":"e2ac4fa0112c2d76237e5473714f1c85/1746478453618419513", "via":"1.1 localhost, 1.1 google", "x-forwarded-for":"::1, 216.98.205.223, 35.227.194.212", "connection":"Keep-Alive" }, "method":"GET", "url":"/", "body":"" }
使用同步器
本部分介绍了如何使用同步器。同步器是一项可选功能,可允许 Edge Microgateway 从 Apigee Edge 检索配置数据并将其写入本地 Redis 数据库,从而提高 Edge Microgateway 的弹性。同步器实例运行后,在其他节点上运行的其他 Edge Microgateway 实例可以直接从此数据库检索其配置。
同步器功能目前支持与 Redis 5.0.x 搭配使用。
什么是同步器?
同步器可为 Edge Microgateway 提供一定程度的弹性。这有助于确保 Edge Microgateway 的每个实例都使用相同的配置,并且在互联网中断时,Edge Microgateway 实例可以正常启动和运行。
默认情况下,Edge Microgateway 实例必须能够与 Apigee Edge 通信,以检索和刷新其配置数据,例如 API 代理和 API 产品配置。如果与 Edge 的互联网连接中断,微网关实例可以继续运行,因为最新的配置数据已缓存。但是,如果没有明确的连接,新的微网关实例将无法启动。此外,互联网中断可能会导致一个或多个微网关实例运行的配置信息与其他实例不同步。
Edge Microgateway 同步器为 Edge Microgateway 实例提供了一种替代机制,以检索启动和处理 API 代理流量所需的配置数据。从对 Apigee Edge 的调用检索到的配置数据包括:jwk_public_keys
调用、jwt_public_key
调用、引导加载程序调用和 API 产品调用。借助同步器,即使 Edge Microgateway 和 Apigee Edge 之间的互联网连接中断,在不同节点上运行的所有 Edge Microgateway 实例也能正常启动并保持同步。
同步器是 Edge Microgateway 的特殊配置实例。它的唯一用途是轮询 Apigee Edge(时间可配置),检索配置数据,并将其写入本地 Redis 数据库。同步器实例本身无法处理 API 代理流量。您可以将在其他节点上运行的 Edge Microgateway 的其他实例配置为从 Redis 数据库(而非 Apigee Edge)检索配置数据。由于所有微网关实例都会从本地数据库中提取其配置数据,因此即使在互联网中断的情况下,它们也能启动并处理 API 请求。
配置同步器实例
将以下配置添加到您要用作同步器的 Edge Microgateway 安装的 org-env/config.yaml
文件中:
edgemicro: redisHost: host_IP redisPort: host_port redisDb: database_index redisPassword: password edge_config: synchronizerMode: 1 redisBasedConfigCache: true
例如:
edgemicro: redisHost: 192.168.4.77 redisPort: 6379 redisDb: 0 redisPassword: codemaster edge_config: synchronizerMode: 1 redisBasedConfigCache: true
选项 | 说明 |
---|---|
redisHost |
运行 Redis 实例的主机。默认值:127.0.0.1 |
redisPort |
Redis 实例的端口。默认值:6379 |
redisDb |
要使用的 Redis 数据库。默认值:0 |
redisPassword |
您的数据库密码。 |
最后,保存配置文件并启动 Edge Microgateway 实例。它将开始轮询 Apigee Edge 并将下载的配置数据存储在 Redis 数据库中。
配置常规 Edge Microgateway 实例
同步器运行后,您可以配置其他 Edge Microgateway 节点,以运行用于处理 API 代理流量的常规 Microgateway 实例。不过,您可以将这些实例配置为从 Redis 数据库(而非 Apigee Edge)获取配置数据。
将以下配置添加到每个额外的 Edge Microgateway 节点的 org-env/config.yaml
文件中。请注意,synchronizerMode
属性设置为 0
。此属性会将实例设置为以处理 API 代理流量的普通 Edge Microgateway 实例运行,并且实例将从 Redis 数据库获取其配置数据。
edgemicro: redisHost: host_IP redisPort: host_port redisDb: database_index redisPassword: password edge_config: synchronizerMode: 0 redisBasedConfigCache: true
例如:
edgemicro: redisHost: 192.168.4.77 redisPort: 6379 redisDb: 0 redisPassword: codemaster edge_config: synchronizerMode: 0 redisBasedConfigCache: true
配置属性
添加了以下配置属性,以支持使用同步器:
属性 | 值 | 说明 |
---|---|---|
edge_config.synchronizerMode |
0 或 1 | 如果为 0(默认值),Edge Microgateway 会以标准模式运行。 如果为 1,则启动 Edge Microgateway 实例以用作同步器。在此模式下,实例将从 Apigee Edge 拉取配置数据,并将其存储在本地 Redis 数据库中。此实例无法处理 API 代理请求;其唯一用途是轮询 Apigee Edge 以获取配置数据,并将其写入本地数据库。然后,您必须配置其他微网关实例以从数据库中读取数据。 |
edge_config.redisBasedConfigCache |
true 或 false | 如果为 true,Edge Microgateway 实例会从 Redis 数据库(而非 Apigee Edge)提取其配置数据。Redis 数据库必须与同步器配置为写入的数据库相同。如果 Redis 数据库不可用或数据库为空,微网关会查找现有的 cache-config.yaml 文件以获取其配置。
如果为 false(默认值),Edge Microgateway 实例会照常从 Apigee Edge 提取配置数据。 |
edgemicro.config_change_poll_interval |
时间间隔(以秒为单位) | 指定同步器从 Apigee Edge 提取数据的轮询间隔。 |
为插件配置排除网址
您可以配置微网关,以跳过对指定网址的插件进行处理。您可以全局(针对所有插件)或针对特定插件配置这些“排除”网址。
例如:
... edgemicro: ... plugins: excludeUrls: '/hello,/proxy_one' # global exclude urls sequence: - oauth - json2xml - quota json2xml: excludeUrls: '/hello/xml' # plugin level exclude urls ...
在此示例中,插件不会处理路径为 /hello
或 /proxy_one
的传入 API 代理调用。此外,对于路径中包含 /hello/xml
的 API,系统会跳过 json2xml
插件。
使用环境变量值设置配置属性
您可以在配置文件中使用标记指定环境变量。指定的环境变量标记会被实际环境变量值替换。替换项仅存储在内存中,而不会存储在原始配置或缓存文件中。
在此示例中,属性 key
会替换为 TARGETS_SSL_CLIENT_KEY
环境变量的值,以此类推。
targets: - ssl: client: key: <E>TARGETS_SSL_CLIENT_KEY</E> cert: <E>TARGETS_SSL_CLIENT_CERT</E> passphrase: <E>TARGETS_SSL_CLIENT_PASSPHRASE</E>
在此示例中,<n>
标记用于表示整数值。仅支持正整数。
edgemicro: port: <E><n>EMG_PORT</n></E>
在此示例中,<b>
标记用于指示布尔值(即 true 或 false)。
quotas: useRedis: <E><b>EMG_USE_REDIS</b></E>