本節索引:
一、Docker networking相關概念
二、Docker單主機容器通信
三、Docker單主機網絡配置示例
四、Dokcer跨主機容器通信介紹
一、Docker networking相關概念
Docker單主機網絡創建過程:
1、創建一對虛擬接口,分別放到本地主機和新容器的命名空間中。
2、本地主機一端的虛擬接口連接到默認的docker0網橋或指定網橋上,并具有
一個以veth開頭的唯一名字,如veth1234
3、容器一端的虛擬接口將放到新創建的容器中,并修改名字為eth0。這個接口
只在容器的命名空間可見。
4、從網橋可用地址段中獲取一個空閑地址分配給容器的eth0(如:172.17.0.2/16),
并配置默認路由網關為docker0網卡的內部接口docker0的IP地址。
完成這些配置后,容器就可以使用它所能看到的eth0虛擬網卡來連接其他容器和
訪問外部網絡。
另外,可以在docker運行時通過–net參數來指定容器的網絡配置,有四個可選值:
–net=bridge:Bridged container 橋接式容器
–net=host:Joined container 聯盟式容器
–net=none:Closed container 閉合式容器
–net=container:Open container 開放式容器
四種容器networking結構對比:
二、Docker單主機容器通信
1、bridge模式:
docker容器默認使用bridge模式,在Docker網橋上為容器創建新的網絡棧。
示例:bridge模式
宿主機將會創建一塊虛擬網卡,網卡工作模式為橋接,默認地址為:172.17.0.1/16
以默認網絡類型(–net=bridge)運行一個容器test
docker run –name test -it –rm busybox:latest
也可從容器外注入配置信息,例如:
docker run –name test? -it –rm –dns 114.114.114.114 –add-host www.wxlinux.com:1.1.1.1 busybox:latest
2、host模式
讓容器使用宿主機的用戶空間,和物理機共用一套TCP/IP協議棧、IP地址;擁有完全
的本地主機接口訪問權限,可以跟主機其他root進程一樣打開低范圍端口,還可以讓
容器做一些影響整個主機系統的事情,例如重啟主機。因此使用此選項時要非常小心。
示例:host模式
以host網絡類型運行一個容器test
docker run –name test –network host -it –rm busybox:latest
3、none模式
讓Docker將新容器放到隔離的網絡棧中,但是不進行網絡配置。之后,用戶可以自己
進行配置
示例:none模式
4、container模式
也稱為聯盟式容器:Joined container
讓Docker將新建容器的進程放到一個已存在的容器的網絡棧中,新容器進程有自己的文件
系統、進程列表和資源限制,但會和已存在的容器共享IP地址和端口等網絡資源,兩者進
程可以直接通過lo環回接口通信
示例:container模式
啟動第一個容器
docker run –name test1 -it -rm busybox
啟動第二個容器,共享test1容器的網絡資源
三、Docker單主機網絡配置示例
示例一:修改容器默認網橋地址
自定義docker0橋的網絡屬性信息:/etc/docker/daemon.json文件
{
??????????? “bip”: “192.168.1.5/24”,
??????????? “fixed-cidr”: “10.20.0.0/16”,
??????????? “fixed-cidr-v6”: “2001:db8::/64”,
??????????? “mtu”: 1500,
??????????? “default-gateway”: “10.20.1.1”,
??????????? “default-gateway-v6”: “2001:db8:abcd::89”,
??????????? “dns”: [“10.20.1.2″,”10.20.1.3”]
??????? }
核心選項為bip,即bridge ip之意,用于指定docker0橋自身的IP地址;其它選項可通過此地
址計算得出。
systemctl restart docker
示例二:docker遠程連接其他docker(默認沒開啟)
dockerd守護進程的C/S,其默認僅監聽Unix SOcket格式的地址,/var/run/docker.sock;
如果使用TCP套接字,
vim /etc/docker/daemon.json
“hosts”: [“tcp://0.0.0.0:2375”, “unix:///var/run/docker.sock”]
也可向dockerd直接傳遞“-H|–host”選項;
示例:
docker主機IP:192.168.30.10
本地鏡像列表如下:
vim /etc/docker/daemon.json
重啟docker服務
systemctl restart docker
遠程訪問IP地址:192.168.30.10的鏡像
docker -H 192.168.30.10:2375 image ls
示例三:創建另外一個bridge網絡橋
默認docker啟動后,自帶一個docker0的網橋,地址為172.17.0.1/16
創建一個名稱為mybr0,地址為172.26.0.0/16的網橋
docker network create -d bridge –subnet “172.26.0.0/16” –gateway “172.26.0.1” mybr0
查看網橋
四、Docker跨主機容器通信介紹
隧道方案:
Overlay:一種網絡架構上疊加的虛擬化技術模式,其大體框架是對基礎網絡不進行大
規模修改的條件下,實現應用在網絡上的承載,并能與其它網絡業務分離,并且以基于
IP的基礎網絡技術為主。Overlay 技術是在現有的物理網絡之上構建一個虛擬網絡,上
層應用只與虛擬網絡相關。
Docker: 跨主機集群網絡解決方案的一種,可以用于連接部署在多臺主機上的 Docker
容器,使用網絡的應用程序不必去配置端口映射等信息,Weave的通信支持加密,所以
用戶可以從一個不受信任的網絡連接到主機。
Flannel:一個專為kubernetes定制的三層網絡解決方案,主要用于解決容器的跨主機通信
問題。
隧道方案優缺點:
優點:對底層的網絡沒有過高的要求,一般來說,只要是在一個三層可達網絡里,就能構建
出一個基于隧道的容器網絡。
缺點:隨著節點規模的增長復雜度會提升,大規模集群情況下網絡問題跟蹤復雜
路由方案:
Calico:是一個純三層的虛擬網絡方案,Calico 為每個容器分配一個IP,每個 host都是
router,把不同 host 的容器連接起來。與VxLAN不同的是,Calico不對數據包做額外封
裝,不需要 NAT 和端口映射,擴展性和性能都很好。
與其他容器網絡方案相比,Calico 還有一大優勢:network policy。用戶可以動態定義 ACL
規則,控制進出容器的數據包,實現業務需求。
MacVLAN:Linux操作系統內核提供的網絡虛擬化方案之一,更準確的說法是網卡虛擬化方
案。它可以為一張物理網卡設置多個mac地址,相當于物理網卡施展了影分身之術,由一
個變多個,同時要求物理網卡打開混雜模式。針對每個mac地址,都可以設置IP地址,本
來是一塊物理網卡連接到交換機,現在是多塊虛擬網卡連接到交換機。
路由方案優缺點:
優點:從三層或者兩層實現跨主機容器互通,沒有NAT,效率比較高,和目前的網絡能夠融合
在一起,每一個容器都可以像虛擬機一樣分配一個業務的IP。
缺點:如果幾萬新的容器IP沖擊到路由表里,導致下層的物理設備沒辦法承受;而且每一個容
器都分配一個業務IP,業務IP會消耗很快。
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/104693