前言

在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. 最权威最简明的maven 使用教程

    Maven是一个项目管理工具,它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Depen ...

  2. 主成分分析 | Principal Components Analysis | PCA

    理论 仅仅使用基本的线性代数知识,就可以推导出一种简单的机器学习算法,主成分分析(Principal Components Analysis, PCA). 假设有 $m$ 个点的集合:$\left\{ ...

  3. PTA 利用指针找最大值

    6-6 利用指针找最大值 (10 分)   本题要求实现一个简单函数,找出两个数中的最大值. 函数接口定义: void findmax( int *px, int *py, int *pmax ); ...

  4. 浅析MyBatis(四):全自动写代码的MyBatis逆向工程

    在前面几篇文章中,笔者介绍了 MyBatis 的运行流程,在此基础上简单介绍了手写 MyBatis 简易框架与自定义 MyBatis 插件的步骤,相信大家对于 MyBatis 框架的使用流程已经游刃有 ...

  5. 微信小程序 | flex布局属性

    flex-direction 主轴方向 row: 横向 row-reverse: 横向倒序 column: 纵向 column-reverse: 纵向倒序; flex-wrap 元素排列换行 nowr ...

  6. 201871030107-常雅伦 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告

    项目 内容 课程班级博客链接 班级博客 这个作业要求链接 作业要求 我的课程学习目标 1.体验软件项目开发中的两人合作,练习结对编程(Pair programming).2.掌握Github协作开发程 ...

  7. Java网络编程快速上手(SE基础)

    参考资料:百度百科TCP协议 本文涉及Java IO流.异常的知识,可参考我的另外的博客 一文简述Java IO 一文简述JAVA内部类和异常 1.概述 计算机网络相关知识: OSI七层模型 一个报文 ...

  8. 安全开发Java:日志注入,并没那么简单

    摘要:当web工程比较大,历史代码较多时, 应当使用log4j2框架的能力来修改日志注入问题,而不是按照有些博文里写的逐个进化参数的方式. 案例故事 某个新系统上线了,小A在其中开发了个简单的登录模块 ...

  9. 自动化kolla-ansible部署ubuntu20.04+openstack-victoria之物理机配置-01

    自动化kolla-ansible部署ubuntu20.04+openstack-victoria之物理机配置-01  欢迎加QQ群:1026880196  进行交流学习 近期我发现网上有人转载或者复制 ...

  10. redhat7.6 安装 Python 3

    redhat7.6 默认安装了python2.7. 查看已安装python情况 cd / # 定位到根目录 whereis python # 查看python所在目录 /usr/bin cd /usr ...