前言

在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. Educational Codeforces Round 64 C. Match Points 【二分思想】

    一 题面 C. Match Points 二 分析 根据题意很容易想到要去找满足条件的数,因为可以打乱输入的顺序,所以很容易想到二分. 但是如果直接对输入的数组进行二分,如输入$a$,直接在数组里二分 ...

  2. 《Selenium自动化测试实战:基于Python》Selenium自动化测试框架入门

    第1章  Selenium自动化测试框架入门 1.1  Selenium自动化测试框架概述 说到目前流行的自动化测试工具,相信只要做过软件测试相关工作,就一定听说过Selenium. 图1-1是某企业 ...

  3. Srping源码之BeanFactory.getBean

    本文是针对Srping的BeanFactory.getBean来进行源码解析,如果您是第一次看请先看一下XMLBeanFactory解析:https://www.cnblogs.com/technol ...

  4. RabbitMQ 入门 (Go) - 1. 简介和安装

    Message Broker(消息代理) 维基百科对 Message Broker 的定义是:Message broker 是一种中介程序模块,它把消息从发送方的正式消息传递协议转化为接收方的正式消息 ...

  5. python中zip函数的使用

    zip(*iterables) zip可以将多个可迭代对象组合成一个迭代器对象,通过迭代取值,可以得到n个长度为m的元组.其中n为长度最短可迭代对象的元素个数,m为可迭代对象的个数.并且每个元组的第i ...

  6. 极简实用的Asp.NetCore模块化框架新增CMS模块

    简介 关于这个框架的背景,在前面我已经交代过了.不清楚的可以查看这个链接 极简实用的Asp.NetCore模块化框架决定免费开源了 在最近一段时间内,对这个框架新增了以下功能: 1.新增了CMS模块, ...

  7. [Fundamental of Power Electronics]-PART I-3.稳态等效电路建模,损耗和效率-3.5/3.6 示例:Boost变换器中包含的半导体传导损耗/要点小结

    3.5 示例:Boost变换器中包含的半导体传导损耗 作为最后一个示例,让我们考虑对图3.22所示的Boost变换器中的半导体传导损耗进行建模.功率损耗的另一个主要来源是半导体器件的正向电压降引起的传 ...

  8. 【Azure 微服务】Service Fabric中微服务在升级时,遇见Warning - System.Collections.Generic.KeyNotFoundException 服务无法正常运行

    问题描述 使用.Net Framework 4.5.2为架构的Service Fabric微服务应用,在升级后发布到Azure Fabric中,服务无法运行.通过Service Fabric Expl ...

  9. Python基础(十三):for循环

    对于一个序列,比如说:列表.字符串,有时候我们需要获取其中的每一个元素,然后执行某个操作,此时就需要借助于for循环. for循环语法结构 for循环的语法结构如下,这里大家必须清楚一点,for循环后 ...

  10. Kafka分片存储、消息分发和持久化机制

    Kafka 分片存储机制 Broker:消息中间件处理结点,一个 Kafka 节点就是一个 broker,多个 broker 可以组成一个 Kafka集群. Topic:一类消息,例如 page vi ...