整合ExpressRoute以YARP架設內網MCR代理伺服器

整合ExpressRoute以YARP架設內網MCR代理伺服器

導入Docker以來,一直有個難題困擾著我。公司因資安問題,伺服器被嚴格保護在隔離區,簡單說,就是與外界網路處於隔離狀態。但Docker本身需要存取Microsoft Container Registry(早期是Docker Hub)服務來取得Base Images,但這些服務都處在雲端,而Firewall大多只能有效處理IP Based的情況下,根本無法做到安全的開放,以致於我們都是使用非常笨的離線處理方式docker savedocker load),當Base Images需要更新時,就是個費時費力的苦力活。終於在多年之後迎來曙光。

YARP架構如下:

YARP-MCR
  1. Docker伺服器網段透過Azure ExpressRoute服務,打通了一條可信任的安全通道,不同於傳統VPN或Site to Site的方式,它提供「不經過公用網際網路」與Azure資料中心連線。
  2. 透過YARP專案,現在我們在.NET Core能快速擁有開發Proxy的能力。這裡為了安全,我們採用Direct Forwarding來直接存取MCR。終於我們完成接上Microsoft MCR這條腳的最後一哩路。
docker-pull-mcr-from-yarp-proxy
  1. 最後注意一下,目前App Service是任何人都能存取的,雖然沒對外開放,但萬一有爬蟲過來,可能會造成一些問題。在【網路】→【存取限制】的地方,記得去限制你的內網IP才能存取此App Service,以防止不必要的問題。

題外話,這種簡潔又實用的專案,採用.NET 6 Minimal API來撰寫,怎麼看都好順眼。

這份架構圖雖然有夠簡單,而且透過YARP實作出來非常快(沒幾行程式)。但完成它的前期時間是花費n年做基礎架構的建設。看圖都很簡單,說起來也不難,但「軟體架構能否實現,真正的問題在成本。」,人不在廚房,點菜都很簡單,但菜從種下土到上桌都是一段不短的路。你能速成(例如我用YARP),是有許多工程師在為你造拼圖,讓你我有圖資可以快造出我們所需要架構。

沒有留言:

張貼留言

感謝您的留言,如果我的文章你喜歡或對你有幫助,按個「讚」或「分享」它,我會很高興的。