docker+ovs+pipework配置容器ip互通
目的:两个宿主机里面的容器可以互通。
操作思路:
- ping自己的网卡
- ping对方的网卡
- ping对方的容器ip
- done
前提:需要两台服务器。以10.8.46.197和10.8.46.190为例子
1.安装依赖包:
yum -y update
yum -y install net-tools
yum -y install bridge-utils
yum -y install make gcc openssl-devel autoconf automake rpm-build redhat-rpm-config
yum -y install python-devel openssl-devel kernel-devel kernel-debug-devel libtool wget
yum -y install selinux-policy-devel
yum -y install python-six
yum -y install wget
2.预处理:
cd ~ && mkdir -p ~/rpmbuild/SOURCES && mkdir /etc/openvswitch
wget http://openvswitch.org/releases/openvswitch-2.7.0.tar.gz
cp openvswitch-2.7.0.tar.gz ~/rpmbuild/SOURCES/
tar xfz openvswitch-2.7.0.tar.gz
sed 's/openvswitch-kmod, //g' openvswitch-2.7.0/rhel/openvswitch.spec > openvswitch-2.7.0/rhel/openvswitch_no_kmod.spec
3.构建RPM包:
rpmbuild -bb --nocheck ~/openvswitch-2.7.0/rhel/openvswitch_no_kmod.spec
4.安装:
yum -y localinstall ~/rpmbuild/RPMS/x86_64/openvswitch-2.7.0-1.x86_64.rpm
5.启动相关服务:
setenforce 0
systemctl stop firewalld && systemctl disable firewalld
systemctl start openvswitch.service
systemctl enable openvswitch.service
systemctl status openvswitch.service –l
安装pipework
cd /opt
unzip pipework-master.zip
mv pipework-master pipework
cp -rp pipework/pipework /usr/local/bin/
6.设置OVS系统开机启动
mkdir /opt/script
mv autostart.sh script/
自启动脚本 (每一台都要装)(该脚本只在重启虚拟机之后使用)
(以192.168.100.122 192.168.100.118为例)
vim /opt/script/autostart.sh
chmod +x /opt/script/autostart.sh
将文件目录的路径放入
vim /etc/rc.d/rc.local
/opt/script/autostart.sh
将/opt/script/autostart.sh的路径放入文本中
chmod +x /etc/rc.d/rc.local
设置关闭dockr的开机自动启动
chkconfig docker off
chmod +x /opt/script/autostart.sh
创建tomcat容器配置ip
(可以查看ip,命令ip a。以192.168.100.122和192.168.100.118为例)
创建tomcat脚本
服务器1的启动脚本
#!/bin/bash
#设置容器相关变量
cname="tomcat"
name="jdk1.8"
logs="/opt/data/"${cname}"/"
#创建目录
mkdir -p ${logs}
port1="8080"
#启动容器
echo -e "Start "${cname}" Container"
docker run -d -it -p ${port1}:${port1} --privileged=true --net=none --restart=always --name ${cname} --hostname ${name} -v ${logs}:/opt/data 10.249.0.137:80/base/jdk-1.8:20210202
pipework br0 tomcat 172.17.197.12/24@172.17.197.1
启动脚本
[root@localhost jdk]# pwd
/opt/script/setup/jdk
[root@localhost jdk]# ./install.sh
重启:reboot
ping网卡
进入容器,ping自己网卡
[root@localhost jdk]# docker exec -it tomcat bash
[root@jdk1 /]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
17: eth1@if18: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 7e:7a:a6:28:cf:71 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 172.17.197.12/24 brd 172.17.197.255 scope global eth1
valid_lft forever preferred_lft forever
[root@jdk1 /]# ping 172.17.197.1
PING 172.17.197.1 (172.17.197.1) 56(84) bytes of data.
64 bytes from 172.17.197.1: icmp_seq=1 ttl=64 time=1.28 ms
64 bytes from 172.17.197.1: icmp_seq=2 ttl=64 time=0.090 ms
64 bytes from 172.17.197.1: icmp_seq=3 ttl=64 time=0.060 ms
64 bytes from 172.17.197.1: icmp_seq=4 ttl=64 time=0.067 ms
64 bytes from 172.17.197.1: icmp_seq=5 ttl=64 time=0.082 ms
^C
--- 172.17.197.1 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4001ms
rtt min/avg/max/mdev = 0.060/0.316/1.282/0.483 ms
[root@jdk1 /]#
同样操作,将测试服务器10.8.46.190也操作一次。
效果:各自ping对方的容器
虚拟机容器互通
验证网桥:进入每台机的容器去ping同一台机的虚拟机ip
注意:如果其他主机内的容器不能ping同该容器,而相同主机的容器能ping通,请检查创建脚本是否忘记添加网关的ip
八股文
docker 四种网络模型
我们在使用docker run创建Docker容器时,可以用--net
选项指定容器的网络模式,Docker有以下4种网络模式
- host模式,使用
--net=host
指定。 - container模式,使用
--net=container:NAME_or_ID
指定。 - none模式,使用
--net=none
指定。 - bridge模式,使用
--net=bridge
指定,默认设置。
网络模式 | 配置 | 说明 |
---|---|---|
bridge模式 | –net=bridge | 默认值,在Docker网桥docker0上为容器创建新的网络栈 |
none模式 | –net=none | 不配置网络,用户可以稍后进入容器,自行配置 |
container模式 | –net=container:name/id | 容器和另外一个容器共享Network namespace。kubernetes中的pod就是多个容器共享一个Networknamespace. |
host模式 | –net=host | 容器和宿主机共享Network namespace |
用户自定义 | –net=自定义网络 | 用户自己使用network相关命令定义网络,创建容器的时候可以指定为自己定义的网络 |
参考文献:
- docker的4种网络模型:https://zhuanlan.zhihu.com/p/559977397
2. Docker+Ovs构建SDN网络:https://blog.csdn.net/weixin_40042248/article/details/120390840