【Azure 環境】基於Azure搭建企業級內部站點, 配置私有域名訪問的詳細教程 (含演示動畫)
- 2021 年 5 月 14 日
- 筆記
- 【Azure 環境】, 為SF配置自定義DNS伺服器, 創建應用服務, 創建應用程式網關, 創建虛擬機, 創建虛擬網路, 基於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門戶(中國區): //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 應用://docs.azure.cn/zh-cn/app-service/quickstart-dotnetcore?tabs=netcore31&pivots=platform-windows
Using Private Endpoints for Azure Web App://docs.microsoft.com/en-us/azure/app-service/networking/private-endpoint
二:新建虛擬網路
- 登錄Azure門戶(中國區): //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 門戶創建虛擬網路://docs.azure.cn/zh-cn/virtual-network/quick-create-portal
三:新建虛擬機
該虛擬機在本次實驗中即作為自定義的DNS伺服器,同時也作為實驗中訪問Web App 站點的客戶端
- 登錄Azure門戶(中國區): //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 虛擬機://docs.azure.cn/zh-cn/virtual-machines/windows/quick-create-portal
配置Private Endpoint
- 登錄Azure App Service門戶(中國區): //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://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: //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 應用服務://docs.azure.cn/zh-cn/app-service/app-service-web-tutorial-custom-domain
方案二:新建應用程式網關Application Gateway實現域名轉換
創建內網應用程式網關,在網關中設置後端池為App Service。
- 登錄Azure門戶(中國區): //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 門戶://docs.azure.cn/zh-cn/application-gateway/quick-create-portal
下載Azure資源包
本文實驗使用的所有資源模板文件下載: