【Azure 环境】基于Azure搭建企业级内部站点, 配置私有域名访问的详细教程 (含演示动画)
前言
在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资源
如资源已经创建,可跳过此部分
一:新建应用服务
- 登录Azure门户(中国区): https://portal.azure.cn/
- 选择App Service,点击“Add”创建新的Web App
- Subscription为默认订阅或选择合适的订阅
- Resource Group 点击“Create new”,输入“myCorpRG”
- Web App Name 输入“myinternalapp01”
- Publish为默认Code模式
- Runtime Stack选择.NET 5, Operating Ssystem为Windows,也可根据自己需求选择
- Region选择China North 2 或者China East 2 (因Private Endpoint功能在中国区只有2区支持)
- App Service Plan 点击“Create new”,输入“myinternalplan”
- Sku and size 需要至少选择Premium V2 P2v2, 也可选择PremiumV3 和 Isolated,其他定价层不支持Private Endpoint
- Monitoring Tab页中,本文不开启Application Insights,如实际项目需要,可以开启。
- 点击“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
二:新建虚拟网络
- 登录Azure门户(中国区): https://portal.azure.cn/
- 选择Virtual networks,点击“Add/Create”创建新的Virtual networks
- Subscription为默认订阅或选择合适的订阅
- Resource Group选择“myCorpRG”, 为上一节创建应用服务时所建,保持实验中所有资源在同一个组中
- Virtual Network Name输入 myinternalvnet01
- Region选择China North 2,保持本次实验中所有资源在同一个区域
- IP Addresses根据默认值而定,如10.3.0.0/16(有效内网地址范围 10.3.0.0 ~ 10.3.255.255。共计65536个IP地址)
- 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
- 点击Next按钮,其他Security,Tags保持默认值
- 点击Review +Create, 创建Virtual networks资源
动画演示:
参考官方创建文档:
快速入门:使用 Azure 门户创建虚拟网络:https://docs.azure.cn/zh-cn/virtual-network/quick-create-portal
三:新建虚拟机
该虚拟机在本次实验中即作为自定义的DNS服务器,同时也作为实验中访问Web App 站点的客户端
- 登录Azure门户(中国区): https://portal.azure.cn/
- 选择Virtual machine,点击“Add/Create”创建新的Virtual machine
- Subscription为默认订阅或选择合适的订阅
- Resource Group选择“myCorpRG”, 为第一节创建应用服务时所建,保持实验中所有资源在同一个组中
- Virtual machine name输入myinternalvm01
- Region选择China North 2,保持本次实验中所有资源在同一个区域
- Image 选择 Windows Server 2019 Datacenter – Gen1, 也可以根据自己的情况选择,需要能作为内网的DNS 服务器
- Size 选择 Standard_DS2_v2, 实际需求中可以选择更高的定价层
- 设置RDP虚拟机的Username 和Password, 如myadmin, 1qaz@WSX3edc
- Inbound ports 看起3389,用于RDP连接
- 下一步,设置Disks,如无其他需求,保持默认即可
- 下一步设置Networking,选择第二步中创建的Virtual network(myinternalvnet01)
- 选择subnet为默认的default。
- Public IP点击Create New,创建一个新的公网IP,用于RDP连接,Name输入myinternalvm01-ip, SKU选择Basic,Assignment为Dynamic方式,动态分配IP地址
- 点击Next按钮,其他Management, Advanced,Tags保持默认值
- 点击Review +Create, 创建Virtual machine资源
动画演示:
参考官方创建文档:
快速入门:在 Azure 门户中创建 Windows 虚拟机:https://docs.azure.cn/zh-cn/virtual-machines/windows/quick-create-portal
配置Private Endpoint
- 登录Azure App Service门户(中国区): https://portal.azure.cn/?l=en.en-us#blade/HubsExtension/BrowseResourceBlade/resourceType/Microsoft.Web%2Fsites
- 选择myinternalapp01 App Service,点击“Networking”并选择Private Endpoint Connections
- 点击“Add”,输入Private Endpoint的名称myappprivate01
- 选择Virtual network为myinternalvnet01
- 选择Subnet为appprivatesubnet
- Integrate with private DNS zone为 No,自己搭建DNS服务器(当然,也可以选择Private DNS Zone)
- 点击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服务
- RDP到VM(myinternalvm01) 并启用DNS服务
- 添加CNAME和A记录
- 在VM中启动DNS Manager
- 右键点击Forward Lookup Zones,选择New Zone
- 默认选择使用Primary zone
- 输入Zone名称 chinacloudsites.cn
- 下一步,下一步,点击Finish按钮
- 等待Zone创建完成后,选择chinacloudsites.cn Zone, 右键添加新CNAME 和A记录
- 回到Azure门户中,在虚拟网络(VNET)中设置自定义DNS Server,IP地址为10.3.0.4
- 重启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。
- 登录Azure门户(中国区): https://portal.azure.cn/
- 选择Application gateways,点击“Add/Create”创建新的application gateway
- Subscription为默认订阅或选择合适的订阅
- Resource Group选择“myCorpRG”, 为第一节创建应用服务时所建,保持实验中所有资源在同一个组中
- Application gateway name输入 myinternalappgateway01
- Region选择China North 2,保持本次实验中所有资源在同一个区域
- Tier 选择 Standard, 因实验中只需要开启Private IP地址即可
- 其他Instance Count, SKU size, HTTP2等设定。保持默认
- Virtual Network中选择 myinternalvnet01
- Subnet选择 appgatewaysubnet, 均在创建虚拟网络时准备好。
- Next : Forntends页面中,Forntend IP address type选择 Private,并且Use a specific private IP address 设置为No,然系统自动分配一个内网IP。
- Next : Backends 页面中,点击“Add a Backend Pool”, Name输入backendpool01,Target Type设置为App Services , Target选择 myinternalapp01
- Next : Configuration 页面中,配置Routing rule, 点击Add a routing rule
- Rule name输入为 rule01
- Listener name输入 listener01
- Frontend IP选择 Private
- Protocol 为HTTP
- Port 为80, Listener的其他选项则选择默认值
- 在Backend Targets中,设置Target type为Backend pool
- Backend target选择第12步中创建的backendpool01
- HTTP settings则需要点击”Add new”按钮,新增HTTP的规则
- HTTP settings name 输入 httpsetting01
- Backend Protocol 选择HTTP, Backend Port为80端口
- Additional settings部分全部保持默认值
- Host Name部分中,设定Override with new host name 为Yes, Host name override为 Pick Host name from backend target
- Create custom probes为默认值 Yes
- 点击Add按钮,回到Configuration配置页面
- 点击Next : Tags
- 点击 Next : Review + Create。创建Application Gateway。
- 在Application Gateway中查看Backend Pool Healthy状态。等待状态值为正常后,RDP到VM中,使用Application Gateway的内网IP地址访问,验证是否成功访问App Service。
- 为内网域名myapp.aaa添加A记录,指定到Application Gateway的Private IP。
- 验证myapp.aaa成功访问app service
PS:当应用程序网关创建好之后,在Backend Health中查看后端池的健康状态非常重要。只有状态为Healthy的后端才能成功访问
动画演示:
参考官方创建文档:
使用 Azure 应用程序网关定向 Web 流量 - Azure 门户:https://docs.azure.cn/zh-cn/application-gateway/quick-create-portal
下载Azure资源包
本文实验使用的所有资源模板文件下载:
【Azure 环境】基于Azure搭建企业级内部站点, 配置私有域名访问的详细教程 (含演示动画)的更多相关文章
- 【Azure 环境】Azure Key Vault (密钥保管库)中所保管的Keys, Secrets,Certificates是否可以实现数据粒度的权限控制呢?
问题描述 Key Vault (密钥保管库) 能不能针对用户授权实现指定用户只能访问某个或某些特定的key? 如当前有两个用户(User1, User2),在Key Vault中有10个Key,Use ...
- Python环境搭建—安利Python小白的Python和Pycharm安装详细教程
人生苦短,我用Python.众所周知,Python目前越来越火,学习Python的小伙伴也越来越多.最近看到群里的小伙伴经常碰到不会安装Python或者不知道去哪下载Python安装包等系列问题,为了 ...
- Phpstudy2018 集成环境配置虚拟域名访问到Index Of 下
(1) Phpstudy是一款php集成开发环境 可随意切换Php的版本以及服务器. Phpstudy的网站根目录默认为WWW目录,那么如果我们想通过虚拟域名访问到Index Of目录来便于查看 ...
- 使用halo搭建自己的博客并配置https域名访问
首先进行java配置 # 1. 下载jdk [下载地址](https://www.oracle.com/cn/java/technologies/javase-downloads.html) - 一定 ...
- 第一篇 PHP开发环境搭建以及多站点配置(基于windows 7系统)
从今天开始,我将用PHP开发一些小的网站,大家知道LAMP(Linux)组合的优势,使PHP受到广大中小企业的喜欢.使PHP与JAVA,ASP三分天下,PHP具有跨平台性,所以在windows一样是可 ...
- 【Azure 环境】Azure 云环境对于OpenSSL 3.x 的严重漏洞(CVE-2022-3602 和 CVE-2022-3786)的处理公告
问题描述 引用报告:(OpenSSL3.x曝出严重漏洞 : https://www.ctocio.com/ccnews/37529.html ) 最近OpenSSL 3.x 爆出了严重安全漏洞,分别是 ...
- Linux环境基于CentOS7 搭建部署Docker容器
1.Docker容器概述 区分Docker容器技术和VM虚拟机技术: evernotecid://394EFE90-9CE0-4D65-A8CD-DFEC0DC8061E/appyinxiangcom ...
- 【Azure 环境】Azure通知中心(Notification Hub)使用百度推送平台解说
问题描述 在通知中心的页面中显示支持BaiDu,介绍一下支持的是百度(Baidu)的什么吗?Azure的这个功能在国内使用的时候是否可以保证国内安卓手机的信息送达率? 问题解答 通知中心的页面中的Ba ...
- 【Azure 环境】Azure Resource Graph Explorer 中实现动态数组数据转换成多行记录模式 - mv-expand
问题描述 想对Azure中全部VM的NSG资源进行收集,如果只是查看一个VM的NSG设定,可以在门户页面中查看表格模式,但是如果想把导出成表格,可以在Azure Resource Graph Expl ...
随机推荐
- 实验一 Python程序设计入门
学号20184307 2019-2020-2 <Python程序设计>实验1报告 课程:<Python程序设计> 班级: 1843 姓名: 章森洋 学号:20184307 实验 ...
- SQL注入靶场实战-小白入门
目录 SQL注入 数字型 1.测试有无测试点 2.order by 语句判断字段长,查出字段为3 3.猜出字段位(必须与内部字段数一致)(用union联合查询查看回显点为2,3) 4.猜数据库名,用户 ...
- Spring Boot MVC 单张图片和多张图片上传 和通用文件下载
@Autowired private ServerConfig serverConfig; /** * 通用下载请求 * * @param fileName 文件名称 * @param delete ...
- HTML5和CSS3提高
一.HTML5的新特性 HTML5 的新增特性主要是针对于以前的不足,增加了一些新的标签.新的表单和新的表单属性等. 这些新特性都有兼容性问题,基本是 IE9+ 以上版本的浏览器才支持,如果不考虑兼容 ...
- 用Python爬取网易云音乐热评
用Python爬取网易云音乐热评 本文旨在记录Python爬虫实例:网易云热评下载 由于是从零开始,本文内容借鉴于各种网络资源,如有侵权请告知作者. 要看懂本文,需要具备一点点网络相关知识.不过没有关 ...
- ISP算法:深入聊聊lens shading
一.简介 关于什么是成像中的lens shading这里直接引用一句英文的definition:"The term shading describes the light fall-off ...
- windows2003安装php ,mysql,fastgui
在上一章中,windows2003的iis搭建已经完成,但是我们现在用的多的也包含php,该如何让Windows2003成功使用php文件呢? windows2003需要先行安装vc9运行库才能与fa ...
- Mediapipe 在RK3399PRO上的初探(一)(编译、运行CPU和GPU Demo, RK OpenglES 填坑,编译bazel)
PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明 本文作为本人csdn blog的主站的备份.(Bl ...
- Github仓库master分支到main分支迁移指南
1 概述 2020年10月1日后,Github会将所有新建的仓库的默认分支从master修改为main,这就导致了一些旧仓库主分支是master,新仓库主分支是main的问题,这在有时候会带来一些麻烦 ...
- JFX11+IDEA跨平台打包发布的完美解决办法
1 概述 IDEA2020.1的文档中提到只有JFX8的工程才支持打成jar包,并且,如果直接使用Build Artifacts的话,会如下提示: IDEA文档有提到这个的解决办法,是使用一些第三方工 ...