來看下這樣的一個架構,web服務器默認路由指向FW,web服務器前有一個standard load balancer,web服務器是它的後端池,LB上配置了80端口的規則,web服務器自己沒有公網IP,再這樣的架構下,有兩個問題 nginx
Web服務器是否能訪問internetweb
在internet經過standard lb是否能訪問web服務器上的nginx後端
咱們一個個來看,standard lb後端的服務器,默認是不能訪問internet的,那麼若是它的默認路由指向Firewall呢?服務器
通過測試發現,訪問徹底沒有問題
微信
那麼,第二個問題呢,首先來看下LB的配置,其實很簡單
架構
能夠看到只是簡單配置了一個80的規則負載均衡
可是測試發現,lb的ip一直沒辦法ping通ide
可是,在把指向FW的默認路由去掉以後,咱們發現能夠ping通了
測試
這是爲何呢?其實微軟的文檔已經給了咱們解釋blog
這種現象叫非對稱路由,理解上其實很簡單,由於入站的時候是經過LB進來的,可是回去的時候由於默認路由的緣由,卻要從FW出去,FW上沒有這個會話,就回致使把包丟掉
非對稱路由
非對稱路由是指數據包採用一條路徑發往目標,並採用另外一條路徑返回到源。 若是子網的默認路由轉到防火牆的專用 IP 地址,而且使用的是公共負載均衡器,則會出現非對稱路由問題。 在這種狀況下,將經過負載均衡器的公共 IP 地址接收傳入的負載均衡器流量,但返回路徑將經過防火牆的專用 IP 地址。 因爲防火牆是有狀態的,而且沒法識別此類已創建的會話,所以會丟棄返回的數據包。
這個問題其實也是能夠有辦法解決的,官網的解釋是說,若是防火牆後邊跟的是public lb,則須要建立一個到防火牆public ip的UDR規則,下一條是internet,不然azure會經過默認路由發給防火牆的private ip,同時流量的入口也不能是LB,而應該是FW
下邊咱們就來試下,整個流量是這樣的FW -> Public Standard LB -> WEB
首先,先在FW上配置到LB的NAT規則
可是測試發現,端口連不上
接下來再試下添加到FW 公網IP的路由
此次終於訪問成功了