使用 OVS 打通多节点上的容器通信(Overlay)
Last updated
Last updated
#!/bin/bash
BR0_IP="172.19.49.2"
C1_IP="172.19.2.1"
C2_IP="172.19.2.2"
ovs-vsctl add-br br0
ifconfig br0 $BR0_IP/16
docker run -d --name c1 -it --net=none --privileged=true busybox sh
ovs-docker add-port br0 eth0 c1 --ipaddress=$C1_IP/16 --gateway=$BR0_IP
docker run -d -it --name c2 --net=none --privileged=true busybox sh
ovs-docker add-port br0 eth0 c2 --ipaddress=$C2_IP/16 --gateway=$BR0_IP#!/bin/bash
REMOTE_IP="192.168.33.11"
ovs-vsctl add-port br0 vxlan1 -- set interface vxlan1 type=vxlan options:remote_ip=$REMOTE_IP options:key=flow options:dst_port=8472$ netstat -anp | grep 8472
udp 0 0 0.0.0.0:8472 0.0.0.0:* -
udp6 0 0 :::8472 :::* # 同一个节点内的网络通信
$ docker exec -it c1 sh -c "ping -c 3 172.19.1.2"
PING 172.19.1.2 (172.19.1.2): 56 data bytes
64 bytes from 172.19.1.2: seq=0 ttl=64 time=0.197 ms
64 bytes from 172.19.1.2: seq=1 ttl=64 time=0.147 ms
64 bytes from 172.19.1.2: seq=2 ttl=64 time=0.135 ms
# 和另一个节点上容器的通信
$ docker exec -it c1 sh -c "ping -c 3 172.19.2.2"
PING 172.19.2.2 (172.19.2.2): 56 data bytes
64 bytes from 172.19.2.2: seq=0 ttl=64 time=1.150 ms
64 bytes from 172.19.2.2: seq=1 ttl=64 time=1.289 ms
64 bytes from 172.19.2.2: seq=2 ttl=64 time=1.071 ms#!/bin/bash
REMOTE_IP="192.168.33.11"
ovs-vsctl add-port br0 gre0 -- set interface gre0 type=gre options:remote_ip=$REMOTE_IP$ docker exec -it c1 sh -c "ping -c 3 172.19.2.1"
PING 172.19.2.1 (172.19.2.1): 56 data bytes
64 bytes from 172.19.2.1: seq=0 ttl=64 time=0.643 ms
64 bytes from 172.19.2.1: seq=1 ttl=64 time=1.175 ms
64 bytes from 172.19.2.1: seq=2 ttl=64 time=1.088 ms