您正在查看 Apigee Edge 文档。
前往 Apigee X 文档。 信息
Edge Microgateway v. 2.5.x
本主题讨论如何管理和配置 Edge Microgateway。
在已连接到互联网的情况下升级 Edge Microgateway
- 执行以下
npm命令,以升级到最新版本的 Edge Microgateway:npm upgrade edgemicro -g
如需升级到特定版本的 Edge Microgateway,您需要在升级命令中指定版本号。如果您未指定版本号,系统将安装最新版本。例如,如需升级到版本 2.5.26,请使用以下命令:
npm upgrade edgemicro@2.5.26 -g
- 查看版本号。例如,如果您安装了 2.5.26 版:
edgemicro --version current nodejs version is v8.9.0 current edgemicro version is 2.5.26 - 最后,升级到最新版本的 edgemicro-auth 代理:
edgemicro upgradeauth -o org_name -e env_name -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_name -e env_name -k key -s secret
其中:
- org_name 是您的 Edge 组织名称(您必须是组织管理员)。
- env_name 是您组织中的环境(例如“test”或“prod”)。
- key 是之前由配置命令返回的密钥。
- secret 是之前由配置命令返回的密钥。
例如
edgemicro reload -o docs -e test -k 701e70ee718ce6dc188...78b6181d000723 \ -s 05c14356e42ed1...4e34ab0cc824
如果 Edge Microgateway 已停止:
- 重启 Edge Microgateway:
edgemicro start -o org_name -e env_name -k key -s secret
其中:
- org_name 是您的 Edge 组织名称(您必须是组织管理员)。
- env_name 是您组织中的环境(例如“test”或“prod”)。
- key 是之前由配置命令返回的密钥。
- secret 是之前由配置命令返回的密钥。
例如:
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 所需的密钥和 Secret 的命令行界面命令可以存储在以下环境变量中:
EDGEMICRO_ORGEDGEMICRO_ENVEDGEMICRO_KEYEDGEMICRO_SECRET
您可以选择是否设置这些变量。如果您设置了这些变量,则在使用命令行界面 (CLI) 配置和启动 Edge Microgateway 时,无需指定它们的值。
在 Edge Microgateway 服务器上配置 SSL
您可以将 Microgateway 服务器配置为使用 SSL。例如,在配置 SSL 后,您可以通过 Edge Microgateway 使用“https”协议调用 API,如下所示:
https://localhost:8000/myapi
如需在微网关服务器上配置 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 |
对于双向 SSL 为 true;对于单向 SSL 为 false |
使用客户端 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以下是所有受支持的客户端选项的列表:
| 选项 | 说明 |
|---|---|
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启用此设置后,日志将发送到标准输出。目前,您无法同时将日志发送到 stdout 和日志文件。
如何设置日志记录级别
您可以设置以下日志级别:信息、警告和错误。建议使用 INFO 级别。它会记录所有 API 请求和响应,是默认值。
如何更改日志记录间隔
您可以在 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
良好的日志文件维护实践
随着时间的推移,日志文件数据会不断累积,Apigee 建议您采取以下做法:
- 由于日志文件可能会变得非常大,因此请确保日志文件目录有足够的空间。请参阅以下部分:日志文件的存储位置和如何更改默认日志文件目录。
- 每周至少删除一次日志文件或将其移至单独的归档目录。
- 如果您的政策是删除日志,则可以使用 CLI 命令
edgemicro log -c移除(清理)旧日志。
日志文件命名惯例
每个 Edge Microgateway 实例都会生成三种类型的日志文件:
- api - 记录流经 Edge Microgateway 的所有请求和响应。API 计数器(统计数据)和错误也会记录到此文件中。
- err - 记录发送到 stderr 的所有内容。
- out - 记录发送到 stdout 的所有内容。
命名惯例如下:
edgemicro-<Host Name>-<Instance ID>-<Log Type>.log
例如:
edgemicro-mymachine-local-MTQzNTgNDMxODAyMQ-api.log edgemicro-mymachine-local-MTQzNTg1NDMODAyMQ-err.log edgemicro-mymachine-local-mtqzntgndmxodaymq-out.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 日期戳
- 信息 - 取决于上下文。可以是信息、警告或错误,具体取决于日志级别。可以是统计记录的统计信息、警告的警告或错误的错误。
- req - 标识事件。在本例中,为来自客户端的请求。
- m - 请求中使用的 HTTP 动词。
- u - 网址中位于基本路径后面的部分。
- h - Edge Microgateway 正在监听的主机和端口号。
- r - 客户端请求的来源远程主机和端口。
- i - 请求 ID。所有这四项活动条目都将共用此 ID。每个请求都会获配一个唯一请求 ID。通过请求 ID 将日志记录相关联,可以深入了解目标的延迟时间。
- d - 自 Edge Microgateway 收到请求以来的时长(以毫秒为单位)。在上面的示例中,目标对请求 0 的响应在 7 毫秒后收到(第 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 日期戳
- 信息 - 取决于上下文。可以是信息、警告或错误,具体取决于日志级别。可以是统计记录的统计信息、警告的警告或错误的错误。
- treq - 用于标识事件。在这种情况下,目标请求。
- m - 目标请求中使用的 HTTP 动词。
- u - 网址中位于基本路径后面的部分。
- h - 后端目标的宿主和端口号。
- i - 日志条目的 ID。所有这四个活动条目都将共享此 ID。
3. 来自目标的传入响应示例
1436403888672 info tres s=200, d=7, i=0
1436403888651 - Unix 日期戳
- 信息 - 取决于上下文。可以是信息、警告或错误,具体取决于日志级别。可以是统计记录的统计信息、警告的警告或错误的错误。
- tres - 标识事件。在这种情况下,目标响应。
- s - HTTP 响应状态。
- d - 时长(以毫秒为单位)。目标 API 调用所花费的时间。
- i - 日志条目的 ID。所有这四个活动条目都将共享此 ID。
4. 发送给客户端的出站响应示例
1436403888676 info res s=200, d=11, i=0
1436403888651 - Unix 日期戳
- 信息 - 取决于上下文。可以是信息、警告或错误,具体取决于日志级别。可以是统计记录的统计信息、警告的警告或错误的错误。
- 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。
edgemicro 属性
这些设置用于配置 Edge Microgateway 进程。
- 端口:(默认值: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 - 仅记录错误消息。
- 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)
headers 属性
这些设置用于配置特定 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 调用在没有任何授权标头的情况下通过 Edge Microgateway。将其设置为 false 可要求提供授权标头(默认)。
- 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 都必须携带包含不记名访问令牌的授权标头。允许您仅允许 OAuth 安全模型(同时保持向后兼容性)。(已添加 2.4.x)
- allowAPIKeyOnly - 如果设置为 true,则每个 API 都必须携带包含 API 密钥的 x-api-key 标头(或自定义位置)。允许您仅允许 API 密钥安全模型(同时保持向后兼容性)。(添加于 2.4.x)
- gracePeriod - 此参数有助于防止因系统时钟与 JWT 授权令牌中指定的 Not Before (nbf) 或 Issued At (iat) 时间略有差异而导致的错误。将此参数设置为允许此类差异的秒数。(已添加 2.5.7)
插件专用属性
如需详细了解每个插件的可配置属性,请参阅“使用插件”。
过滤代理
您可以过滤 Edge Microgateway 实例将处理哪些支持微网关的代理。
当 Edge Microgateway 启动时,它会下载与其关联的组织中的所有支持微网关的代理。使用以下配置来限制微网关将处理哪些代理。例如,以下配置会将微网关将处理的代理数量限制为 3 个:edgemicro_proxy-1、edgemicro_proxy-2 和 edgemicro_proxy-3:
proxies: - edgemicro_proxy-1 - edgemicro_proxy-2 - edgemicro_proxy-3
配置分析推送频率
您可以使用以下配置参数来控制 Edge Microgateway 向 Apigee 发送分析数据的频率:
- bufferSize(可选):缓冲区在开始舍弃最旧的分析记录之前可以容纳的最大分析记录数。默认值: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 代理调用混淆。在 Analytics 信息中心内,隔离的代理遵循以下命名模式:
edgemicro_proxyname-health
下图显示了 Google Analytics 信息中心内的两个隔离代理:edgemicro_hello-health 和 edgemicro_mock-health:

使用以下参数可在 Google Analytics 信息中心内将相对路径和绝对路径分隔为单独的代理:
- relativePath(可选):指定要在 Google Analytics 信息中心内隔离的相对路径。例如,如果您指定
/healthcheck,则包含路径/healthcheck的所有 API 调用都将在信息中心内显示为edgemicro_proxyname-health。请注意,此标志会忽略代理基本路径。 如需根据完整路径(包括基本路径)进行隔离,请使用proxyPath标志。 - proxyPath(可选):指定完整的 API 代理路径(包括代理基本路径),以便在分析信息中心内进行隔离。例如,如果您指定
/mocktarget/healthcheck,其中/mocktarget是代理基本路径,则路径为/mocktarget/healthcheck的所有 API 调用都将在信息中心内显示为edgemicro_proxyname-health。
例如,在以下配置中,任何包含 /healthcheck 的 API 路径都将通过分析插件进行隔离。这意味着,/foo/healthcheck 和 /foo/bar/healthcheck 将在分析信息中心内作为名为 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
支持 v2.4.x
如果 Edge Microgateway 安装在防火墙后面,则网关可能无法与 Apigee Edge 通信。在这种情况下,您可以考虑以下两种方案:
选项 1:
第一种方法是在微网关配置文件中将 edgemicro: proxy_tunnel 选项设置为 true:
edge_config:
proxy: http://10.224.16.85:3128
proxy_tunnel: true如果 proxy_tunnel 为 true,Edge Microgateway 会使用 HTTP CONNECT 方法通过单个 TCP 连接建立 HTTP 请求隧道。(如果用于配置代理的环境变量已启用 TLS,则情况也是如此)。
选项 2:
第二种方法是在微网关配置文件中指定代理并将 proxy_tunnel 设置为 false。例如:
edge_config:
proxy: http://10.224.16.85:3128
proxy_tunnel: false在这种情况下,您可以设置以下变量来控制要使用的每个 HTTP 代理的主机,或哪些主机不应处理 Edge Microgateway 代理:HTTP_PROXY、HTTPS_PROXY 和 NO_PROXY。
您可以将 NO_PROXY 设置为 Edge Microgateway 不应代理的网域的英文逗号分隔列表。例如:
export NO_PROXY='localhost,localhost:8080'
将 HTTP_PROXY 和 HTTPS_PROXY 设置为 Edge Microgateway 可以向其发送消息的 HTTP 代理端点。例如:
export HTTP_PROXY='http://localhost:3786' export HTTPS_PROXY='https://localhost:3786'
如需详细了解这些变量,请参阅 https://www.npmjs.com/package/request#controlling-proxy-behaviour-using-environment-variables
另请参阅
如何在公司防火墙后设置 Edge Microgateway(在 Apigee 社区中)。
在支持 Microgateway 的代理中使用通配符
您可以在 edgemicro_*(支持微网关)代理的基本路径中使用一个或多个“*”通配符。例如,/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 的接收者可以可靠地验证这些声明。
Edge Microgateway 使用 JWT 作为 OAuth 安全性的不记名令牌。为 Edge Microgateway 生成 OAuth 令牌时,您会收到一个 JWT。然后,您可以在 API 调用的 Authorization 标头中使用该 JWT。例如:
curl -i http://localhost:8000/hello -H "Authorization: Bearer eyJhbGciOiJ..dXDefZEA"
生成新的 JWT
您可以使用 edgemicro token 命令或 API 为 Edge Microgateway 生成 JWT。例如:
edgemicro token get -o docs -e test -i G0IAeU864EtBo99NvUbn6Z4CBwVcS2 -s uzHTbwNWvoSmOy
此命令会请求 Apigee Edge 生成一个 JWT,然后可使用该 JWT 来验证 API 调用。-i 和 -s 参数是您 Apigee Edge 组织中某个开发者应用的消费者 ID 和密文值。
或者,您也可以使用管理 API 生成 JWT:
curl -i -X POST "http://org-env.apigee.net/edgemicro-auth/token" \ -H "Content-Type: application/json" \ -d '{ "client_id": "your consumer key", "client_secret": "your consumer secret", "grant_type": "client_credentials" }'
其中:
- org 是您的 Edge 组织名称(您必须是组织管理员)。
- env 是您组织中的环境(例如“test”或“prod”)。
- client_id 是您之前创建的开发者应用中的消费者 ID。
- client_secret 是您之前创建的开发者应用中的 Consumer Secret。
什么是密钥轮替?
在最初生成 JWT 之后的一段时间内,您可能需要更改存储在 Edge 加密 KVM 中的公钥/私钥对。生成新密钥对的过程称为密钥轮替。轮替密钥时,会生成一个新的私钥/公钥对,并将其存储在 Apigee Edge 组织/环境中的“microgateway”KVM 中。此外,旧的公钥及其原始密钥 ID 值会保留下来。
为了生成 JWT,Edge 会使用存储在加密 KVM 中的信息。您在首次设置(配置)Edge Microgateway 时,系统会创建名为 microgateway 的 KVM 并使用密钥填充该 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。如果验证失败,则会使用旧公钥,直到其过期(30 分钟后)。这样,您就可以“轮换”密钥,而不会立即中断 API 流量。
如何进行密钥轮替
本部分介绍如何执行密钥轮替。
如果您在 2.5.2 版之前配置了 Edge Microgateway 实例
如果您在 2.5.2 之前的版本中配置了 Edge Microgateway 实例,则必须运行以下两个命令来升级 KVM 和身份验证政策:
upgradekvm -o org -e env -u username
如需详细了解此命令,请参阅升级 KVM。
以下命令会升级在您配置 Edge Microgateway 时部署到 Apigee 组织的 edgemicro-oauth 代理。此代理提供生成令牌所需的服务。
upgradeauth -o org -e env -u username
如需详细了解此命令,请参阅升级 edgemicro-auth 代理。
轮替密钥
将以下行添加到 ~/.edgemicro/org-env-config.yaml 文件中,您必须在其中指定您配置微网关使用的相同组织和环境:
jwk_public_keys: 'https://org-env.apigee.net/edgemicro-auth/jwkPublicKeys'
运行密钥轮替命令以轮替密钥。(如需详细了解此命令,请参阅轮替密钥。)
edgemicro rotatekey -o org -e env -u username -k kid_value
例如:
edgemicro rotatekey -o jdoe -e test -u jdoe@google.com -k 2 current nodejs version is v6.9.1 current edgemicro version is 2.5.7 password: Checking if private key exists in the KVM... Checking for certificate... Found Certificate Generating New key/cert pair... Extract new public key Key Rotation successfully completed!
-k 参数指定密钥 ID (kid)。此 ID 用于匹配特定密钥。
Edge Microgateway 在密钥轮替期间使用此值从一组密钥中进行选择。如需了解详情,请参阅 JSON Web 密钥规范的第 4.5 部分。
密钥轮替后,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"
}
]
}过滤下载的代理
默认情况下,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 myorg -e test -k db4e9e8a95aa7fabfdeacbb1169d0a8cbe42bec19c6b98129e02 -s 6e56af7c1b26dfe93dae78a735c8afc9796b077d105ae5618ce7ed - 启动调试程序,并将其设置为侦听调试流程的端口号。
- 现在,您可以逐步执行 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。
使用 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
(在 v2.5.31 中添加)将客户端凭据作为基本身份验证标头发送,并将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 属性之间没有任何区别。您可以使用其中任一方法。
{ "token": "eyJraWQiOiIxIiwidHlwIjoi", "access_token": "eyJraWQiOiIxIiwid", "token_type": "bearer", "expires_in": "108000" }
如何获取刷新令牌
如需获取刷新令牌,请向 edgemicro-auth 代理的 /token 端点发出 API 调用。您必须使用 password 授权类型进行此 API 调用。以下步骤将引导您完成此流程。
- 使用
/tokenAPI 获取访问令牌和刷新令牌。请注意,授权类型为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 会返回访问令牌和刷新令牌。响应类似于以下内容:
{ "token": "your-access-token", "access_token": "your-access-token", "token_type": "bearer", "expires_in": "108000", "refresh_token": "your-refresh-token", "refresh_token_expires_in": "431999", "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 Microgateway 可以从该端点下载其配置文件。您可以使用 -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,请执行以下操作:
- 确保您已安装 Edge Microgateway 2.5.25 或更高版本。如果不是,您必须执行以下命令才能升级到最新版本:
npm install -g edgemicro
如果您需要帮助,请参阅安装 Edge Microgateway。
- 创建名为
$HOME/.edgemicro/org_name-env_name-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_name -e environment_name -a local_proxy_name \ -v local_proxy_version -t target_url -b base_path
其中:
- your_org 是您在配置文件名中使用的“组织”名称。
- your_environment 是您在配置文件名称中使用的“env”名称。
- local_proxy_name 是将要创建的本地代理的名称。您可以使用任何名称。
- local_proxy_version 是代理的版本号。
- target_url 是代理的目标网址。(目标是代理调用的服务。)
- 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,该 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。例如:
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选项用于指定开发者应用中的 Consumer Secret,该应用的产品包含edgemicro-auth代理。
此命令会请求 Apigee Edge 生成一个 JWT,然后可使用该 JWT 来验证 API 调用。
另请参阅生成令牌。测试独立配置
如需测试配置,请调用 API,并在 Authorization 标头中添加令牌,如下所示:
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 中,其中微网关和服务各自在单个 pod 中运行,并且微网关管理其配套服务的入站和出站流量。下图展示了此架构,其中 Edge Microgateway 在 Kubernetes 集群中充当边车代理。每个微网关实例仅与其配套服务上的单个端点通信:

这种架构风格的优势在于,Edge Microgateway 可为部署到容器环境(例如 Kubernetes 集群)的各个服务提供 API 管理。
配置本地代理模式
如需配置 Edge Microgateway 以在本地代理模式下运行,请按以下步骤操作:
- 确保您已安装 Edge Microgateway 2.5.25 或更高版本。如果不是,您必须执行以下命令才能升级到最新版本:
npm install -g edgemicro
如果您需要帮助,请参阅安装 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,并返回启动微网关所需的密钥和密文。如果您需要帮助,请参阅配置 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时返回的密钥。 - 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":""
}