使用flannel配置docker网络

这篇文章主要总结一下如何在使用flannel进行docker的配置,介绍docker尚未安装或者是已经安装的情况下,如何与flannel进行连接,并以一个具体的例子介绍一下如何在docker和flannel分别安装的情况下进行设定。

主要思路

主要需要确认的是docker0是否在flannel的设定下统一进行容器IP的管理和分配。

全新docker安装

flannel在安装时,一般会在systemd的service文件的ExecStartPost中设定如下执行内容:

mk-docker-opts.sh -k DOCKER_NETWORK_OPTIONS -d /run/flannel/docker

这样则会生成/run/flannel/docker文件, 在这个文件中一般会给docker提供一个设定参数DOCKER_NETWORK_OPTIONS,DOCKER_NETWORK_OPTIONS中会包含如下设定信息:

  • --bip
  • --ip-masq
  • --mtu

而在docker的systemd的service中,只需要将DOCKER_NETWORK_OPTIONS传递给dockerd即可。

已有安装

事前准备

docker详细信息如下所示(centos下的yum install docker的版本1.13)

[root@host131 shell]# docker version
Client:
 Version:         1.13.1
 API version:     1.26
 Package version: docker-1.13.1-91.git07f3374.el7.centos.x86_64
 Go version:      go1.10.3
 Git commit:      07f3374/1.13.1
 Built:           Wed Feb 13 17:10:12 2019
 OS/Arch:         linux/amd64

Server:
 Version:         1.13.1
 API version:     1.26 (minimum version 1.12)
 Package version: docker-1.13.1-91.git07f3374.el7.centos.x86_64
 Go version:      go1.10.3
 Git commit:      07f3374/1.13.1
 Built:           Wed Feb 13 17:10:12 2019
 OS/Arch:         linux/amd64
 Experimental:    false
[root@host131 shell]#

flannel的版本为v0.10.0

[root@host131 shell]# flanneld --version
v0.10.0
[root@host131 shell]# 

flannel 和docker分别安装,可以看到flannel.1和docker0所在网段不同

[root@host131 shell]# ip addr show flannel.1
5: flannel.1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UNKNOWN group default 
    link/ether 22:22:02:92:1e:74 brd ff:ff:ff:ff:ff:ff
    inet 172.200.240.0/32 scope global flannel.1
       valid_lft forever preferred_lft forever
    inet6 fe80::2022:2ff:fe92:1e74/64 scope link 
       valid_lft forever preferred_lft forever
[root@host131 shell]# 
[root@host131 shell]# ip addr show docker0
6: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:5f:2b:90:6b brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 scope global docker0
       valid_lft forever preferred_lft forever
[root@host131 shell]# 

确定设定文件

确认如下文件是否存在

[root@host131 shell]# cat /run/flannel/docker 
DOCKER_OPT_BIP="--bip=172.200.240.1/21"
DOCKER_OPT_IPMASQ="--ip-masq=false"
DOCKER_OPT_MTU="--mtu=1450"
DOCKER_NETWORK_OPTIONS=" --bip=172.200.240.1/21 --ip-masq=false --mtu=1450"
[root@host131 shell]# cat /run/flannel/subnet.env 
FLANNEL_NETWORK=172.200.0.0/16
FLANNEL_SUBNET=172.200.240.1/21
FLANNEL_MTU=1450
FLANNEL_IPMASQ=true
[root@host131 shell]#

如果不存在的情况下,考虑如下操作:

  • 重启flanneld:systemctl restart flanneld
  • 执行命令:mk-docker-opts.sh -k DOCKER_NETWORK_OPTIONS -d /run/flannel/docker

设定docker0

使用subnet.env的内容进行docker0设定

[root@host131 shell]# source /run/flannel/subnet.env 
[root@host131 shell]# echo ${FLANNEL_SUBNET}
172.200.240.1/21
[root@host131 shell]# ifconfig docker0 ${FLANNEL_SUBNET}
[root@host131 shell]#

重启docker

重启docker后即可

[root@host131 shell]# ip ad s docker0
7: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:6f:f5:6e:a2 brd ff:ff:ff:ff:ff:ff
    inet 172.200.240.1/21 scope global docker0
       valid_lft forever preferred_lft forever
[root@host131 shell]# 

启动后恢复缺省的ip的对应方法

经常会碰到的问题是ifconfig 命令之后修改成功,但是重启之后又恢复原装,可以考虑如下方式进行解决。

删除docker0设备并重启

执行示例如下所示

[root@host131 shell]# systemctl stop docker
[root@host131 shell]# ip link set dev docker0 down
[root@host131 shell]# brctl delbr docker0
[root@host131 shell]# ip a s docker0
Device "docker0" does not exist.
[root@host131 shell]# systemctl restart docker
[root@host131 shell]#

修改docker的service文件并重启docker

centos下缺省安装的docker,由于环境变量文件中将DOCKER_NETWORK_OPTIONS进行了设定,即使你在外部进行了source操作,docker在重启的时候仍然会将你读入的正确设定设成缺省的"",所以会恢复原装。

[root@host131 shell]# cat /usr/lib/systemd/system/docker.service 
[Unit]
Description=Docker Application Container Engine
Documentation=http://docs.docker.com
After=network.target
Wants=docker-storage-setup.service
Requires=docker-cleanup.timer

[Service]
Type=notify
NotifyAccess=main
EnvironmentFile=-/run/containers/registries.conf
EnvironmentFile=-/etc/sysconfig/docker
EnvironmentFile=-/etc/sysconfig/docker-storage
EnvironmentFile=-/etc/sysconfig/docker-network
...省略
[root@host131 shell]# 
  • /etc/sysconfig/docker-network
[root@host131 shell]# cat /etc/sysconfig/docker-network
# /etc/sysconfig/docker-network
DOCKER_NETWORK_OPTIONS=
[root@host131 shell]#
  • 修改方法
    按照本文提示的第一种方式,设定此参数,示例如下
EnvironmentFile=-/etc/sysconfig/docker-network
EnvironmentFile=-/run/flannel/docker
  • 重启并确认
[root@host131 shell]# systemctl daemon-reload
[root@host131 shell]# systemctl restart docker
[root@host131 shell]# ip addr show docker0
7: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:6f:f5:6e:a2 brd ff:ff:ff:ff:ff:ff
    inet 172.200.240.1/21 scope global docker0
       valid_lft forever preferred_lft forever
[root@host131 shell]# 
淼叔 CSDN认证博客专家 神经网络 TensorFlow NLP
资深架构师,PMP、OCP、CSM、HPE University讲师,EXIN DevOps Professional与DevOps Master认证讲师,曾担任HPE GD China DevOps & Agile Leader,帮助企业级客户提供DevOps咨询培训以及实施指导。熟悉通信和金融领域,有超过十年金融外汇行业的架构设计、开发、维护经验,在十几年的IT从业生涯中拥有了软件开发设计领域接近全生命周期的经验和知识积累,著有企业级DevOps技术与工具实战。
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页