你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
Azure 应用服务是一个多租户服务(应用服务环境除外)。 不在应用服务环境中(不在隔离层中)的应用与其他应用共享网络基础结构。 因此,应用的入站和出站 IP 地址可能不同,在某些情况下甚至可能会更改。
应用服务环境使用专用网络基础结构,因此,应用服务环境中运行的应用将获取静态专用 IP 地址用于入站和出站连接。
IP 地址在应用服务中的工作原理
应用服务应用在应用服务计划中运行,而应用服务计划部署到 Azure 基础结构中的一个部署单元(内部称为 Web 空间)。 每个部署单元分配给一组虚拟 IP 地址,其中包括一个公共入站 IP 地址和一组 出站 IP 地址。 同一部署单元中的所有应用服务计划和在其中运行的应用实例共享同一组虚拟 IP 地址。 对于应用服务环境(隔离层中的应用服务计划),应用服务计划是部署单元本身,因此虚拟 IP 地址专用的。
由于不允许在部署单元之间移动应用服务计划,因此分配给应用的虚拟 IP 地址通常保持不变,但也有例外。
注意
高级 V4 层不提供一组稳定的出站 IP 地址。 此行为是故意的。 尽管在高级 V4 层上运行的应用程序可以对面向 Internet 的终结点进行出站调用,但应用服务平台不提供一组稳定的高级 V4 层出站 IP 地址。 此行为与以前的应用服务定价层行为有所不同。 对于使用 Premium V4 的应用程序,门户会在出站 IP 地址处显示“动态”,并显示其他出站 IP 地址信息。 Azure 资源管理器(ARM)和 CLI 调用为 outboundIpAddresses 和 possibleOutboundIpAddresses 的值返回空字符串。 如果高级 V4 上运行的应用程序需要稳定的出站 IP 地址或地址,开发人员需要使用 Azure NAT 网关 等解决方案来获取面向 Internet 的出站流量的可预测 IP 地址。
入站 IP 更改时
不管横向扩展的实例数如何,每个应用只有一个入站 IP 地址。 执行下列作之一时,入站 IP 地址可能会更改:
- 删除应用并在其他资源组中重新创建它(部署单元可能会更改)。
- 删除资源组 和 区域组合中的最后一个应用并重新创建它(部署单元可能会更改)。
- 删除现有的基于 IP 的 TLS 绑定,例如在证书续订期间(请参阅 续订证书)。
找到入站 IP
在本地终端中运行以下命令:
nslookup <app-name>.azurewebsites.net
获取专用入站 IP
有时,你可能需要对应用使用专用静态 IP 地址。 默认共享入站 IP 地址是静态的,但此配置允许站点唯一的专用入站 IP 地址。 若要获取专用入站 IP 地址,需要使用 基于 IP 的证书绑定保护自定义 DNS 名称。 如果并不真正需要使用 TLS 功能来保护应用,甚至可以上传一个自签名证书来实现此绑定。 在基于 IP 的 TLS 绑定中,证书绑定到 IP 地址本身。因此,应用服务会创建一个静态 IP 地址来实现此目的。
出站 IP 更改时
不管横向扩展的实例数如何,每个应用在任意给定时间具有指定数目的出站 IP 地址。 从应用服务应用发起的任何出站连接(例如,与后端数据库的连接)使用某个出站 IP 地址作为源 IP 地址。 要使用的 IP 地址是在运行时随机选择的,因此后端服务必须对应用的所有出站 IP 地址打开其防火墙。
执行以下操作之一时,应用的出站 IP 地址集将更改:
- 删除应用并在其他资源组中重新创建它(部署单元可能会更改)。
- 删除资源组 和 区域组合中的最后一个应用并重新创建它(部署单元可能会更改)。
- 在较低层(Basic、Standard 和 Premium)、PremiumV2 层、PremiumV3 层中选择 Pmv3 选项进行应用规模调整(可能会向集合中添加或从中移除 IP 地址)。
无论是哪个定价层,你都可以通过查找 possibleOutboundIpAddresses 属性或者在 Azure 门户的“属性”页面的“其他出站 IP 地址”字段中查找你的应用可以使用的所有可能的出站 IP 地址。 请参阅查找出站 IP。
如果应用服务向现有应用服务部署添加新的定价层或选项,则所有可能的出站 IP 地址集可能会随着时间的推移而增大。 例如,如果应用服务将“高级 V3”层级添加到现有应用服务部署中,则所有可能的出站 IP 地址集将增大。 同样,如果应用服务向已支持“高级 V3”层级的部署添加新的 Pmv3 选项,则所有可能的出站 IP 地址集也会增大。 向部署添加 IP 地址不会立即生效,因为将新的定价层或选项添加到应用服务部署时,正在运行的应用程序的出站 IP 地址不会更改。 但如果应用程序切换到以前不可用的新定价层或选项,则将使用新的出站地址,客户需要更新下游防火墙规则和 IP 地址限制。
查找出站 IP
若要在 Azure 门户中查找应用当前使用的出站 IP 地址,请在应用左侧导航窗格中选择“属性”。 这些 IP 地址会列在“出站 IP 地址”字段中。
在 Cloud Shell 中运行以下命令也可以找到相同的信息。
az webapp show --resource-group <group_name> --name <app_name> --query outboundIpAddresses --output tsv
(Get-AzWebApp -ResourceGroup <group_name> -name <app_name>).OutboundIpAddresses
若要查找你的应用可能使用的所有出站 IP 地址(无论是哪个定价层),请在你的应用的左侧导航栏中选择“属性”。 它们在“其他出站 IP 地址”字段中列出。
在 Cloud Shell 中运行以下命令也可以找到相同的信息。
az webapp show --resource-group <group_name> --name <app_name> --query possibleOutboundIpAddresses --output tsv
(Get-AzWebApp -ResourceGroup <group_name> -name <app_name>).PossibleOutboundIpAddresses
对于函数应用,请参阅函数应用出站 IP 地址。
获取静态出站 IP
可以使用虚拟网络集成和虚拟网络 NAT 网关来控制来自应用的出站流量的 IP 地址,以通过静态公共 IP 地址定向流量。 虚拟网络集成在“基本”、“标准”、“高级”、“高级 V2”和“高级 V3”应用服务计划中提供。 若要详细了解此设置,请参阅 NAT 网关集成。
Azure 门户中的 IP 地址属性
IP 地址显示在 Azure 门户中的多个位置。 属性页显示来自inboundIpAddress、possibleInboundIpAddresses和outboundIpAddressespossibleOutboundIpAddresses的原始输出。 概述页还显示相同的值,但不包括 可能的入站 IP 地址。
网络概述显示 入站 IP 地址 和 入站地址 字段中任何专用终结点 IP 地址的组合。 如果禁用公用网络访问,则不会显示公共 IP 地址。 “ 出站地址 ”字段包含( 可能)出站 IP 地址的组合列表,如果应用已集成虚拟网络并路由所有流量,并且子网附加了 NAT 网关,该字段还包括来自 NAT 网关的 IP 地址。
服务标记
通过使用 AppService 服务标记,可以定义 Azure 应用服务服务的网络访问,而无需指定单个 IP 地址。 服务标记是一组 IP 地址前缀,用于最大程度地降低创建安全规则的复杂性。 使用服务标记时,Azure 会在服务更改时自动更新 IP 地址。 但是,服务标记不是安全控制机制。 服务标记只是一个 IP 地址列表。
AppService 服务标记仅包括多租户应用的入站 IP 地址。 不包括在隔离(应用服务环境)中部署的应用和使用基于 IP 的 TLS 绑定的应用的入站 IP 地址。 此外,多租户和隔离中使用的所有出站 IP 地址都不包括在该标记中。
该标记可用于允许网络安全组 (NSG) 中的出站流量流向应用。 如果应用使用的是基于 IP 的 TLS,或者应用是在隔离模式下部署的,则必须改用专用 IP 地址。 由于标记仅包括入站 IP 地址,因此不能在访问限制中使用标记来限制从应用服务中的其他应用访问应用。
注意
服务标记有助于定义网络访问,但不应将其视为适当的网络安全措施的替代项,因为它不提供对单个 IP 地址的精细控制。
入站 IPv6 支持
Azure 应用服务支持 IPv6,用于所有基本、标准和高级 SKU 上的入站流量,以及 Functions 消耗计划、Functions 弹性高级版和逻辑应用标准计划。 应用可以通过 IPv4 和 IPv6 协议接收流量,从而与需要 IPv6 连接的新式网络和客户端兼容。
注意
出站 IPv6 支持现为公共预览版,仅可用于 Windows 应用。 有关出站 IPv6 支持的更多信息,请参阅 《应用服务出站 IPv6 支持公测版发布声明》。 来自 Linux 应用的所有出站连接仍使用 IPv4。
先决条件
若要使用 IPv6 入站流量,需要:
- 接受传入流量的 IPv6 地址
- 返回 IPv6 (AAAA) 记录的 DNS 记录
- 可以发送和接收 IPv6 流量的客户端
重要
许多本地网络和开发环境仅支持 IPv4,这可能会影响从本地计算机测试 IPv6 连接的能力。
IPv6 寻址的工作原理
所有应用服务部署单元都包含 IPv6 地址,使应用能够接收 IPv4 和 IPv6 地址上的流量。 为了向后兼容,默认主机名 (<app-name>.azurewebsites.net) 的 DNS 响应默认仅返回 IPv4 地址。
可以使用属性 IPMode 配置 IP 模式行为:
- IPv4 (默认值):DNS 仅返回 IPv4 地址
- IPv6:DNS 仅返回 IPv6 地址
- IPv4AndIPv6:DNS 返回 IPv4 和 IPv6 地址
IPMode 是仅限 DNS 的功能。 无论配置的 IpMode 如何,每个应用服务站点都可以通过 IPv4 和 IPv6 终结点接收请求。 IpMode 仅影响 DNS 如何解析终结点,因此它会影响依赖 DNS 解析的客户端(大多数客户端都属于此类),但不会限制可访问的协议终结点。
配置 IPv6 支持
- Azure 门户
- Azure CLI
- Azure Resource Manager 模板
若要更新应用以在 Azure 门户中返回 IPv6 DNS 记录,请转到应用服务应用的 “配置 ”页并设置 入站 IP 模式 属性。
测试 IPv6 连接
若要测试与应用的 IPv6 连接,请使用以下 curl 命令:
curl -6 https://<app-name>.azurewebsites.net
自定义域和 IPv6
使用自定义域时,可以将 DNS 记录配置为支持 IPv6:
- 仅限 IPv6:添加指向应用的 IPv6 地址的 AAAA 记录。 客户端必须支持 IPv6。
-
双堆栈:添加这两种 A(IPv4)和 AAAA(IPv6)记录,或使用 CNAME 记录指向默认的主机名,该主机名继承
IPMode行为。