承接上篇文章內容,我們來看一下在Azure Redis部署中提供的其他選項,上篇講過,在Azure Redis Premium版本中,我們可以支持將Redis部署在VNET中,這樣的好處是顯而易見的,我們可以通過NSG等規則來控制進出redis的流量,這樣可以把redis的安全保護好,但是如果不是Premium版本的Redis是否意味着就沒辦法做Redis的網絡安全防護呢?當然也不是這樣,即使是standard的redis,我們仍然可以在Firewall裏以添加白名單的方式保護redis的安全
當然這只是針對公網制定的白名單,redis本身仍然是相當於部署在internet中的,而不是一個私有的網絡,如果想讓應用以訪問內容的方式訪問redis,就需要將Redis部署在虛擬網絡中了
Redis 虛擬網絡部署主要有以下這些優勢:
有固定的static private ip
可以使用NSG控制出入站流量
應用訪問延遲更低
當然,想要部署在虛擬網絡中,Redis還要求我們必須有一個獨立的subnet用於redis部署,這是個什麼概念呢?如果用過application gateway的話其實很容易理解這個概念,application gateway也是要求必須部署在一個獨立的subnet中,這個subnet只能部署application gateway資源,不能部署其他任何資源,redis也是同樣的概念,這是redis部署在虛擬網絡裏的一個前置條件
另外,如果對於出入站流量有嚴格要求的場景,Redis還要求對一些特定的服務器和地址有入站或者出站的權限,redis需要定期和一些管理節點進行通信以維護redis本身的狀態
以下是這些要求的詳細介紹,如果網絡端口不滿足條件的話,會發現redis部署時會報錯超時等情況
出站端口要求
出站端口有七個要求。
與 Internet 的所有出站連接都可以通過客戶端的本地審覈設備建立。
其中三個端口將流量路由到爲 Azure 存儲和 Azure DNS 提供服務的 Azure 終結點。
剩餘端口範圍,這些端口用於內部 Redis 子網通信。 內部 Redis 子網通信不需要子網 NSG 規則。
端口 | 方向 | 傳輸協議 | 目的 | 本地 IP | 遠程 IP |
---|---|---|---|---|---|
80、443 | 出站 | TCP | Azure 存儲/PKI (Internet) 上的 Redis 依賴關係 | (Redis 子網) | * |
53 | 出站 | TCP/UDP | DNS (Internet/VNet) 上的 Redis 依賴關係 | (Redis 子網) | 168.63.129.16 和 169.254.169.254 1 以及子網的任何自定義 DNS 服務器 3 |
8443 | 出站 | TCP | Redis 的內部通信 | (Redis 子網) | (Redis 子網) |
10221-10231 | 出站 | TCP | Redis 的內部通信 | (Redis 子網) | (Redis 子網) |
20226 | 出站 | TCP | Redis 的內部通信 | (Redis 子網) | (Redis 子網) |
13000-13999 | 出站 | TCP | Redis 的內部通信 | (Redis 子網) | (Redis 子網) |
15000-15999 | 出站 | TCP | Redis 的內部通信和異地複製 | (Redis 子網) | (Redis 子網)(地域副本對等子網) |
6379-6380 | 出站 | TCP | Redis 的內部通信 | (Redis 子網) | (Redis 子網) |
1 Microsoft 擁有的這些 IP 地址用於對爲 Azure DNS 提供服務的主機 VM 進行尋址。
3 沒有自定義 DNS 服務器的子網或忽略自定義 DNS 的更新 redis 緩存不需要。
異地複製對等端口要求
如果在 Azure 虛擬網絡中的緩存之間使用異地複製,請注意,建議的配置是在兩個緩存的入站和出站方向上取消阻止整個子網的端口 15000-15999,這樣即使將來發生異地故障轉移,子網中的所有副本組件也可以直接相互通信。
入站端口要求
入站端口範圍有八個要求。 這些範圍中的入站請求從同一 VNET 中託管的其他服務入站,或者是 Redis 子網通信的內部請求。
端口 | 方向 | 傳輸協議 | 目的 | 本地 IP | 遠程 IP |
---|---|---|---|---|---|
6379、6380 | 入站 | TCP | 與 Redis 的客戶端通信、Azure 負載均衡 | (Redis 子網) | (Redis 子網)、虛擬網絡、Azure 負載均衡器 2 |
8443 | 入站 | TCP | Redis 的內部通信 | (Redis 子網) | (Redis 子網) |
8500 | 入站 | TCP/UDP | Azure 負載均衡 | (Redis 子網) | Azure 負載均衡器 |
10221-10231 | 入站 | TCP | Redis 的內部通信 | (Redis 子網) | (Redis 子網)、Azure 負載均衡器 |
13000-13999 | 入站 | TCP | 與 Redis 羣集的客戶端通信、Azure 負載均衡 | (Redis 子網) | 虛擬網絡、Azure 負載均衡器 |
15000-15999 | 入站 | TCP | 與 Redis 羣集的客戶端通信、Azure 負載均衡和異地複製 | (Redis 子網) | 虛擬網絡、Azure 負載均衡器(地域副本對等子網) |
16001 | 入站 | TCP/UDP | Azure 負載均衡 | (Redis 子網) | Azure 負載均衡器 |
20226 | 入站 | TCP | Redis 的內部通信 | (Redis 子網) | (Redis 子網) |
2 可以使用服務標記“AzureLoadBalancer”(資源管理器)或“AZURE_LOADBALANCER”(經典)來創作 NSG 規則。
其他 VNET 網絡連接要求
在虛擬網絡中,可能一開始不符合 Azure Redis 緩存的網絡連接要求。 在虛擬網絡中使用時,Azure Redis 緩存需要以下所有項才能正常運行。
與全球 Azure 存儲終結點建立的出站網絡連接。 這包括位於 Azure Redis 緩存實例區域的終結點,以及位於其他 Azure 區域的存儲終結點。 Azure 存儲終結點在以下 DNS 域之下解析:table.core.chinacloudapi.cn、blob.core.chinacloudapi.cn、queue.core.chinacloudapi.cn 和 file.core.chinacloudapi.cn。
與 ocsp.msocsp.com、mscrl.microsoft.com 和 crl.microsoft.com 建立的出站網絡連接。 需要此連接才能支持 SSL 功能。
虛擬網絡的 DNS 設置必須能夠解析前面幾點所提到的所有終結點和域。 確保已針對虛擬網絡配置並維護有效的 DNS 基礎結構即可符合這些 DNS 要求。
與以下 Azure 監視終結點(在下列 DNS 域下進行解析)的出站網絡連接:shoebox2-black.shoebox2.metrics.nsatc.net、north-prod2.prod2.metrics.nsatc.net、azglobal-black.azglobal.metrics.nsatc.net、shoebox2-red.shoebox2.metrics.nsatc.net、east-prod2.prod2.metrics.nsatc.net、azglobal-red.azglobal.metrics.nsatc.net。
所以,總結來說,想要將redis部署到虛擬網絡,需要滿足以下三個條件
有一個獨立的subnet用於redis部署
滿足redis的出入站要求
Premium版本Redis
部署的過程相對來說就很簡單了,在部署redis的時候選擇P級別redis, 然後挑選合適的vnet和subnet,可以看到如果subnet不滿足條件,會提示subnet中已經有其他資源