前言

在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资源包

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

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

  1. 【Azure 环境】Azure Key Vault (密钥保管库)中所保管的Keys, Secrets,Certificates是否可以实现数据粒度的权限控制呢?

    问题描述 Key Vault (密钥保管库) 能不能针对用户授权实现指定用户只能访问某个或某些特定的key? 如当前有两个用户(User1, User2),在Key Vault中有10个Key,Use ...

  2. Python环境搭建—安利Python小白的Python和Pycharm安装详细教程

    人生苦短,我用Python.众所周知,Python目前越来越火,学习Python的小伙伴也越来越多.最近看到群里的小伙伴经常碰到不会安装Python或者不知道去哪下载Python安装包等系列问题,为了 ...

  3. Phpstudy2018 集成环境配置虚拟域名访问到Index Of 下

    (1)    Phpstudy是一款php集成开发环境 可随意切换Php的版本以及服务器. Phpstudy的网站根目录默认为WWW目录,那么如果我们想通过虚拟域名访问到Index Of目录来便于查看 ...

  4. 使用halo搭建自己的博客并配置https域名访问

    首先进行java配置 # 1. 下载jdk [下载地址](https://www.oracle.com/cn/java/technologies/javase-downloads.html) - 一定 ...

  5. 第一篇 PHP开发环境搭建以及多站点配置(基于windows 7系统)

    从今天开始,我将用PHP开发一些小的网站,大家知道LAMP(Linux)组合的优势,使PHP受到广大中小企业的喜欢.使PHP与JAVA,ASP三分天下,PHP具有跨平台性,所以在windows一样是可 ...

  6. 【Azure 环境】Azure 云环境对于OpenSSL 3.x 的严重漏洞(CVE-2022-3602 和 CVE-2022-3786)的处理公告

    问题描述 引用报告:(OpenSSL3.x曝出严重漏洞 : https://www.ctocio.com/ccnews/37529.html ) 最近OpenSSL 3.x 爆出了严重安全漏洞,分别是 ...

  7. Linux环境基于CentOS7 搭建部署Docker容器

    1.Docker容器概述 区分Docker容器技术和VM虚拟机技术: evernotecid://394EFE90-9CE0-4D65-A8CD-DFEC0DC8061E/appyinxiangcom ...

  8. 【Azure 环境】Azure通知中心(Notification Hub)使用百度推送平台解说

    问题描述 在通知中心的页面中显示支持BaiDu,介绍一下支持的是百度(Baidu)的什么吗?Azure的这个功能在国内使用的时候是否可以保证国内安卓手机的信息送达率? 问题解答 通知中心的页面中的Ba ...

  9. 【Azure 环境】Azure Resource Graph Explorer 中实现动态数组数据转换成多行记录模式 - mv-expand

    问题描述 想对Azure中全部VM的NSG资源进行收集,如果只是查看一个VM的NSG设定,可以在门户页面中查看表格模式,但是如果想把导出成表格,可以在Azure Resource Graph Expl ...

随机推荐

  1. POJ_2387 Til the Cows Come Hom 【最短路】

    一.题目 POJ2387 二.分析 Bellman-Ford算法 该算法是求单源最短路的,核心思想就是不断去更新到起点的最短距离,更新的前提是没有负边.如果有负边需要手动控制循环次数. Dijkstr ...

  2. windows与远程linux服务器进行文件传输

    在学习pwn时找到了http://pwnable.kr这个网站,很多题目通过ssh连接, ssh otp@pwnable.kr -p2222 (pw:guest) 连接脚本: pwn_ssh=ssh( ...

  3. python函数之有参装饰器

    一.为什么要有有参装饰器? 来看之前的无参装饰器 # 无参装饰器 def outter(func): def wrapper(*args,**kwargs): start = time.time() ...

  4. 面向前端开发人员的VSCode自动化插件

    转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 原文参考:https://blog.bitsrc.io/vscode-automations-for-fro ...

  5. 配置redis 4.0.11 集群

    配置redis 4.0.11 集群 准备redis 软件和redis配置文件 启动Redis服务 /data/soft/redis/src/redis-check-aof --fix /log/red ...

  6. 冒泡算法(BubbleSort)

    /*冒泡排序原理 比较相邻的元素.如果前一个元素比后一个元素大,就交换这两个元素的位置. 对每一对相邻元素做同样的工作,从开始第一对元素到结尾的最后一对元素.最终最后位置的元素就是最大值.实现步骤 1 ...

  7. [状压DP]关灯问题II

    关 灯 问 题 I I 关灯问题II 关灯问题II 题目描述 现有n盏灯,以及 m m m个按钮.每个按钮可以同时控制这 n n n盏灯--按下了第 i i i个按钮,对于所有的灯都有一个效果.按下i ...

  8. 如何快速搭建自己的ERP系统,4步源码快速安装odoo教程

    上一篇内容:了解什么是Odoo,为二次开发做准备 1.下载odoo源码 Github地址:https://github.com/odoo/odoo Gitee地址:https://gitee.com/ ...

  9. OO第一单元总结与反思

    OO第一单元总结与反思 目录 OO第一单元总结与反思 摘要 第一次作业 本次作业UML类图 本次作业度量分析 第二次作业 本次作业的UML类图 本次作业的度量分析 第三次作业 本次作业的UML类图: ...

  10. 搜狗高级架构师帮你系统掌握TypeScript开发

    JavaScript 是一门动态弱类型语言,对变量的类型非常宽容,而且不会在这些变量和它们的调用者之间建立结构化的契约. Angular 已经使用 TypeScript 重构了代码,另一大前端框架 V ...