Edge Microgate 操作和配置参考

您正在查看 Apigee Edge 文档。
前往 Apigee X 文档
信息

Edge Microgateway v. 3.0.x

本主题讨论如何管理和配置 Edge Microgateway。

在已连接到互联网的情况下升级 Edge Microgateway

本部分介绍了如何升级 Edge Microgateway 的现有安装。 如果您在没有网络连接的情况下操作,请参阅我可以在没有网络连接的情况下安装 Edge Microgateway 吗?

Apigee 建议您先使用新版本测试现有配置,然后再升级生产环境。

  1. 执行以下 npm 命令,以升级到最新版本的 Edge Microgateway:
    npm upgrade edgemicro -g

    如需升级到特定版本的 Edge Microgateway,您需要在升级命令中指定版本号如果您未指定版本号,系统将安装最新版本。例如,如需升级到 3.0.2 版,请使用以下命令:

    npm upgrade edgemicro@3.0.2 -g
  2. 查看版本号。例如,如果您安装了 3.0.2 版:
    edgemicro --version
    current nodejs version is v12.5.0
    current edgemicro version is 3.0.2
        
  3. 最后,升级到最新版本的 edgemicro-auth 代理:
    edgemicro upgradeauth -o org_name -e env_name -u username

进行配置更改

您需要了解的配置文件包括:

  • 默认系统配置文件
  • 新初始化的 Edge Microgateway 实例的默认配置文件
  • 运行实例的动态配置文件

本部分讨论了这些文件,以及您需要了解的有关更改这些文件的信息。

默认系统配置文件

安装 Edge Microgateway 时,系统会将默认配置文件放置在此处:

prefix/lib/node_modules/edgemicro/config/default.yaml

其中,prefixnpm 前缀目录。如果您找不到此目录,请参阅 Edge Microgateway 安装在何处

如果您更改了系统配置文件,则必须重新初始化、重新配置并重新启动 Edge Microgateway:

edgemicro init
edgemicro configure [params]
edgemicro start [params]

新初始化的 Edge Microgateway 实例的默认配置文件

运行 edgemicro init 时,系统配置文件(如上所述)default.yaml 会放置在 ~/.edgemicro 目录中。

如果您更改了 ~/.edgemicro 中的配置文件,则必须重新配置并重启 Edge Microgateway:

edgemicro stop
edgemicro configure [params]
edgemicro start [params]

运行实例的动态配置文件

当您运行 edgemicro configure [params] 时,系统会在 ~/.edgemicro 中创建一个动态配置文件。该文件的命名方式如下:org-env-config.yaml,其中 orgenv 是您的 Apigee Edge 组织和环境名称。您可以使用此文件进行配置更改,然后以零停机时间重新加载这些更改。例如,如果您添加并配置了插件,则可以重新加载配置,而不会造成任何停机时间,如下所述。

如果 Edge Microgateway 正在运行(零停机时间选项)

  1. 重新加载 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 已停止

  1. 重启 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_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 后,您可以通过 Edge Microgateway 使用“https”协议调用 API,如下所示:

https://localhost:8000/myapi

如需在微网关服务器上配置 SSL,请按以下步骤操作:

  1. 使用 openssl 实用程序或您喜欢的任何方法生成或获取 SSL 证书和密钥。
  2. 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
  3. 重启 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
  • quotaUri:如果您想通过部署到组织的 edgemicro-auth 代理管理配额,请设置此配置属性。如果未设置此属性,配额端点将默认为内部 Edge Microgateway 端点。
    edge_config:
      quotaUri: https://your_org-your_env.apigee.net/edgemicro-auth
    

    如需使用此功能,您必须先将 edgemicro-auth 代理的 3.0.5 版或更高版本部署到组织。如需了解详情,请参阅 升级 edgemicro-auth 代理

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)日志文件轮换间隔(以小时为单位)。
  • 插件:插件可为 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-1edgemicro_proxy-2edgemicro_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-healthedgemicro_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_tunneltrue,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_PROXYHTTPS_PROXYNO_PROXY

您可以将 NO_PROXY 设置为 Edge Microgateway 不应代理的网域的英文逗号分隔列表。例如:

export NO_PROXY='localhost,localhost:8080'

HTTP_PROXYHTTPS_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/membershttps://[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 v12.5.0
current edgemicro version is 3.0.2
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_”命名前缀开头的代理。您可以更改此默认设置,以便下载名称与某种模式匹配的代理。

  1. 打开 Edge Micro 配置文件:~/.edgemicro/org-env-config.yaml
  2. 在 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。这对于排查和调试自定义插件很有用。

  1. 在调试模式下重启 Edge Microgateway。为此,请将 DEBUG=* 添加到 start 命令的开头。例如:
    DEBUG=* edgemicro start -o  myorg -e test -k
          db4e9e8a95aa7fabfdeacbb1169d0a8cbe42bec19c6b98129e02 -s
          6e56af7c1b26dfe93dae78a735c8afc9796b077d105ae5618ce7ed
  2. 启动调试程序,并将其设置为侦听调试流程的端口号。
  3. 现在,您可以逐步执行 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 代码,具体取决于错误。(在版本 3.0.7 中发布)

如需启用此功能,请将 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_idclient_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_typeRFC 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 响应。请注意,tokenaccess_token 属性之间没有任何区别。您可以使用其中任一方法。
{
"token": "eyJraWQiOiIxIiwidHlwIjoi",
"access_token": "eyJraWQiOiIxIiwid",
"token_type": "bearer",
"expires_in": "108000"
}

如何获取刷新令牌

如需获取刷新令牌,请向 edgemicro-auth 代理的 /token 端点发出 API 调用。您必须使用 password 授权类型进行此 API 调用。以下步骤将引导您完成此流程。

  1. 使用 /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 会返回访问令牌和刷新令牌。响应类似于以下内容:

    {
        "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"
    }
  2. 现在,您可以通过调用同一 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,请执行以下操作

  1. 确保您已安装 Edge Microgateway 3.0.1 或更高版本。如果不是,您必须执行以下命令才能升级到最新版本:
    npm install -g edgemicro

    如果您需要帮助,请参阅安装 Edge Microgateway

  2. 创建名为 $HOME/.edgemicro/org_name-env_name-config.yaml 的配置文件。

    例如:

    vi $HOME/.edgemicro/foo-bar-config.yaml
  3. 将以下代码粘贴到文件中:
    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
  4. 导出以下环境变量,并将其值设为“1”:
    export EDGEMICRO_LOCAL=1
  5. 执行以下 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 /
  6. 测试配置。
    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 端点获取令牌:

  1. 您必须对 Edge Microgateway 执行标准设置和配置,才能将 edgemicro-auth 代理部署到 Apigee Edge 上的组织/环境。如果您之前已完成此步骤,则无需再次完成。
  2. 如果您将 Edge Microgateway 部署到 Apigee Cloud,则必须连接到互联网,以便从该端点获取 JWT。
  3. 停止 Edge Microgateway:
    edgemicro stop
  4. 在您之前创建的配置文件 ($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'
  5. 使用您在配置文件名称中使用的组织/环境名称,像之前一样重启 Edge Microgateway。例如:
    edgemicro start -o foo -e bar -a proxy1 -v 1 -t http://mocktarget.apigee.net -b /
  6. 从授权端点获取 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 集群中充当边车代理。每个微网关实例仅与其配套服务上的单个端点通信:

以 Sidecar 形式运行的 Edgemicro

这种架构风格的优势在于,Edge Microgateway 可为部署到容器环境(例如 Kubernetes 集群)的各个服务提供 API 管理。

配置本地代理模式

如需配置 Edge Microgateway 以在本地代理模式下运行,请按以下步骤操作:

  1. 确保您已安装 Edge Microgateway 3.0.1 或更高版本。如果不是,您必须执行以下命令才能升级到最新版本:
    npm install -g edgemicro

    如果您需要帮助,请参阅安装 Edge Microgateway

  2. 运行 edgemicro init 以设置本地配置环境,就像在典型的 Edge Microgateway 设置中一样。另请参阅配置 Edge Microgateway
  3. 运行 edgemicro configure,就像在典型的 Edge Microgateway 设置过程中一样。例如:
    edgemicro configure -o your_org -e your_env -u your_apigee_username

    此命令会将 edgemicro-auth 政策部署到 Edge,并返回启动微网关所需的密钥和密文。如果您需要帮助,请参阅配置 Edge Microgateway

  4. 在 Apigee Edge 上,创建一个 API 产品,并满足以下强制性配置要求(您可以根据需要管理所有其他配置):
    • 必须edgemicro-auth 代理添加到产品中。此代理在您运行 edgemicro configure 时自动部署。
    • 必须提供资源路径。Apigee 建议将此路径添加到产品:/**。如需了解详情,请参阅配置资源路径的行为。另请参阅 Edge 文档中的创建 API 产品
  5. 在 Apigee Edge 上,创建一个开发者,或者您也可以使用现有开发者(如果您愿意)。如需帮助,请参阅使用 Edge 管理界面添加开发者

  6. 在 Apigee Edge 上,创建一个开发者应用。您必须将刚刚创建的 API 产品添加到该应用中。如需帮助,请参阅在 Edge 管理界面中注册应用
  7. 在安装了 Edge Microgateway 的机器上,导出以下环境变量,并将其值设置为“1”。
    export EDGEMICRO_LOCAL_PROXY=1
  8. 执行以下 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":""
}