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 上所做的更改,例如对 Microgateway 感知代理、产品或开发者应用所做的更改。默认轮询间隔为 600 秒;不过,您可以使用 config_change_poll_interval 配置设置更改间隔。请参阅 edgemicro 属性
如果您不想等待轮询间隔,请使用 edgemicro reload 命令获取最新更改。请参阅 重新加载微网关集群
如何区分部署在 Edge 上的代理与部署在 Edge Microgateway 上的代理?
在您配置 Edge Microgateway 时,系统会将部署在 Apigee Edge 上的 Microgateway 感知代理列表下载到 Edge Microgateway 的本地配置。微网关感知型代理的名称以 edgemicro_ 为前缀。
使用 Edge Microgateway 进行日志记录时,有哪些选项?
Edge Microgateway 具有内置日志记录功能。如需了解详情,请参阅 管理日志文件
您还可以编写自定义插件,以便将第三方日志记录服务与 Edge Microgateway 搭配使用。由于 Edge Microgateway 的工作原理,您无法使用 Apigee Edge 消息日志记录政策记录 Edge Microgateway 的消息。另请参阅 适用于 Microgateway 的 Logging 插件社区文章。
我可以在 Edge Microgateway 实例之间重复使用密钥/Secret 组合吗?
只要 Microgateway 实例的组织和环境相同,您就可以重复使用配置期间生成的密钥/密文对。
如何将 Edge Microgateway 配置为在生产环境中启动?
您可以为启动命令参数设置环境变量,例如 EDGEMICRO_KEYEDGEMICRO_SECRETEDGEMICRO_ORGEDGEMICRO_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 configureupgradeauth 命令会调用以下管理 API:

  • (list deployments) GET: https://api.enterprise.apigee.com/v1/o/[org]/apis/edgemicro-auth/deployments
  • (get deployment info) 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
  • (create api proxy) 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
  • (upload proxies) POST: https://api.enterprise.apigee.com/v1/o/[org]/apis/edgemicro-auth/revisions/1/proxies?name=default
  • (deploy proxy) POST: https://api.enterprise.apigee.com/v1/o/[org]/e/[env]/apis/edgemicro-auth/revisions/1/deployments

upgradekvm 命令会调用以下 Management 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 上非 Microgateway API 代理部署。
Edge Microgateway 的高可用性部署模型是什么?
如需详细了解如何使用 NGINX 作为负载平衡器运行 Edge Microgateway,请参阅 使用 Apigee Edge Microgateway 和 NGINX 管理 API
我可以将哪些负载平衡器与 Edge Microgateway 搭配使用?
Edge Microgateway 可与任何负载平衡器搭配使用。
我可以部署的 Edge Microgateway 代理数量是否有限制?
请参阅为常规 Edge 代理指定的产品配置限制。您可以在 Apigee Edge 组织和环境中部署并通过 Edge Microgateway 调用的 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 建议在由 NGINX 等负载平衡器充当前端的不同服务器上运行多个 Edge Microgateway 实例。另请参阅 Apigee 社区中的 使用 Apigee Edge Microgateway 和 NGINX 管理 API 纵向横向扩缩
默认情况下,什么是 Edge Microgateway TPS,以及 Microgateway 实例需要哪些硬件要求
使用 Edge Microgateway 时,很难评估硬件要求和 TPS 测量结果。这取决于您的设置,您的设置包括调整 Edge Microgateway、插件使用情况、自定义插件以及配置 TLS 等其他功能。Apigee 通常建议您了解这些组合项,并使用您的具体设置进行性能测试。

私有云部署

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

插件

Edge Microgateway 如何强制执行配额?
您可以选择向 Edge Microgateway 实例添加配额插件。如需了解详情,请参阅使用配额插件
如何使用 Edge Microgateway 强制执行 Spike Arrest?
您可以选择向 Edge Microgateway 实例添加突发流量抑制插件。如需了解详情,请参阅使用突发流量抑制插件
除了 Node.js 之外,是否还有其他方法可以为 Edge Microgateway 编写插件?
不能。插件必须以 Node.js 编写。
如果 Edge Microgateway 无法将 Google Analytics 数据上传到 Edge,会发生什么情况?
Edge Microgateway 具有内存缓冲区。如果缓冲区已满,系统会丢弃较早的载荷,以便 API 流量顺畅传输。
我可以向 Edge Microgateway 添加政策吗?
如果您将常规 Apigee Edge 政策附加到 Apigee Edge 中 microgateway-aware 代理,这些政策会被忽略。不过,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 诗节应如下所示:
    <HTTPProxyConnection>
        <BasePath>/edgemicro-auth</BasePath>
        <Properties/>
        <VirtualHost>mutualtls</VirtualHost>
    </HTTPProxyConnection>
    
验证 /products 资源是否受保护
本部分介绍如何进行测试以检查 /products 资源是否受到保护。请务必在完成保护资源的步骤(选项 1 或选项 2)后执行此测试。您可以使用 c网址 执行此操作,例如:
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

如果 c网址 调用返回 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 资源吗?

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

例如:

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

另请参阅 Apigee 社区中的 在产品中使用 edgemicro 网关时,哪些网址需要在“资源”下使用的商品中列入许可名单?

我可以将自定义 SSL 证书与 Edge Microgateway 一起使用吗?

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

解决方法

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

  • 使用非 SSL jwt_public_key 端点。修改 Edge Microgateway 配置文件以使用 http://{org}-{env}.apigee.net/edgemicro-auth/publicKey -or-
  • 在启动 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]
密钥和 Secret 可能因某种原因而无效。最好使用 edgemicro genkeys 命令重新生成密钥和密文。

测试和调试

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

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

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

快速开发和调试的技巧

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

目前,请参考以下提示:

  • 如需启动 Edge Microgateway,您可以将环境变量 EDGEMICRO_KEY 和 EDGEMICRO_SECRET 设置为 Microgateway 启动命令所需的密钥/密文对。 这样,您无需在命令行中输入密钥/密钥即可启动 Edge Microgateway。另请参阅 Edge Microgateway 文档中的 设置环境变量
  • 在 DEBUG 模式下启动 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 报告。