category
自托管网关是每个API管理服务中包含的默认托管网关的可选容器化版本。它对于将网关放置在托管API的相同环境中等场景非常有用。使用自托管网关改善API流量,满足API安全性和合规性要求。
本文解释了Azure API管理的自托管网关功能如何实现混合和多云API管理,介绍了其高级架构,并强调了其功能。
有关各种网关产品的功能概述,请参阅API管理中的API网关。
混合和多云API管理
自托管网关功能扩展了对混合和多云环境的API管理支持,并使组织能够通过Azure中的单个API管理服务高效、安全地管理本地和跨云托管的API。
使用自托管网关,客户可以灵活地将API管理网关组件的容器化版本部署到托管其API的相同环境中。所有自托管网关都通过与其联合的API管理服务进行管理,从而为客户提供所有内部和外部API的可见性和统一的管理体验。
每个API管理服务都由以下关键组件组成:
- 作为API公开的管理平面,用于通过Azure门户、PowerShell和其他支持的机制配置服务。
- 网关(或数据平面),负责代理API请求、应用策略和收集遥测数据
- 开发人员使用开发人员门户来发现、学习和使用API
默认情况下,所有这些组件都部署在Azure中,导致所有API流量(如下图中的实心黑色箭头所示)流经Azure,而不管实现API的后端托管在何处。这种模式的操作简单性是以增加延迟、合规性问题以及在某些情况下额外的数据传输费用为代价的。
没有自托管网关的API流量
将自托管网关部署到托管后端API实现的同一环境中,允许API流量直接流向后端API,这减少了延迟,优化了数据传输成本,并实现了法规遵从性,同时保留了组织内所有API的单点管理、可观察性和发现的优势,无论其实现托管在何处。
具有自托管网关的API流量
包装
自托管网关可作为基于Linux的Docker容器映像从Microsoft Artifact Registry获得。它可以部署到Docker、Kubernetes或在本地服务器集群、云基础设施上运行的任何其他容器编排解决方案,也可以部署到个人计算机上用于评估和开发目的。您还可以将自托管网关部署为支持Azure Arc的Kubernetes集群的集群扩展。
容器图像
我们为自托管网关提供各种容器映像,以满足您的需求:
Tag convention | Recommendation | Example | Rolling tag | Recommended for production |
---|---|---|---|---|
{major}.{minor}.{patch} |
Use this tag to always run the same version of the gateway | 2.0.0 |
❌ | ✔️ |
v{major} |
Use this tag to always run a major version of the gateway with every new feature and patch. | v2 |
✔️ | ❌ |
v{major}-preview |
Use this tag if you always want to run our latest preview container image. | v2-preview |
✔️ | ❌ |
latest |
Use this tag if you want to evaluate the self-hosted gateway. | latest |
✔️ | ❌ |
beta 1 |
Use this tag if you want to evaluate preview versions of the self-hosted gateway. | beta |
✔️ | ❌ |
您可以在此处找到可用标签的完整列表。
1Preview版本不受官方支持,仅用于实验目的。请参阅自托管网关支持策略。
在我们的官方部署选项中使用标签
Azure门户中的部署选项使用v2标签,允许客户使用最新版本的自托管网关v2容器映像以及所有功能更新和补丁。
注:
我们提供命令和YAML片段作为参考,如果你愿意,可以随意使用更具体的标签。
使用我们的Helm chart安装时,图像标记已针对您进行了优化。Helm chart的应用程序版本将网关固定到给定的版本,不依赖于最新版本。
了解有关如何使用Helm在Kubernetes上安装API管理自托管网关的更多信息。
使用滚动标签的风险
滚动标签是在容器映像的新版本发布时可能会更新的标签。这允许容器用户接收容器映像的更新,而无需更新其部署。
这意味着您可能会在没有注意到的情况下并行运行不同的版本,例如在v2标签更新后执行缩放操作时。
示例-v2标签随2.0.0容器映像发布,但当2.1.0版本发布时,v2标签将链接到2.1.0映像。
重要事项
考虑在生产中使用特定的版本标记,以避免无意升级到较新的版本。
与Azure的连接
自托管网关需要在端口443上与Azure建立出站TCP/IP连接。每个自托管网关必须与单个API管理服务相关联,并通过其管理平面进行配置。自托管网关使用与Azure的连接:
- 通过每分钟发送心跳消息来报告其状态
- 定期检查(每10秒一次)并在配置更新可用时应用
- 将指标发送到Azure Monitor(如果配置为这样做)
- 将事件发送到Application Insights(如果已设置)
重要事项对Azure API管理自托管网关版本0和版本1容器映像的支持将于2023年10月1日结束,同时支持相应的配置API v1。使用我们的迁移指南将自托管网关v2.0.0或更高版本与配置API v2一起使用。在我们的弃用文档中了解更多信息
FQDN依赖关系
为了正常运行,每个自托管网关需要在端口443上到与其基于云的API管理实例关联的以下端点的出站连接:
Description | Required for v1 | Required for v2 | Notes |
---|---|---|---|
Hostname of the configuration endpoint | <apim-service-name>.management.azure-api.net |
<apim-service-name>.configuration.azure-api.net 1 |
Custom hostnames are also supported and can be used instead of the default hostname. |
Public IP address of the API Management instance | ✔️ | ✔️ | IP address of primary location is sufficient. |
Public IP addresses of Azure Storage service tag | ✔️ | Optional2 | IP addresses must correspond to primary location of API Management instance. |
Hostname of Azure Blob Storage account | ✔️ | Optional2 | Account associated with instance (<blob-storage-account-name>.blob.core.windows.net ) |
Hostname of Azure Table Storage account | ✔️ | Optional2 | Account associated with instance (<table-storage-account-name>.table.core.windows.net ) |
Endpoints for Azure Resource Manager | ✔️ | Optional3 | Required endpoints are management.azure.com . |
Endpoints for Microsoft Entra integration | ✔️ | Optional4 | Required endpoints are <region>.login.microsoft.com and login.microsoftonline.com . |
Endpoints for Azure Application Insights integration | Optional5 | Optional5 |
Minimal required endpoints are:
Learn more in Azure Monitor docs |
Endpoints for Event Hubs integration | Optional5 | Optional5 | Learn more in Azure Event Hubs docs |
Endpoints for external cache integration | Optional5 | Optional5 | This requirement depends on the external cache that is being used |
1对于内部虚拟网络中的API管理实例,请参阅内部虚拟网络的连接。
2只有在策略中使用API检查器或配额时,v2中才需要。
3仅在使用Microsoft Entra身份验证验证RBAC权限时需要。
4仅在使用Microsoft Entra身份验证或Microsoft Entra相关策略时需要。
5仅在使用功能并需要公共IP地址、端口和主机名信息时才需要。
重要事项
DNS主机名必须可解析为IP地址,并且相应的IP地址必须可访问。
关联的存储帐户名称列在Azure门户中服务的网络连接状态页面中。
关联存储帐户的公共IP地址是动态的,可以随时更改,恕不另行通知。
内部虚拟网络中的连接
私有连接-如果自托管网关部署在虚拟网络中,请从自托管网关的位置启用到v2配置端点的私有连接,例如,使用对等网络中的私有DNS。- 互联网连接-如果自托管网关需要通过互联网连接到v2配置端点,请为配置端点配置自定义主机名,并使用应用程序网关公开端点。
身份验证选项
要验证自托管网关和基于云的API管理实例的配置端点之间的连接,您可以在网关容器的配置设置中使用以下选项。
Option | Considerations |
---|---|
Microsoft Entra authentication | Configure one or more Microsoft Entra apps for access to gateway Manage access separately per app Configure longer expiry times for secrets in accordance with your organization's policies Use standard Microsoft Entra procedures to assign or revoke user or group permissions to app and to rotate secrets |
Gateway access token (also called authentication key) | Token expires every 30 days at maximum and must be renewed in the containers Backed by a gateway key that can be rotated independently (for example, to revoke access) Regenerating gateway key invalidates all access tokens created with it |
连接失败
当与Azure的连接丢失时,自托管网关无法接收配置更新、报告其状态或上传遥测数据。
自托管网关设计为“静态故障”,可以在暂时失去与Azure的连接后继续运行。它可以在有或没有本地配置备份的情况下部署。通过配置备份,自托管网关会定期将最新下载配置的备份副本保存在连接到其容器或pod的持久卷上。
当配置备份关闭并且与Azure的连接中断时:
- 运行自托管网关将继续使用内存中的配置副本运行
- 已停止的自托管网关将无法启动
当配置备份打开并且与Azure的连接中断时:
- 运行自托管网关将继续使用内存中的配置副本运行
- 已停止的自托管网关将能够开始使用配置的备份副本
恢复连接后,受中断影响的每个自托管网关将自动重新连接其关联的API管理服务,并下载网关“脱机”时发生的所有配置更新。
安全
局限性
托管网关中的以下功能在自托管网关中不可用:
- TLS会话恢复。
- 客户端证书重新协商。若要使用客户端证书身份验证,API使用者必须将其证书作为初始TLS握手的一部分。为确保此行为,请在配置自托管网关自定义主机名(域名)时启用协商客户端证书设置。
传输层安全(TLS)
重要事项此概述仅适用于自托管网关v1和v2。
支持的协议
默认情况下,自托管网关支持TLS v1.2。
使用自定义域的客户可以在控制平面中启用TLS v1.0和/或v1.1。
可用密码套件
重要事项此概述仅适用于自托管网关v2。
自托管网关对客户端和服务器连接使用以下密码套件:
TLS_AES_256_GCM_SHA384
TLS_CHACHA20_POLY1305_SHA256
TLS_AES_128_GCM_SHA256
TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
TLS_DHE_RSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256
TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256
TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
TLS_DHE_RSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
TLS_DHE_RSA_WITH_AES_256_CBC_SHA256
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
TLS_DHE_RSA_WITH_AES_128_CBC_SHA256
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
TLS_DHE_RSA_WITH_AES_256_CBC_SHA
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
TLS_DHE_RSA_WITH_AES_128_CBC_SHA
TLS_RSA_WITH_AES_256_GCM_SHA384
TLS_RSA_WITH_AES_128_GCM_SHA256
TLS_RSA_WITH_AES_256_CBC_SHA256
TLS_RSA_WITH_AES_128_CBC_SHA256
TLS_RSA_WITH_AES_256_CBC_SHA
TLS_RSA_WITH_AES_128_CBC_SHA
管理密码套件
从v2.1.1及以上版本开始,您可以通过配置管理正在使用的密码:
- net.server.tls.ciphers.allowed-suites允许您定义用于API客户端和自托管网关之间的tls连接的由命令分隔的密码列表。
- net.client.tls.ciphers.allowed-suite允许您定义一个逗号分隔的密码列表,用于自托管网关和后端之间的tls连接。
下一步
- 登录 发表评论
- 6 次浏览
Tags
最新内容
- 1 week 1 day ago
- 1 week 1 day ago
- 1 week 1 day ago
- 1 week 1 day ago
- 1 week 1 day ago
- 2 weeks ago
- 2 weeks 1 day ago
- 2 weeks 4 days ago
- 2 weeks 4 days ago
- 2 weeks 4 days ago