微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

子网中的 Azure 函数使用错误的 IP

如何解决子网中的 Azure 函数使用错误的 IP

在我目前的情况下,我们有几个 Azure Function 应用程序使用在 Azure ServiceBus 触发器上触发的函数与 Azure sql 数据库对话(使用实体框架,如果重要的话)。

在过去几周,我们一直在通过使用 VNET 和子网来提高安全性,以仅允许需要使用它的函数应用程序访问 Azure 数据库服务器。但是,我遇到了一个奇怪的问题。似乎现在数据库服务器设置为禁止除了运行我的功能应用程序的定义子网之外的流量,功能应用程序在连接到数据库时开始给出间歇性的 sqlExceptions 并显示数据库防火墙不允许某些特定 IP 的消息规则。奇怪的是,这个错误并不一致。我希望功能应用要么在防火墙上因其 IP 被拒绝,要么一直被允许,但不会像目前这样随机

问题

我的设置是否遗漏了什么?或者,如何强制子网中的函数应用使用数据库服务器防火墙规则允许的内部 IP,而不是数据库防火墙规则中没有的其他出站 IP 地址? 或者:什么可以解释对数据库的访问有时会成功(表明功能应用程序使用了正确的内部 IP),有时会在防火墙上失败(IP 地址未知),似乎是随机的。

希望有人能帮忙!

详细情况描述

Function App 有一个由 Service Bus 触发器触发的函数。 Function App 正在运行 P1v2 Premium 服务计划,并启用 Vnet 集成。

enter image description here

应用在我们环境中的子网内运行,该子网具有定义的 IP 地址范围和 /26 子网掩码。如果我检查 Kudu 中功能应用程序的环境变量,我可以看到 PRIVATE_IP_ADDRESS 设置在子网范围内。数据库防火墙设置为禁止所有流量,除了我的函数应用的子网,如下所示:

enter image description here

触发函数应用程序将一些东西写入数据库有时会起作用(表明至少在函数的IP地址正确时对数据库的访问是有效的)但是,也有很多sqlExceptions出现以下错误

无法打开登录请求的服务器“database-server-name”。不允许 IP 地址为“XXX.XXX.XXX.XXX”的客户端访问服务器。要启用访问,请使用 Windows Azure 管理门户或在 master 数据库上运行 sp_set_firewall_rule 以为此 IP 地址或地址范围创建防火墙规则。此更改最多可能需要五分钟才能生效。

错误中提到的 IP 地址不是 Vnet 或子网 IP 范围上定义的内部 IP。它甚至也不是出现在功能应用的可能出站 IP 地址中的 IP 之一,

这些或多或少是随机发生的。有时它们不会出现在 x 个触发器上,有时它会因连续数百次调用而失败。

启用 Datbaase 服务器设置“允许 Azure 服务和资源访问此数据库服务器”会阻止错误发生,但这当然与配置防火墙以允许某些子网相悖

我的尝试

解决方法

当您拥有 VNet integration enabled 时,您的 Azure 函数将仅使用从您的 VNet 中选取的私有出站 IP 地址。 VNet 集成选项仅在 Function Premium 计划中可用。

此外,您已经提到的环境变量 WEBSITE_VNET_ROUTE_ALL 和 WEBSITE_DNS_SERVER 应该和提到的 here 一样设置(假设您的 SQL 服务器在同一个 VNet 中)。

,

当然,新的一天和新的视角会带来可能的答案。

虽然我没有改变我在问题中提到的设置的任何内容,但我再次阅读了这篇文章:https://docs.microsoft.com/en-us/azure/azure-functions/ip-addresses#outbound-ip-address-changes

它提到临时切换服务计划强制更改 IP。我最初将此误解为在 DEV 和高级计划之间切换,这不可能发生,因为 DEV 计划不支持 VNET 集成。所以我在 P1v2 和 P1v3 计划之间切换了计划。然而这并没有奏效。

这里的意思是在 S1 和 P1v2 计划之间切换。标准计划隐藏在此链接后面:

enter image description here

它还向“应用”按钮显示此小消息网络。

enter image description here

在 S1 和 P1v2 计划之间切换片刻并将死信服务总线消息重新提交给函数应用后,一切又开始工作了。

我认为 IP 切换是必要的,但在 P 计划之间切换并不是触发它的原因。它必须介于标准和高级之间。

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。