Edge Microgate 常见问题解答

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

使用入门

如何安装 Edge Microgateway?
请参阅安装 Edge Microgateway。
如何运行 Edge Microgateway?
请参阅 设置和配置 Edge Microgateway。
我需要数据库才能运行 Microgateway 吗?
通过 Edge Microgateway 代理的 API 可以与作为目标服务一部分运行的数据库进行交互。不过,Edge Microgateway 的运行独立于任何数据库或后端数据存储区。

操作

Edge 上的哪些更改需要重启 Edge Microgateway?
Edge Microgateway 会自动轮询 Apigee Edge 上所做的更改,例如对支持微网关的代理、产品或开发者应用所做的更改。默认轮询间隔为 600 秒;不过,您可以使用 config_change_poll_interval 配置设置更改间隔。 请参阅 Edge Micro 属性。
如果您不想等待轮询间隔,请使用 edgemicro reload 命令来获取最新更改。请参阅 重新加载微网关集群。
如何区分部署在 Edge 上的代理与 Edge Microgateway 上的代理?
配置 Edge Microgateway 时,系统会将部署在 Apigee Edge 上的支持 Microgateway 的代理列表下载到 Edge Microgateway 的本地配置中。以 edgemicro_ 为前缀命名的代理是支持微网关的代理。
使用 Edge Microgateway 进行日志记录有哪些选项?
Edge Microgateway 具有内置的日志记录功能。如需了解详情,请参阅 管理日志文件。
您还可以编写自定义插件,以便将第三方日志记录服务与 Edge Microgateway 搭配使用。由于 Edge Microgateway 的工作方式,您无法使用 Apigee Edge Message Logging 政策来记录 Edge Microgateway 的消息。另请参阅 适用于 Microgateway 的日志记录插件社区文章。
能否在 Edge Microgateway 的不同实例之间重复使用密钥/密钥组合?
只要 Microgateway 实例的组织和环境相同,您就可以重复使用在配置期间生成的密钥/密钥对。
如何配置 Edge Microgateway 以在生产环境中启动?
您可以为启动命令参数(例如 EDGEMICRO_KEY、EDGEMICRO_SECRET、EDGEMICRO_ORG 和 EDGEMICRO_ENV)设置环境变量。 借助这些(以及其他)变量,您可以使用单个命令 edgemicro start 启动 Edge Microgateway。另请参阅 设置环境变量。
能否将自定义产品或开发者应用属性与 Edge Microgateway 搭配使用?
否。默认情况下,Edge Microgateway 仅处理与基本路由和安全相关的属性。不过,您可以使用以下可能的解决方法:
  1. 向 Edge Microgateway 部署到 Apigee Edge 的 edgemicro-auth 代理添加自定义属性。使用 API 密钥或 OAuth 令牌安全机制时,这些属性将可用。
  2. 修改 OAuth 插件以处理这些属性。
请求标头大小是否有限制?
如果您将 Node.js 升级到 v8.14.0 或更高版本,请注意,请求中允许的最大标头大小已从 80KB 减少到 8KB。 如果标头超过 8KB,则会导致 HTTP 431 错误。
Node.js v11.6.0 中添加了一个 Node.js 配置选项,可用于更改默认的最大标头大小。借助此参数 --max-http-header-size,您可以指定 HTTP 标头的最大大小(以字节为单位)。
如需更改默认配置,请在命令行中设置 NODE_OPTIONS 环境变量的值,如下所示:
NODE_OPTIONS=--max-http-header-size=NUM_BYTES

例如:

NODE_OPTIONS=--max-http-header-size=80000

Edge Microgateway 使用哪些管理 API?

以下 Edge Microgateway 命令会调用 Apigee Edge 管理 API 来执行其工作,如 Edge Microgateway 的 CLI 参考文档中所述:

  • edgemicro configure
  • edgemicro upgradeauth
  • edgemicro upgradekvm
  • edgemicro rotatekey
  • edgemicro cert check
  • edgemicro cert delete
  • edgemicro cert install

以下部分列出了每个命令使用的管理 API 调用。

edgemicro configure 和 upgradeauth 命令会调用以下管理 API:

  • (列出部署)GET: https://api.enterprise.apigee.com/v1/o/[org]/apis/edgemicro-auth/deployments
  • (获取部署信息)GET: https://api.enterprise.apigee.com/v1/o/[org]/apis/edgemicro-auth
  • (上传资源)POST: https://api.enterprise.apigee.com/v1/o/[org]/apis/edgemicro-auth/revisions/1/resources?type=java&name=micro-gateway-products-javacallout-2.0.0.jar
  • (上传资源)POST: https://api.enterprise.apigee.com/v1/o/[org]/apis/edgemicro-auth/revisions/1/resources?type=jsc&name=adjust-quota.js
  • (上传资源)POST: https://api.enterprise.apigee.com/v1/o/[org]/apis/edgemicro-auth/revisions/1/resources?type=jsc&name=generate-jwk.js
  • (上传资源)POST: https://api.enterprise.apigee.com/v1/o/[org]/apis/edgemicro-auth/revisions/1/resources?type=jsc&name=generate-verify-jwt.js
  • (上传资源)POST: https://api.enterprise.apigee.com/v1/o/[org]/apis/edgemicro-auth/revisions/1/resources?type=jsc&name=jsrsasign-all-min.js
  • (上传资源)POST: https://api.enterprise.apigee.com/v1/o/[org]/apis/edgemicro-auth/revisions/1/resources?type=jsc&name=jwt-initialization.js
  • (上传资源)POST: https://api.enterprise.apigee.com/v1/o/[org]/apis/edgemicro-auth/revisions/1/resources?type=jsc&name=send-jwk-response.js
  • (上传资源)POST: https://api.enterprise.apigee.com/v1/o/[org]/apis/edgemicro-auth/revisions/1/resources?type=jsc&name=send-product-list.js
  • (上传资源)POST: https://api.enterprise.apigee.com/v1/o/[org]/apis/edgemicro-auth/revisions/1/resources?type=jsc&name=send-public-key.js
  • (上传资源)POST: https://api.enterprise.apigee.com/v1/o/[org]/apis/edgemicro-auth/revisions/1/resources?type=jsc&name=set-jwt-variables.js
  • (上传资源)POST: https://api.enterprise.apigee.com/v1/o/[org]/apis/edgemicro-auth/revisions/1/resources?type=jsc&name=set-quota-variables.js
  • (上传资源)POST: https://api.enterprise.apigee.com/v1/o/[org]/apis/edgemicro-auth/revisions/1/resources?type=jsc&name=set-response.js
  • (上传资源)POST: https://api.enterprise.apigee.com/v1/o/[org]/apis/edgemicro-auth/revisions/1/resources?type=jsc&name=validate-params.js
  • (创建 API 代理)POST: https://api.enterprise.apigee.com/v1/o/[org]/apis?action=import&validate=false&name=edgemicro-auth
  • (上传政策)POST: https://api.enterprise.apigee.com/v1/o/[org]/apis/edgemicro-auth/revisions/1/policies
  • (上传代理)POST: https://api.enterprise.apigee.com/v1/o/[org]/apis/edgemicro-auth/revisions/1/proxies?name=default
  • (部署代理)POST: https://api.enterprise.apigee.com/v1/o/[org]/e/[env]/apis/edgemicro-auth/revisions/1/deployments

upgradekvm 命令会调用以下管理 API:

  • PUT: https://api.enterprise.apigee.com/v1/organizations/[org]/environments/[env]/keyvaluemaps/microgateway

rotatekey 命令会调用以下管理 API:

  • GET: https://api.enterprise.apigee.com/v1/organizations/[org]/environments/[env]/keyvaluemaps/microgateway/entries/private_key

cert check 命令会调用以下管理 API:

  • GET: https://api.enterprise.apigee.com/v1/organizations/[org]/environments/[env]/keyvaluemaps/microgateway

cert delete 命令会调用以下管理 API:

  • DELETE: https://api.enterprise.apigee.com/v1/organizations/[org]/environments/[env]/keyvaluemaps/microgateway

cert install 命令会调用以下管理 API:

  • POST: https://api.enterprise.apigee.com/v1/organizations/[org]/environments/[env]/keyvaluemaps

部署

能否在目标服务运行的同一服务器上部署 Edge Microgateway?
能。Edge Microgateway 是一种轻量级进程,可以靠近目标服务运行,包括在同一台机器上运行。
我可以将现有的 Edge 代理软件包部署为 Edge Microgateway 部署吗?
否。支持 Edge Microgateway 的代理具有特定要求,不支持常规 Edge 代理的所有功能。请参阅第 2 部分:在 Apigee Edge 上创建实体
能否为同一 API 代理在 Edge 代理软件包部署和 Edge Microgateway 部署之间启用故障切换?
不能。Edge Microgateway 不了解 Apigee Edge 上非微网关 API 代理的部署。
Edge Microgateway 的高可用性部署模型是什么?
如需详细了解如何使用 NGINX 作为负载均衡器来运行 Edge Microgateway,请参阅 使用 Apigee Edge Microgateway 和 NGINX 管理 API。
哪些负载均衡器可与 Edge Microgateway 搭配使用?
Edge Microgateway 可与任何负载均衡器搭配使用。
我可以部署的 Edge Microgateway 代理数量是否有限制?
请参阅为常规 Edge 代理指定的产品配置限制。您可以在 Apigee Edge 组织和环境中部署并可通过 Edge Microgateway 调用的支持微网关的代理数量必须符合这些相同的限制。
能否将 Edge Microgateway 部署与特定组织和环境相关联?
配置 Edge Microgateway 实例时,您必须将其与特定的 Edge 组织和环境相关联。
如果我是多区域客户,是否可以将 Edge Microgateway 部署与特定区域相关联?
Edge Microgateway 会自动选择与 Apigee Edge 交互的最佳区域。 您可以在要提供服务的每个区域中部署 Edge Microgateway 实例。

管理

我是否需要成为组织管理员才能配置和部署 Edge Microgateway?
能。您需要拥有组织管理员凭据才能配置和部署 Edge Microgateway。
我是否需要成为组织管理员才能运行 Edge Microgateway?
否。Edge Microgateway 是一款 Node.js 应用,任何有权在给定机器上运行此类应用的人都可以运行它。
我组织中的任何用户都可以使用 Edge Microgateway 吗?
您无需成为 Apigee Edge 组织用户,即可通过 Edge Microgateway 进行 API 调用。不过,您必须拥有组织级权限,才能创建或更改部署在 Edge 上的 Edge Microgateway 感知代理。

性能

使用 Edge Microgateway 时需要考虑哪些性能因素?
如果 Edge Microgateway 与目标应用并置运行,请确保服务器具有足够的容量。
大规模运行 Edge Microgateway 的最佳实践是什么?
Apigee 建议在不同的服务器上运行多个 Edge Microgateway 实例,这些实例由 NGINX 等负载均衡器提供支持。另请参阅 Apigee 社区中的 使用 Apigee Edge Microgateway 和 NGINX 管理 API 和 垂直水平扩缩。
Edge Microgateway 的默认 TPS 是多少?Microgateway 实例需要哪些硬件要求
Edge Microgateway 难以衡量硬件要求和 TPS。这取决于您的设置,包括调整 Edge Microgateway、插件使用情况、自定义插件以及配置 TLS 等其他事项。Apigee 通常建议您了解这些项的组合,并使用您的特定设置进行性能测试。

私有云部署

Edge Microgateway 是否适用于 Edge Private Cloud?
能。如需了解详情,请参阅 Apigee Private Cloud 配置步骤。

插件

如何通过 Edge Microgateway 强制执行配额?
您可以选择向 Edge Microgateway 实例添加配额插件。如需了解详情,请参阅使用配额插件。
Edge Microgateway 如何强制执行 Spike Arrest?
您可以选择向 Edge Microgateway 实例添加突峰抑制插件。如需了解详情,请参阅使用流量突增抑制插件。
除了 Node.js 之外,还有其他方式可以为 Edge Microgateway 编写插件吗?
不可以。插件必须用 Node.js 编写。
如果 Edge Microgateway 无法将 Analytics 数据上传到 Edge,会发生什么情况?
Edge Microgateway 具有内存缓冲区。如果缓冲区填满,系统会丢弃较旧的载荷,以确保 API 流量顺畅传输。
我可以向 Edge Microgateway 添加政策吗?
如果您将常规 Apigee Edge 政策附加到 Apigee Edge 中的支持微网关的代理,系统会忽略这些政策。相反,Edge Microgateway 使用插件来提供与 Edge 中的政策类似的功能,例如配额、突发流量限制、API 密钥安全性和 OAuth2 安全性。您还可以编写自定义插件。请参阅使用插件和开发自定义插件。

以下 Apigee 社区帖子和博客讨论了其他插件使用场景:

安全

如何保护 /products 资源?
概览
当您配置 Edge Microgateway 时,系统会将名为 edgemicro-auth 的 API 代理部署到 Apigee Edge 上的组织:环境。此代理公开了一个 /products 端点,用于返回 API 产品列表。如果您在 2018 年 10 月 5 日或之前安装了 Edge Microgateway,Apigee 建议您采取措施来保护此端点,因为响应包含在您的 Apigee 组织中创建和修改 API 产品的开发者的电子邮件地址。
您可以通过升级 Edge Microgateway 或配置双向 TLS 来保护端点。下文将介绍这两种方式。
检查 /products 端点是否受保护

如果您不确定 /products 端点是否受到保护,请前往验证 /products 资源是否受到保护部分,按照其中的步骤操作,然后再继续。

方法 1:升级 Edge Microgateway

如果您在 2018 年 10 月 5 日或之前安装了 Edge Microgateway,Apigee 建议您升级到最新版本的 Edge Microgateway。按照 升级 Edge Microgateway(如果您有互联网连接)中的步骤操作。

如果您目前无法升级,请参阅“方法 2”。

方法 2:配置双向 TLS

如果您目前无法升级 Edge Microgateway,Apigee 建议您使用双向 TLS(也称为双向 TLS)来保护 Edge Microgateway 与 edgemicro-auth 代理之间的通信。

  1. 打开文件 $HOME/.edgemicro/org-env-config.yaml。如果您找不到此文件,请参阅 Edge Microgateway 安装在何处。
  2. 将以下 tlsOptions 块添加到 org-env-config.yaml 文件,以在 Edge Microgateway 和 Apigee Edge 之间启用双向 TLS:
    edge_config:
      bootstrap: >-
        https://domain/edgemicro/bootstrap/organization/org/environment/env
      jwt_public_key: 'https://domain/edgemicro-auth/publicKey'
      managementUri: 'https://api.enterprise.apigee.com'
      tlsOptions:
        agentOptions:
          requestCert: true
          cert: 'path/to/cert'
          key: 'path/to/key'

    例如:

    tlsOptions:
      agentOptions:
        requestCert: true
        cert: '/Users/jdoe/twowayssl/ssl/client.key'
        key: '/Users/jdoe/twowayssl/ssl/ca.crt'

    您还可以添加以下可选的 agentOptions 参数:

    • ca:指定证书授权机构的路径。
    • pfx:如果您希望使用 p12/pfx 文件而不是证书和密钥,请添加此参数。
    • passphrase:pfx 文件的口令。
    • ciphers:指定 TLS 加密方式。
  3. 确保部署 edgemicro-auth 代理的虚拟主机已启用双向 TLS。 如需了解详情,请参阅 Apigee Edge 文档中的为双向 TLS 定义虚拟主机。

    以下屏幕截图展示了如何在 Apigee Edge 界面中对虚拟主机启用双向 TLS:

  4. 查看 Edge 界面中的 edgemicro-auth API 代理,并确保在代理配置中指定了正确的虚拟主机。例如,如果您创建了名为 mutualtls 的启用 TLS 的虚拟主机,则代理的 HTTPProxyConnection stanza 应如下所示:
    <HTTPProxyConnection>
        <BasePath>/edgemicro-auth</BasePath>
        <Properties/>
        <VirtualHost>mutualtls</VirtualHost>
    </HTTPProxyConnection>
验证 /products 资源是否受到保护
本部分介绍了如何通过测试来检查 /products 资源是否受到保护。请务必在完成保护资源的相关步骤(方法 1 或方法 2)后执行此测试。您可以使用 cURL 执行此操作,例如:
curl -v https://your_domain/edgemicro-auth/products
如果您看到如下所示的响应,则表示 /products 端点受到保护:
{
  "error":"unauthorized",
  "error_description": "authentication failed"
}

或

curl: (35) error:1408F10B:SSL routines:ssl3_get_record:wrong version number

如果您看到类似如下所示的响应,则表示 /products 资源未受保护,开发者电子邮件地址可能会泄露:

{
   "apiProduct":[
      {
         "apiResources":[
            "/",
            "/**"
         ],
         "approvalType":"auto",
         "attributes":[

         ],
         "createdAt":1537374680948,
         "createdBy":"jdoe@foo.com",
         "description":"",
         "displayName":"mock",
         "environments":[
            "test"
         ],
         "lastModifiedAt":1537374680948,
         "lastModifiedBy":"test@test.com",
         "name":"mock",
         "proxies":[
            "edgemicro-auth",
            "edgemicro_mock"
         ],
         "quota":"null",
         "quotaInterval":"null",
         "quotaTimeUnit":"null",
         "scopes":[
            ""
         ]
      }
   ]
}

Apigee 还建议您测试 HTTP 虚拟主机:

例如:

curl -v http://your_domain/edgemicro-auth/products

如果 cURL 调用返回 API 产品列表,则开发者电子邮件地址可能已泄露。如果您不希望通过此非 TLS 虚拟主机公开端点,请务必将其从 edgemicro-auth HTTPProxyConnection 配置中移除。

如需保护资源,请执行以下任一操作:

如何续订已过期的访问令牌?

目前,您无法续订特定 Edge Microgateway 实例的 JWT 令牌。

临时解决方法:

每个 JWT 令牌都有一个 exp 属性,用于指明令牌的失效日期。应用可以直接向 edgemicro-auth 令牌端点发出 API 调用,以计算过期时间并请求新令牌。例如,您可以进行如下 API 调用:

POST https: //{your_org}-{your_env}.apigee.net/edgemicro-auth/token

…,并包含如下 JSON 正文:

{ "client_id": {your_id}, "client_secret": {your_secret}, "grant_type": "client_credentials" }

另请参阅:

在 Windows 上配置 SSL
如果您在 Windows 上运行 Edge Microgateway,则必须在机器上安装 OpenSSL 并将其添加到 PATH 中。 并非所有 Windows 机器都随附 OpenSSL。如需了解如何下载和安装 OpenSSL,请参阅 OpenSSL 文档。
是否可以使用与支持 Edge Micro 的代理相关联的 API 产品来允许访问 API 资源?

目前,系统仅检查基本路径,以确定与特定 OAuth 令牌关联的 API 产品是否已获批使用相应 API。

例如:

  1. 您可以使用基本路径和目标创建带有 edgemicro_ 前缀的代理。
  2. 您将此代理添加到产品中。我们将其称为 edgemicro-prod1。
  3. 当通过 Edge Microgateway 使用 API 密钥或 OAuth 令牌进行 API 调用时,Edge Microgateway 会检查 API 的基本路径是否与已获批的 edgemicro_* 代理的基本路径相匹配,该代理已获批用于该密钥或令牌获批的产品列表。

另请参阅 Apigee 社区中的 When using the edgemicro gateway in the products which url needs whitelisting in the products used under resources?。

能否将自定义 SSL 证书与 Edge Microgateway 搭配使用?

目前仅支持默认 Apigee SSL 证书。目前不支持自定义 SSL 证书。

解决方法:

如果您希望使用自定义(非 Apigee 默认)SSL 证书,可以选择以下方式:

  • 使用非 SSL jwt_public_key 端点。修改 Edge Microgateway 配置文件以使用 http://{org}-{env}.apigee.net/edgemicro-auth/publicKey -或-
  • 在启动 Edge Microgateway 之前,请设置以下环境变量:export NODE_TLS_REJECT_UNAUTHORIZED ="0"

另请参阅 Apigee 社区中的 验证 SSL 证书上的 Edge Micro 安装错误。

能否避免将组织管理员账号与 Edge Microgateway 搭配使用?
Edge Microgateway 配置脚本会将 edgemicro-auth 代理部署到 Edge,而此部署需要组织管理员凭据。
不过,在完成此初始部署后,您应该能够完成剩余的设置和配置,而无需组织管理员凭据。另请参阅这篇关于 组织管理员凭据的社区帖子。
能否将自己的 OAuth 令牌用于 Edge Microgateway?

您可以使用自己的令牌,但首先必须关闭 Edge Microgateway 的内置授权。具体操作步骤如下:

  1. 打开 Edge Microgateway 的配置文件。
  2. 将两项 OAuth 设置更改为 true,如下所示:

    oauth:
        allowNoAuthorization: true
        allowInvalidAuthorization: true
启动 Edge Microgateway 时,我收到“访问遭拒”错误
如果您在运行此命令来启动 Edge Microgateway 时收到“拒绝访问”错误,请执行以下操作
:
edgemicro start -o [org] -e [env] -k [key] -s [secret]
可能是密钥和密钥不正确。最好的做法是使用 edgemicro genkeys 命令重新生成密钥和密钥。

测试和调试

如何在负载测试期间防止出现“打开的文件过多”错误?

在某些情况下,系统可能会遇到打开的文件连接过多的情况,这可能会导致 Edge Micro 崩溃。默认日志记录需要通过微网关建立两个 HTTP 连接,分别用于传入和传出事务。

出于测试和基准比较目的,Apigee 建议将系统的 ulimit 命令设置为 unlimited:ulimit -n unlimited。另请参阅 Apigee 社区中的负载测试期间的 Edge Microgateway 错误。

快速开发和调试技巧

如果您正在为 Edge Microgateway 开发插件,可能会发现对快速开发的支持有限。

目前,您可以参考以下提示:

  • 对于启动 Edge Microgateway,您可以将环境变量 EDGEMICRO_KEY 和 EDGEMICRO_SECRET 设置为 Microgateway 启动命令所需的密钥/密钥对。 这样,您就可以启动 Edge Microgateway,而无需在命令行中输入密钥/Secret。另请参阅 Edge Microgateway 文档中的 设置环境变量。
  • 以调试模式启动 Edge Microgateway,以便在命令终端中查看其他输出: DEBUG=* edgemicro start -o [org] -e [env] -k [key] -s [secret]

业务和许可

Apigee-127 与 Edge Microgateway 支持模式之间有何关系?

Apigee-127 是一个开源软件项目,以开源模式提供支持。也就是说,您可以在 GitHub 项目中提出问题,并尝试修复问题,然后提交拉取请求。Apigee-127 不需要或不包含与 Apigee 签订的任何软件许可协议。

另一方面,Edge Microgateway 是一款企业产品,Apigee 为 Apigee 客户提供支持。也就是说,Apigee 客户可以使用 Google Cloud Apigee Edge 支持来创建支持服务工单、功能请求和 bug 报告。