Knowledge

QiShunwang

知识分享

【Azure 环境】基于Azure搭建企业级内部站点, 配置私有域名访问的详细教程 (含演示动画)

2021/5/14 21:15:41    来源:

前言

在Azure中,可以通过App Service快速部署,构建自定义站点(PaaS服务)。默认情况下,这些站点被访问URL都是面向公网,通过公网进行解析。为了最好的安全保障,是否可以有一种功能实现只能内网访问呢?并且为了在企业内部使用,还需要配置私有的自定义域名(如myapp.aaa)?

说明:虽然App Service提供了可以集成虚拟网络(内网),但是这样的集成是指作为App Service服务器实例可以访问到虚拟网络VNET 中的资源(如SQL Service,内网API等),而App Service自身的访问还是通过公网URL访问。所以它并不能实现内网访问App Service目的

 

架构

分析需求,为了实现本文目标,在Azure中所需要创建的资源有:

1) 应用服务 App Service,部署应用并启用私有终结点(Private Endpoint),提供最终端的访问服务

2) 虚拟网络 VNET,企业的内网,只能在该网络中才能访问应用服务

3) 虚拟机VM,部署在虚拟网络中,一方面作为自定义DNS服务器,同时也作为内网客户端,测试内网访问应用服务是否成功

4) (可选)可解析的公网域名,主要用于App Service的自定义域名所有权验证,使用后可删除

5) (可选) 应用程序网关Application Gateway,实现关联内网自定义域名和应用服务App Service的网关

 

 

准备Azure资源

如资源已经创建,可跳过此部分

一:新建应用服务

  1. 登录Azure门户(中国区): https://portal.azure.cn/
  2. 选择App Service,点击“Add”创建新的Web App
  3. Subscription为默认订阅或选择合适的订阅
  4. Resource Group 点击“Create new”,输入“myCorpRG
  5. Web App Name 输入“myinternalapp01
  6. Publish为默认Code模式
  7. Runtime Stack选择.NET 5, Operating Ssystem为Windows,也可根据自己需求选择
  8. Region选择China North 2 或者China East 2 (因Private Endpoint功能在中国区只有2区支持)
  9. App Service Plan 点击“Create new”,输入“myinternalplan
  10. Sku and size 需要至少选择Premium V2 P2v2,  也可选择PremiumV3 和 Isolated,其他定价层不支持Private Endpoint
  11. Monitoring Tab页中,本文不开启Application Insights,如实际项目需要,可以开启。
  12. 点击“Review + Create”,创建Web App资源

动画演示:

 

参考官方创建文档:

在 Azure 中创建 ASP.NET Core Web 应用:https://docs.azure.cn/zh-cn/app-service/quickstart-dotnetcore?tabs=netcore31&pivots=platform-windows

Using Private Endpoints for Azure Web App:https://docs.microsoft.com/en-us/azure/app-service/networking/private-endpoint

 

二:新建虚拟网络

  1. 登录Azure门户(中国区): https://portal.azure.cn/
  2. 选择Virtual networks,点击“Add/Create”创建新的Virtual networks
  3. Subscription为默认订阅或选择合适的订阅
  4. Resource Group选择“myCorpRG”, 为上一节创建应用服务时所建,保持实验中所有资源在同一个组中
  5. Virtual Network Name输入 myinternalvnet01
  6. Region选择China North 2,保持本次实验中所有资源在同一个区域
  7. IP Addresses根据默认值而定,如10.3.0.0/16(有效内网地址范围 10.3.0.0 ~ 10.3.255.255。共计65536个IP地址
  8. Subnet 子网,除了默认的default外,还需要创建2个
    • 为App Service Private Endpoint创建一个新子网, name: appprivatesubnet, address 10.3.1.0/24
    • 为Application Gateway创建一个新子网, name: appgatewaysubnet, address 10.3.2.0/24
  9. 点击Next按钮,其他Security,Tags保持默认值
  10. 点击Review +Create, 创建Virtual networks资源

动画演示:

 

参考官方创建文档:

快速入门:使用 Azure 门户创建虚拟网络:https://docs.azure.cn/zh-cn/virtual-network/quick-create-portal

 

三:新建虚拟机

该虚拟机在本次实验中即作为自定义的DNS服务器,同时也作为实验中访问Web App 站点的客户端

  1. 登录Azure门户(中国区): https://portal.azure.cn/
  2. 选择Virtual machine,点击“Add/Create”创建新的Virtual machine
  3. Subscription为默认订阅或选择合适的订阅
  4. Resource Group选择“myCorpRG”, 为第一节创建应用服务时所建,保持实验中所有资源在同一个组中
  5. Virtual machine name输入myinternalvm01
  6. Region选择China North 2,保持本次实验中所有资源在同一个区域
  7. Image 选择 Windows Server 2019 Datacenter – Gen1, 也可以根据自己的情况选择,需要能作为内网的DNS 服务器
  8. Size 选择 Standard_DS2_v2, 实际需求中可以选择更高的定价层
  9. 设置RDP虚拟机的Username 和Password, 如myadmin, 1qaz@WSX3edc
  10. Inbound ports 看起3389,用于RDP连接
  11. 下一步,设置Disks,如无其他需求,保持默认即可
  12. 下一步设置Networking,选择第二步中创建的Virtual network(myinternalvnet01)
  13. 选择subnet为默认的default。
  14. Public IP点击Create New,创建一个新的公网IP,用于RDP连接,Name输入myinternalvm01-ip, SKU选择Basic,Assignment为Dynamic方式,动态分配IP地址
  15. 点击Next按钮,其他Management, Advanced,Tags保持默认值
  16. 点击Review +Create, 创建Virtual machine资源

动画演示:

 

参考官方创建文档:

快速入门:在 Azure 门户中创建 Windows 虚拟机:https://docs.azure.cn/zh-cn/virtual-machines/windows/quick-create-portal

 

配置Private Endpoint

  1. 登录Azure App Service门户(中国区): https://portal.azure.cn/?l=en.en-us#blade/HubsExtension/BrowseResourceBlade/resourceType/Microsoft.Web%2Fsites
  2. 选择myinternalapp01 App Service,点击“Networking”并选择Private Endpoint Connections
  3. 点击“Add”,输入Private Endpoint的名称myappprivate01
  4. 选择Virtual network为myinternalvnet01
  5. 选择Subnet为appprivatesubnet
  6. Integrate with private DNS zone为 No,自己搭建DNS服务器(当然,也可以选择Private DNS Zone)
  7. 点击OK,创建成功

PS: Private Endpoint启动成功后,App Service即无法从公网访问,需要在Virtual Network (myinternalvnet01)所在的VM中访问,但需要配置正确的DNS,CNAME及A记录,在下一节中即将介绍

动画演示:

 

参考官方创建文档:

Using Private Endpoints for Azure Web App:https://docs.microsoft.com/en-us/azure/app-service/networking/private-endpoint

 

实现默认App Service域名内网访问

根据Private Endpoint启用后的DNS配置文档,需要在内网的DNS服务器中配置两条DNS记录

myinternalapp01.chinacloudsites.cn

CNAME

myinternalapp01.privatelink.chinacloudsites.cn

myinternalapp01.privatelink.chinacloudsites.cn

A

10.3.1.4

私网IP地址可以在VNET中Connected devices(已连接设备)查看内网IP地址

 

RDP到VM(myinternalvm01) 并启用DNS服务

  1. RDP到VM(myinternalvm01) 并启用DNS服务
  2. 添加CNAME和A记录
    1. 在VM中启动DNS Manager
    2. 右键点击Forward Lookup Zones,选择New Zone
    3. 默认选择使用Primary zone
    4. 输入Zone名称 chinacloudsites.cn
    5. 下一步,下一步,点击Finish按钮
    6. 等待Zone创建完成后,选择chinacloudsites.cn Zone, 右键添加新CNAME 和A记录
    7. 回到Azure门户中,在虚拟网络(VNET)中设置自定义DNS Server,IP地址为10.3.0.4
    8. 重启VM,然后RDP并验证默认域名访问是否成功:myinternalapp01.chinacloudsites.cn

动画演示:

 

参考官方创建文档:

Private Endpoint DNS: https://docs.microsoft.com/en-us/azure/app-service/networking/private-endpoint#dns

 

配置自定义域名(内网)

根据以上的步骤,已经可以通过默认的App Service域名访问成功。接下来的步骤就是配置内网的自定义域名。如myapp.aaa。如果在内网DNS中直接配置CNAME指向App Service默认域名,虽然通过nslookup或者nameresolver.exe解析能够指向App Service的内网IP,但是在访问时候会遇见404错误

为了解决自定义域名访问404的问题,必须使此域名(myapp.aaa)与App Service的进行域名绑定,因为域名并没有aaa的顶级域名,所以通过验证域名所有权的方式无法实现绑定到aaa不是公认的域名。

  • 但是如果有一个公有域名(如xxx.com)可以临时借用,用于验证App Service与域名之间的所有权,当验证成功后,就可以在公网DNS上解除CNAME,或A记录的绑定。然后在内网DNS中配置域名与App Service的CNAME记录。实现在内网中自定义域名的访问。详细的配置步骤见方案一
  • 但是如果没有这样的一个公网域名,且必须在内网中使用如aaa的域名,则可以通过网关的方式实现。使用基于虚拟网络搭建的Application Gateway,让myapp.aaa域名与Application Gateway的内网IP地址绑定,让请求转换到App Service。详细的配置步骤见方案二

 

方案一:添加应用程序App Service自定义域名

 

此实验中,使用myapp.mylubu.com作为与App Service进行域名绑定,并验证域名所有权

1)  进入App Service的Custom Domain页面,点击Add custom domain按钮

2)  输入myapp.mylubu.com,点击 validate。提示Domain ownership验证失败,需要在DNS上配置一个CNAME记录和一个asuid.{subdomain}记录

3)  实验中使用的时Azure的Public DNS Zone,进入mylubu.com DNS Zone,添加CNAME记录

4)  添加asuid.myapp的TXT记录

5)  回到App Service的Custom Domain页面(#1), 重复验证myapp.mylubu.com域名,直至成功后绑定域名成功

6)  再次回到Public DNS Zone页面。删除为mylubu.com添加的CNAME和TXT记录

7)  RDP到VM中,进入私网DNS服务器,为myapp.mylubu.com配置内网DNS CNAME记录。

8)  在VM中访问myapp.mylubu.com成功

PS:在验证域名所有权时,myapp.mylubu.com必须公网可解析

 

动画演示:

 

参考官方创建文档:

将现有的自定义 DNS 名称映射到 Azure 应用服务:https://docs.azure.cn/zh-cn/app-service/app-service-web-tutorial-custom-domain

 

方案二:新建应用程序网关Application Gateway实现域名转换

创建内网应用程序网关,在网关中设置后端池为App Service。

  1. 登录Azure门户(中国区): https://portal.azure.cn/
  2. 选择Application gateways,点击“Add/Create”创建新的application gateway
  3. Subscription为默认订阅或选择合适的订阅
  4. Resource Group选择“myCorpRG”, 为第一节创建应用服务时所建,保持实验中所有资源在同一个组中
  5. Application gateway name输入 myinternalappgateway01
  6. Region选择China North 2,保持本次实验中所有资源在同一个区域
  7. Tier 选择 Standard, 因实验中只需要开启Private IP地址即可
  8. 其他Instance Count, SKU size, HTTP2等设定。保持默认
  9. Virtual Network中选择 myinternalvnet01
  10. Subnet选择 appgatewaysubnet, 均在创建虚拟网络时准备好。
  11. Next : Forntends页面中,Forntend IP address type选择 Private,并且Use a specific private IP address 设置为No,然系统自动分配一个内网IP。
  12. Next : Backends 页面中,点击“Add a Backend Pool”, Name输入backendpool01,Target Type设置为App Services , Target选择 myinternalapp01
  13. Next : Configuration 页面中,配置Routing rule,  点击Add a routing rule
    1.       Rule name输入为 rule01
    2.       Listener name输入 listener01
    3.       Frontend IP选择 Private
    4.       Protocol 为HTTP
    5.       Port 为80, Listener的其他选项则选择默认值
    6.       在Backend Targets中,设置Target type为Backend pool
    7.       Backend target选择第12步中创建的backendpool01
    8.       HTTP settings则需要点击”Add new”按钮,新增HTTP的规则
    9.       HTTP settings name 输入 httpsetting01
    10.    Backend Protocol 选择HTTP, Backend Port为80端口
    11.    Additional settings部分全部保持默认值
    12.    Host Name部分中,设定Override with new host name 为Yes, Host name override为 Pick Host name from backend target
    13.    Create custom probes为默认值 Yes
    14.    点击Add按钮,回到Configuration配置页面
  14. 点击Next : Tags
  15. 点击 Next : Review + Create。创建Application Gateway。
  16. 在Application Gateway中查看Backend Pool Healthy状态。等待状态值为正常后,RDP到VM中,使用Application Gateway的内网IP地址访问,验证是否成功访问App Service。
  17. 为内网域名myapp.aaa添加A记录,指定到Application Gateway的Private IP。
  18. 验证myapp.aaa成功访问app service

PS:当应用程序网关创建好之后,在Backend Health中查看后端池的健康状态非常重要。只有状态为Healthy的后端才能成功访问

动画演示:

参考官方创建文档:

使用 Azure 应用程序网关定向 Web 流量 - Azure 门户:https://docs.azure.cn/zh-cn/application-gateway/quick-create-portal

 

下载Azure资源包

本文实验使用的所有资源模板文件下载:

 

文章引用:http://www.qishunwang.net/knowledge_show_109936.aspx