docker使用flannel網絡


 

基礎環境我們使用了兩台centos 7系統

基礎配置為:

兩台機器IP為

172.17.3.10

172.17.3.62

hosts文件配置為

172.17.3.10 node1

172.17.3.62 node2

兩台均配置為這樣

開啟內核ipv4轉發功能

echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf

sysctl -p

清除iptables底層默認規則,並開啟允許轉發功能

iptables -P INPUT ACCEPT

iptables -P FORWARD ACCEPT

iptables -F

iptables -L -n

最后關閉selinux,更改機器主機名,等等,完畢后重啟下機器,至此我們前期准備工作已完畢。

需要安裝的組件為:

1,etcd

2,flannel

3,docker

安裝步驟:

安裝etcd,我們采用了yum方式安裝

yum install -y epel-release

yum make cache fast

yum  install etcd -y

至此我們的etcd安裝完成。

安裝flannel

yum install flannel -y

最后我們再安裝docker

yum install -y yum-utils.noarch  ###安裝yum的擴張工具集

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo ####添加docker-ce的擴展源

yum install -y --setopt=obsoletes=0 docker-ce-17.03.3.ce-1.el7 ####安裝docker-ce

最后docker-ce安裝完成,我們一定要注意安裝順序,先安裝etcd和flannel最后安裝docker.

下面我們來配置這3個組件

首先配置etcd集群

更改兩台機器的上的etcd配置文件

vim /etc/etcd/etcd.conf

ETCD_DATA_DIR="/var/lib/etcd/default.etcd" ####數據存放位置
ETCD_LISTEN_PEER_URLS="http://0.0.0.0:2380" ####監聽其他etcd實列地址
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379,http://0.0.0.0:4001" ####監聽客戶端地址
ETCD_NAME="node1" ####節點名稱
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://node1:2380"  ####通知其他成員的etcd地址
ETCD_ADVERTISE_CLIENT_URLS="http://node1:2379,http://node1:4001"  ### #通知客戶端地址
ETCD_INITIAL_CLUSTER="node1=http://node1:2380,node2=http://node2:2380" ###初始化集群內節點地址
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"  ##初始化集群的token
ETCD_INITIAL_CLUSTER_STATE="new"  ##初始化集群狀態,new表示新建

以上是etcd集群的配置上面是node1的配置,node2配置和node1一樣,只是需要把node1改為node2

ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="http://0.0.0.0:2380"
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379,http://0.0.0.0:4001"
ETCD_NAME="node2"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://node2:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://node2:2379,http://node2:4001"
ETCD_INITIAL_CLUSTER="node1=http://node1:2380,node2=http://node2:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"

最后我們啟動etcd,並查看其集群狀態

systemctl start etcd

設置為開機啟動

systemctl enable etcd

查看啟動狀態

systemctl status etcd

需要注意的是,必須兩台機器的etcd實列都起來集群才能正常建立,這點務必要注意

查看下etcd集群的狀態

etcdctl member list

我們的etcd集群目前可以使用了,暫時到這里

接下來我們配置flannel

兩台配置一致

編輯flannel的配置文件,內容如下

vim /etc/sysconfig/flanneld

# Flanneld configuration options  

# etcd url location.  Point this to the server where etcd runs
FLANNEL_ETCD_ENDPOINTS="http://172.17.3.10:2379,http://172.17.3.62:2379"  #####etcd集群的地址,包括各個成員

# etcd config key.  This is the configuration key that flannel queries
# For address range assignment
FLANNEL_ETCD_PREFIX="/atomic.io/network"  ####自定義的子網目錄,一定要和添加到etcd的子網目錄一致

# Any additional options that you want to pass
#FLANNEL_OPTIONS=""
FLANNEL_OPTIONS="--logtostderr=false --log_dir=/var/log/ --etcd-endpoints=http://172.17.3.10:2379,http://172.17.3.62:2379 --iface=ens32"  ####定義了日志級別,路徑,以及etcd集群地址和綁定的屋里網卡信息

再啟動flannel之前需要向etcd內寫入子網信息

etcdctl  mk /atomic.io/network/config '{"Network":"10.10.0.0/16", "SubnetMin": "10.10.1.0", "SubnetMax": "10.10.254.0"}'

上面的2處紅色字體部分必須一致,可以自定義但是必須一致

子網范圍為 10.10.0.0/16,最小子網開始為10.10.1.0 最大子網結束為10.10.254.0,至此自定義子網信息我們已經寫入完畢。

接下來,我們來啟動flannel,並設置為開機啟動

systemctl start flanneld

systemctl enable flanneld

systemctl status flanneld

兩台都啟動后我們來配置docker

可以發現的是在我們先安裝flannel和etcd后最后安裝docker后我們使用 sysetmctl show docker 將會發現 在安裝flannel后自動生成配置

DropInPaths=/usr/lib/systemd/system/docker.service.d/flannel.conf

故在docker的systemd文件中應用對應變量 DOCKER_NETWORK_OPTIONS 即可

vim /usr/lib/systemd/system/docker.service

ExecStart=/usr/bin/dockerd \
          $DOCKER_NETWORK_OPTIONS

添加上述紅色部分即可,引用了flannel的網絡

重載配置systemctl daemon-reload

啟動docker

systemctl start docker

然后我們來看兩台物理機的網卡IP信息

首先看node1的

可以看到docker 0 的網橋已經使用flannel的網絡段了

node2也是如此

目前兩台物理機的docker 0 網絡處於同一子網下面的都是使用的flannel的子網,是可以相互ping通的

在node1上,ping node2的docker 0 網橋ip

在node2上,ping node1的docker 0網橋ip

是可以相互ping通的,那么兩台物理機上容器也是可以互通的,我們分別在兩台物理機上創建容器來測試下

在node1創建一個容器,名字叫test,進入容器內部並查看ip

我們來在容器內部ping下node2的docker 0網橋 IP

是可以ping通的,沒問題

我們去node2上來ping node1上的容器的ip

也是可以的

我們node2上創建一個容器

在容器內部去ping node1的docker 0 網橋IP

是沒有問題的

來ping下node1上的容器的ip

也是可以的,沒有問題

至此,docker使用flannel網絡並實現互聯互通完成。

需要注意的幾點要點:

1,向etcd集群寫入子網信息時候務必要注意建立的子網文件夾要和flannel的配置文件內一直。

2,flannel的配置,etcd集群地址寫正確,子網文件夾信息要和etcd寫入一致

3,系統iptables默認規則一定要清除,並開啟允許轉發

4,確定下docker的網絡是否被flannel接管,我們查看下docker的進程要確認下

如果有類似如上信息就表示被接管成功。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM