docker添加網橋並設置ip地址范圍操作

不知道是因為二進制docker 19.03版本安裝後不自動創建docker0網橋,還是其他什麼原因,docker的網絡模式裡面的bridge網橋沒有。

害的我裝個容器映射端口一直看不到端口,也不報錯,定位半天才發現沒有這個bridge網橋。

廢話不多說。開幹!

先看一下當前情況:

由於是生產環境,所以先要把pod給驅逐一下,以免影響業務

首先說下,直接使用docker network create xx的方式是不行的。因為這種方式創建的網橋並沒有掛到虛擬機上,所以不工作,可能需要一些其他的額外配置。這裡就不去研究瞭。提一下,免得各位踩坑。

整個過程如下圖,清晰可見。為瞭方便各位看官老爺,我把命令也復制出來。

[[email protected] jpserver]# ip a|grep docker0
[[email protected] jpserver]# brctl -h
Usage: brctl [commands]
commands:
 addbr  <bridge> add bridge
 delbr  <bridge> delete bridge
 addif  <bridge> <device> add interface to bridge
 delif  <bridge> <device> delete interface from bridge
 hairpin <bridge> <port> {on|off} turn hairpin on/off
 setageing <bridge> <time> set ageing time
 setbridgeprio <bridge> <prio> set bridge priority
 setfd  <bridge> <time> set bridge forward delay
 sethello <bridge> <time> set hello time
 setmaxage <bridge> <time> set max message age
 setpathcost <bridge> <port> <cost> set path cost
 setportprio <bridge> <port> <prio> set port priority
 show  [ <bridge> ] show a list of bridges
 showmacs <bridge> show a list of mac addrs
 showstp <bridge> show bridge stp info
 stp  <bridge> {on|off} turn stp on/off
[[email protected] jpserver]# brctl addbr docker0
[[email protected] jpserver]# ip link set docker0 up
[[email protected] jpserver]# ip addr add 192.168.0.0/16 dev docker0
[[email protected] jpserver]# cat /etc/docker/daemon.json 
{"data-root": "/docker","bridge": "none","registry-mirrors": ["http://9b2cd203.m.daocloud.io"]}
[[email protected] jpserver]# vim /etc/docker/daemon.json 
[[email protected]bi-server-103 jpserver]# cat /etc/docker/daemon.json 
{"data-root": "/docker","bridge": "docker0","registry-mirrors": ["http://9b2cd203.m.daocloud.io"]}
[[email protected] jpserver]# systemctl daemon-reload
[[email protected] jpserver]# systemctl restart docker
[[email protected] jpserver]# ip a|grep docker0
149: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000
 inet 192.168.0.1/16 brd 192.168.255.255 scope global docker0
[[email protected] jpserver]# docker network ls
NETWORK ID   NAME    DRIVER    SCOPE
edd34bc4e197  bridge    bridge    local
9560af3573ae  host    host    local
22885d053744  none    null    local
[[email protected] jpserver]#

重啟完瞭以後,重新跑要映射端口的容器,對比如下。之前沒有添加網橋就沒有端口,添加完網橋以後。端口正常映射

最後就是去除污點,讓該節點重新恢復調度。

kubectl uncordon 10.168.0.103

補充:Docker修改默認網橋ip地址172.17.0.1

Docker 服務啟動後默認會創建一個 docker0 網橋(其上有一個 docker0 內部接口),它在內核層連通瞭其他的物理或虛擬網卡,這就將所有容器和本地主機都放到同一個物理網絡。

Docker 默認指定瞭 docker0 接口 的 IP 地址和子網掩碼,讓主機和容器之間可以通過網橋相互通信,它還給出瞭 MTU(接口允許接收的最大傳輸單元),通常是 1500 Bytes,或宿主主機網絡路由上支持的默認值。這些值都可以在服務啟動的時候進行配置。

可以用編輯/etc/docker/daemon.json文件,添加內容 “bip”: “ip/netmask” [ 切勿與宿主機同網段 ]

[[email protected] /]# vi /etc/docker/daemon.json 
{"bip":"192.168.100.1/24"}
systemctl restart docker

註意:很懂朋友這麼修改是不成功的,又用brctl 刪除網橋,其實隻是你沒有配置對。

有些daemon.json文件裡面是有內容的例如:

{“registry-mirrors”: [“http://f1361db2.m.daocloud.io”]}這是個docker的私有源

{"registry-mirrors": ["http://f1361db2.m.daocloud.io"]}
{"bip":"172.16.0.1/24"}

這樣改是不會生效的

{"registry-mirrors": ["http://f1361db2.m.daocloud.io"],
"bip":"172.16.0.1/24"}

這才是正確的修改方法。

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。如有錯誤或未考慮完全的地方,望不吝賜教。