Azure URL 应用服务无法在具有专用终结点的 vnet 中运行

Azure URL app service not working in vnet with private endpoint

您好,目前我已经设置了 VNET。 在这个 vnet 中,我制作了一个 VM,并在子网中添加了一个带有私有端点的应用程序服务。 应用服务的私有端点也会自动添加到私有 link DNS 区域。 (Azure 自动为我创建了这个)它也正确指向正确的内部 IP 地址。 现在,在我的 VM 中,我尝试使用 curl 访问我的 AppService,并使用创建的 .privatelink.azurewebsites.net link 访问 AppService。但它一直返回 404。 这怎么可能。我对DNS的了解有限

如果我在 VM 中执行 NSLOOKUP,它会很好地解析私有 link DNS 名称并找到私有端点 IP 地址 我错过了什么?

更新 当我继续使用原始 azurewebsites.net xxxxxxx.azurewebsites.net(不是私有 link)URL 时,我可以从 VNET 中访问应用程序服务。 如果我在 VM 上,并且我查找了原始 URL 我明白了。

Non-authoritative answer:
xxxxxxxxx.azurewebsites.net       canonical name = xxxxxxxxx.privatelink.azurewebsites.net.
Name:  xxxxxxxx.privatelink.azurewebsites.net
Address: 10.1.1.4

所以幕后有什么魔法?

当您创建 public Azure 应用服务“xxxxxxxxx”时,除了提供应用服务环境外,还将在 Microsoft 的权威 DNS 服务器之一中创建此新服务的 DNS 条目(它们通常被命名为像 ns1-xxx.azure-dns.com) 最终指向托管您的应用服务的服务器的 public IP 地址。

如果您为应用服务添加专用端点,这些服务器中的 DNS 条目将不会被删除。取而代之的是,使用防火墙规则切断了对您的 Web 应用程序的互联网访问。

这意味着如果您在 VNet 之外的浏览器中键入“xxxxxxxxxx.azurewebsites.net”,则会发送 DNS 查询并返回服务器的 public IP 地址。您的浏览器向该 IP 地址发送 HTTP 查询,但会收到 HTTP 状态代码 403,表明 public 流量被阻止。

在您的 VNet 内部,情况有所不同。正如您所描述的,您有一个链接到 VNet 的私有 DNS 区域“privatelink.azurewebsites.net”(您可以在“虚拟网络链接”部分看到它)

如果您现在在与 xxxxxxxxxx.azurewebsites.net 位于同一 VNet 中的 VM 的浏览器中键入“xxxxxxxxxx.azurewebsites.net”,则与网络适​​配器(默认情况下可通过 168.63.129.16 在您的 VM 中访问)将使用放置在私有 DNS 区域中的条目。如果存在名为“privatelink.azurewebsites.net”的区域,则对域“azurewebsites.net”的所有查询都将使用此专用 DNS 区域进行解析。例如,如果对于 172.16.0.5...

有一条“xxxxxxxxxx”的 A 记录条目

...这正是您在 Azure VM 中解析 xxxxxxxxxx.azurewebsites.net 时获得的 IP:

C:\Users\vm>nslookup xxxxxxxxxx.azurewebsites.net
Server:  UnKnown
Address:  168.63.129.16

Non-authoritative answer:
Name:    xxxxxxxxxx.privatelink.azurewebsites.net
Address:  172.16.0.5
Aliases:  xxxxxxxxxx.azurewebsites.net

如果您删除您的私人 DNS 区域,DNS 服务器将解析回 ns1-xxx.azure-dns.com,这反过来会给您该服务的 public IP:

C:\Users\vm>nslookup xxxxxxxxxx.azurewebsites.net
Server:  UnKnown
Address:  168.63.129.16

Non-authoritative answer:
Name:    waws-prod-am2-459-d21a.westeurope.cloudapp.azure.com
Address:  20.50.2.66

但是由于应用服务仍然应用了防火墙规则来阻止来自 VNet 外部的所有流量,如果您尝试通过浏览器访问该服务,您将获得 HTTP 状态代码 403。

另请参阅:https://docs.microsoft.com/en-us/azure/app-service/networking/private-endpoint#conceptual-overview