1. 程式人生 > >MacOS下解決宿主機和docker容器之間網路互通

MacOS下解決宿主機和docker容器之間網路互通

docker在Mac下使用非常方便,官網提供了desktop版本的視覺化軟體,甚至還十分貼心地整合好了k8s套件。然而如果想同時部署和使用多個容器,每個容器不使用127.0.0.1地址,而是各自有ip,如使用172.17.0.x網段,則需要解決從宿主機到各個容器的網路通訊。 如果是使用其他Linux系統的使用者則不用擔心這個問題,Linxu系統會自動幫我們處理好ip之間的互通(宿主機和各個容器之間)。而Mac想要直接訪問容器的ip,則需要曲線救國,通過搭建一個vpn服務,然後通過vpn再去和容器的網段互聯。 經過嘗試openvpn成為了最佳的解決方案,github的專案地址為:[openvpn](https://github.com/onedata/docker-openvpn-kube-for-mac) 其中網路連通的原理,下圖所示,openvpn作為一個轉接的橋樑。 ![](https://img2020.cnblogs.com/blog/782095/202012/782095-20201226181546783-1365475547.png) 根據官網專案描述,它是可以適用於Mac下的docker和Kubernetess: > 該容器(openvpn)在Docker For Mac容器和主機Mac本身之間建立VPN網路。它使您可以直接與作為在IP 172.17.0.0/16上執行的Docker容器執行的服務進行通訊,還可以提供到Kubernetess Pod的直接路由以及預設情況下在網路10.1.0.0/16和10.96.0.0/16和10.101上執行的服務的直接路由.0.0 / 16 然後依次順序執行下列命令去建立vpn和vpn的配置。 1.初始化一個ovpn資料容器,用以儲存配置檔案和憑證。 ``` docker volume create --name ovpn-data docker run -v ovpn-data:/etc/openvpn --rm onedata/docker-openvpn-kube-for-mac:1.3.0 ovpn_genconfig -u udp://localhost ``` 2.建立CA。 ``` docker run -v ovpn-data:/etc/openvpn --rm -it onedata/docker-openvpn-kube-for-mac:1.3.0 ovpn_initpki ``` 3.執行vpn server。 ``` docker run --dns 8.8.8.8 --restart=always -v ovpn-data:/etc/openvpn --name docker-openvpn-kube-for-mac -d -p 1194:1194/udp --cap-add=NET_ADMIN onedata/docker-openvpn-kube-for-mac:1.3.0 ``` 4.建立一個不含祕鑰的客戶端憑證。 ``` docker run -v ovpn-data:/etc/openvpn --rm -it onedata/docker-openvpn-kube-for-mac:1.3.0 easyrsa build-client-full DockerForMac nopass ``` 5.使用嵌入式證書檢索客戶端配置。 ``` docker run -v ovpn-data:/etc/openvpn --rm onedata/docker-openvpn-kube-for-mac:1.3.0 ovpn_getclient DockerForMac > ~/Downloads/DockerForMac.ovpn ``` 上面這一步生成的DockerForMac.ovpn配置需要在Tunnelblink裡面使用。Tunnelblink是一款開源免費的針對MacOS的OpenVPN圖形化客戶端,可以非常方便地使用openvpn配置來連線網路服務。下載地址在此:[Tunnelblink](https://sourceforge.net/projects/tunnelblick/),可以直接下載使用。 下載並安裝後Tunnelblink,執行它,然後再到終端執行如下命令來新增網路配置: ``` open ~/Downloads/DockerForMac.ovpn ``` 如此這番操作,就可以直接通過宿主機去訪問docker容器例項的ip了,使用ping命令也能ping通。