docker网络

注:本文档环境为centos7
一、docker自定义网桥并手动创建IP地址
二、container之间的连通
三、物理服务器中docker容器的vlan划分


一、docker自定义网桥并手动创建IP地址
整体思路:

停止docker服务
创建自定义网桥
生成一对接口,并分配给网桥和container,设置IP地址

具体步骤:
停止docker服务,并创建网桥

systemctl stop docker

brctl addbr bridge0
ip addr add 192.168.1.1/24 dev bridge0
ip link set dev bridge0 up

创建完成,可以通过以下命令查看网桥

brctl show //或者
ip addr show bridge0

修改docker文件,更换默认连接的网桥

vim /etc/sysconfig/docker
OPTIONS=’–selinux-enabled –log-driver=journald -b=bridge0’
//这句话是已有的,后添加 -b=bridge0,后面的名字改成什么网桥,就默认连接什么网桥

启动docker服务

systemctl start docker

新建一个none模式的容器,这时候容器没有网卡也没有跟网桥相连
这里写图片描述

查找这个容器的进程ID,然后创建它的命名空间,并做软链接,后面ip netns会用到

pid=$(docker inspect -f '{{.State.Pid}}' e2ffda7e30f5)
mkdir -p /var/run/netns
ln -s /proc/$pid/ns/net /var/run/netns/$pid

创建一对“peer”接口A和B,绑定A到网桥,并启动它

ip link add A type veth peer name B
brctl addif bridge0 A
ip link set A up

这时候会发现本机ifconfig,会多出一个A的网卡信息
这里写图片描述

将B放到容器的网络命名空间,重命名,并配置一个空闲的IP地址

ip link set B netns $pid
ip netns exec $pid ip link set dev B name eth0
ip netns exec $pid ip link set eth0 up
ip netns exec $pid ip addr add 192.168.1.10/16 dev eth0
ip netns exec $pid ip route add default via 192.168.1.1

这里写图片描述


二、container之间的连通

首先运行一个容器

docker run -dit –name t1 docker.io/centos:centos6

然后通过- -link的方式运行第二个容器,链接到第一个容器。- -link格式:- -link 要链接的容器名称:别名

docker run -dit -P –name t2 –link t1:test docker.io/centos:latest
//通过 docker ps –no-trunc来查看容易详细内容会发现有所不同,说明t1和t2已经链接成功

这里写图片描述

进入到t2容器中就会发现,docker把t1的host信息写入到了t2 /etc/hosts的文件

这里写图片描述


三、物理服务器中docker容器的vlan划分

具体步骤:
安装openvswitch和pipework以及依赖包

yum -y install gcc make python-devel openssl-devel kernel-devel graphviz kernel-debug-devel autoconf automake rpm-build redhat-rpm-config libtool bridge-utils

wget http://github.com/jpetazzo/pipework.git       //下载pipework
unzip pipework-master.zip
cp -p /root/pipework-master/pipework /usr/local/bin

wget http://openvswitch.org/releases/openvswitch-*.tar.gz   //下载openvswitch
tar xzf openvswitch-*.tar.gz -C /usr/src
mkdir -p /root/rpmbuild/SOURCES
cp openvswitch-%.tar.gz /root/rpmbuild/SOURCES

sed 's/openvswitch-kmod//g' /usr/src/openvswitch-*/rhel/openvswitch.spec > /usr/src/openvswitch-*/rhel/openvswitch_no_kmod.spec

rpmbuild -bb --without check openvswitch-*/rhel/openvswitch_no_kmod.spec

运行完成后会在/root/rpmbuild/RPMS/x86_64/里面有2个文件,安装其中一个就行

启动服务

systemctl start openvswitch

创建交换机,把物理网卡加入ovs1中

ovs-vsctl add-br ovs1
ovs-vsctl add-port ovs1 物理网卡名称
ip link set ovs1 up
ifconfig 物理网卡名称 0
ifconfig ovs1 192.168.10.1

这里写图片描述

在物理服务器上创建4个docker容器,然后将docker容器划分到自己规划的VLAN中

docker run -dit --name t1 docker.io/centos
docker run -dit --name t2 docker.io/centos
docker run -dit --name t3 docker.io/centos
docker run -dit --name t4 docker.io/centos

pipework ovs1 t1 192.168.10.100/24 @100
pipework ovs1 t2 192.168.10.101/24 @100
pipework ovs1 t3 192.168.10.102/24 @200
pipework ovs1 t4 192.168.10.103/24 @200

测试:

进入100vlan中,可以互相ping通
进入200vlan中,可以互相ping通
但是跨vlan就ping不通

这里写图片描述

猜你喜欢

转载自blog.csdn.net/leo15561050003/article/details/72485176