基于centos 7 docker+openvswitch 容器多节点互联配置

基于centos 7 docker+openvswitch 容器多节点互联配置

使用ovs 搭建docker 容器间多节点互联,这与其他文章写的只2个节点做gre隧道互联有一些区别,特别是后续扩容节点后的互通,下面是整个构建过程步骤

服务器地址

  
  
  
  
  1. 192.168.5.134 node1
  2. 192.168.5.153 node2
  3. 192.168.5.154 node3

1.所有节点安装ovs

安装ovs不是我们这篇文章讨论的重点,安装ovs可以参考以下链接https://n40lab.wordpress.com/2014/09/04/openvswitch-2-3-0-lts-and-centos-7/

2.配置ovs brigde

我们先在 node1 和 node2 上配置ovs brigde,以下命令在2个节点都执行

  
  
  
  
  1. ovs-vsctl add-br obr0

3. 建立node1node2 gre隧道

  
  
  
  
  1. ovs-vsctl add-port obr0 gre0 -- set Interface gre0 type=gre options:remote_ip=192.168.5.153
  2. ovs-vsctl add-port obr0 gre0 -- set Interface gre0 type=gre options:remote_ip=192.168.5.154

4. 建立网桥kbr0

我们创建一个网桥kbr0 来替换docker的默认docker0网桥(node1,node2)

  
  
  
  
  1. brctl addbr kbr0
  2. brctl addif obr0
  3. ip link set dev docker0 down
  4. ip link del dev docker0

配置完后,我们在/etc/sysconfig/network-script 目录下创建一个ifcfg-kbr0文件输入如下内容,这样做是为了让我们重启服务器后网络配置任然有效.

  
  
  
  
  1. DEVICE=kbr0
  2. ONBOOT=yes
  3. BOOTPROTO=static
  4. IPADDR=172.17.1.1
  5. NETMASK=255.255.255.0
  6. GATEWAY=172.17.1.0
  7. USERCTL=no
  8. TYPE=Bridge
  9. IPV6INIT=no

我们在node2 上同样的创建相同的文件,只是把其中的IPADDR=172.17.1.1GATEWAY=172.17.1.0 更改为IPADDR=172.17.2.1,GATEWAY=172.17.2.0

重启网络服务或重启主机生效

5.配置路由

没有配置路由之前我们是无法使用ping通kbr0网桥地址,我们进行路由如下配置

  
  
  
  
  1. #node1 配置(注意eno16777736 这里指的是你的物理网卡名称)
  2. ip route add 172.17.2.0/24 via 192.168.5.153 dev eno16777736
  3. #node2
  4. ip route add 172.17.1.0/24 via 192.168.5.134 dev eno16777736

同时我们将配置写入到/etc/sysconfig/network-script/ 下的route-eno16777736 文件(该文件需要自行创建注意route-eno16777736 必须与网卡一致)

  
  
  
  
  1. #node1 route-eno16777736
  2. 172.17.2.0/24 via 192.168.5.154 dev en016777736
  3. #node2 route-eno16777736
  4. 172.17.1.0/24 via 192.168.5.134 dev en016777736

配置完以后,我们可以看到我们能ping通两边的网络了

6.修改docker配置文件,更改默认使用网桥

docker 启动时候默认使用docker0, 前面我们将docker0进行删除,但如果再重启docker,任然会启动一个docker0网桥,这需要我们修改docker默认启动配置,使用我们自己创建的网桥

  
  
  
  
  1. #修改OPTIONS 参数添加"-b=kbr0"
  2. OPTIONS='--selinux-enabled -b=kbr0'

7.配置内核端口转发参数

我们启动容器后,发现其他节点并不能ping通启动后分配的容器内地址,所以我们需要将内核的转发开启

  
  
  
  
  1. echo 1 > /proc/sys/net/ipv4/ip_forward

7.新增节点需要的配置工作

前面都是2个节点配置gre 互通,那么如果再新增节点的话该如何配置才能与前面2个节点互通呢?,很简单我们需要做如下步骤操作

  
  
  
  
  1. #1.参照前面的第4点,进行docker0 替换
  2. #2.在第三个节点增加前面2个节点路由,这样我们就能ping通前面2个节点了
  3. 172.17.2.0/24 via 192.168.5.153 dev eno16777736
  4. 172.17.1.0/24 via 192.168.5.134 dev eno16777736
  5. #3.如果需要node1,node2 能ping通 node3的话 ,同样的我们需要在node1,node2 上面增加node3 路由
  6. 172.17.3.0/24 via 192.168.5.154 dev en016777736
  7. #4.同样的我们需要配置内核转发,参考第7点
  8. #4.这样我们就构成了3节点容器互通网络, 如果再增加节点重复此顺序操作

8. 测试

  
  
  
  
  1. #我们在节点2启动了一个容器,同时在节点1也启动了一个容器地址为(172.17.1.3),我们在节点2进行ping节点1容器地址能正常ping通
  2. root@00d64ee5605c:/# ifconfig |grep inet
  3. inet addr:172.17.2.5 Bcast:0.0.0.0 Mask:255.255.255.0
  4. inet6 addr: fe80::42:acff:fe11:205/64 Scope:Link
  5. inet addr:127.0.0.1 Mask:255.0.0.0
  6. inet6 addr: ::1/128 Scope:Host
  7. root@00d64ee5605c:/# ping 172.17.1.3
  8. PING 172.17.1.3 (172.17.1.3) 56(84) bytes of data.
  9. 64 bytes from 172.17.1.3: icmp_seq=1 ttl=62 time=1.71 ms
  10. 64 bytes from 172.17.1.3: icmp_seq=2 ttl=62 time=0.313 m
  11. #测试各节点互通
  12. [root@ovs-node1 sysconfig]# ping 172.17.1.1
  13. PING 172.17.1.1 (172.17.1.1) 56(84) bytes of data.
  14. 64 bytes from 172.17.1.1: icmp_seq=1 ttl=64 time=0.772 ms
  15. 64 bytes from 172.17.1.1: icmp_seq=2 ttl=64 time=0.222 ms
  16. ^C
  17. --- 172.17.1.1 ping statistics ---
  18. 2 packets transmitted, 2 received, 0% packet loss, time 1001ms
  19. rtt min/avg/max/mdev = 0.222/0.497/0.772/0.275 ms
  20. [root@ovs-node1 sysconfig]# ping 172.17.3.1
  21. PING 172.17.3.1 (172.17.3.1) 56(84) bytes of data.
  22. 64 bytes from 172.17.3.1: icmp_seq=1 ttl=64 time=0.337 ms
  23. 64 bytes from 172.17.3.1: icmp_seq=2 ttl=64 time=0.525 ms
     

你可能感兴趣的:(基于centos 7 docker+openvswitch 容器多节点互联配置)