**
自定义网桥
**
主机名 | IP地址/子网掩码 | 容器名 | 容器ip |
---|---|---|---|
server | 192.168.200.10/24 | test1 | 172.172.0.10 |
client | 192.168.200.20/24 | test2 | 172.172.1.10 |
server
##配置自定义网桥
[root@server ~]# docker network create --subnet=172.172.0.0/24 docker-br0 //创建自定义网桥docker-br0
8e77d9b52d65c6d371c441f9f576128a3566306e8486bd34ab05cfd1d109b503
[root@server ~]# docker network inspect docker-br0 //查看网桥的详细信息
[
{
"Name": "docker-br0",
"Id": "8e77d9b52d65c6d371c441f9f576128a3566306e8486bd34ab05cfd1d109b503",
"Created": "2020-09-07T02:59:44.919156858-04:00",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "172.172.0.0/24"
}
]
},
"Internal": false,
"Attachable": false,
"Containers": {},
"Options": {},
"Labels": {}
}
]
##在server上配置容器
[root@server ~]# docker run -dit --net docker-br0 --ip 172.172.0.10 --name test1 busybox //创建容器并指定网桥与ip
3d9bff47359b7755d9ada558c5f6f4543fae889c94aae176334e38a454d26425
[root@server ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3d9bff47359b busybox "sh" 1 second ago Up 1 second test1
f5b5128680cd tomcat "/bin/bash" 2 days ago Up 2 days 8080/tcp relaxed_yalow
994152c29684 tomcat "/bin/bash" 2 days ago Up 2 days 0.0.0.0:32772->8080/tcp tomcat2
48ad526131d2 tomcat "/bin/bash" 2 days ago Up 2 days 0.0.0.0:32769->8080/tcp tomcat1
1f3dd0434fbc web:v1.0 "/bin/sh -c '${CAT..." 2 days ago Up 2 days 0.0.0.0:32768->8081/tcp elated_knuth
1c8bda415099 nginx "nginx -g 'daemon ..." 2 days ago Up 2 days 0.0.0.0:81->80/tcp web1
0a83851d437d rancher/server:v1.6.5 "/usr/bin/entry /u..." 3 days ago Up 2 days 3306/tcp, 0.0.0.0:8080->8080/tcp gallant_bose
8b75de826cae c9bd19d022f6 "/entrypoint.sh /e..." 3 days ago Up 2 days 0.0.0.0:5000->5000/tcp registry
[root@server ~]# docker exec -it test1 /bin/sh //进入该容器查看IP
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue
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
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
133: eth0@if134: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue
link/ether 02:42:ac:ac:00:0a brd ff:ff:ff:ff:ff:ff
inet 172.172.0.10/24 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::42:acff:feac:a/64 scope link
valid_lft forever preferred_lft forever
/ # ping 172.172.0.1 -c3 //测试连通性
PING 172.172.0.1 (172.172.0.1): 56 data bytes
64 bytes from 172.172.0.1: seq=0 ttl=64 time=0.241 ms
64 bytes from 172.172.0.1: seq=1 ttl=64 time=0.053 ms
64 bytes from 172.172.0.1: seq=2 ttl=64 time=0.054 ms
--- 172.172.0.1 ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 0.053/0.116/0.241 ms
client
##配置自定义网桥
[root@client ~]# docker network inspect docker-br0
[
{
"Name": "docker-br0",
"Id": "4f6461a6f7355fb5f24566359ae10a782406a3c3810e2a1476a7bf1afdab6565",
"Created": "2020-09-07T03:15:57.106936254-04:00",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "172.172.1.0/24"
}
]
},
"Internal": false,
"Attachable": false,
"Containers": {},
"Options": {},
"Labels": {}
}
]
##在client上配置容器
[root@client ~]# docker run -dit --name test2 --net docker-br0 --ip 172.172.1.10 busybox
f5a667d05e10331e429fef40ed6bfb0884e9e02111c60c41e3489b47ece79074
[root@client ~]# docker exec -it test2 /bin/sh //进入该容器查看ip
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue
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
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
3162: eth0@if3163: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue
link/ether 02:42:ac:ac:01:0a brd ff:ff:ff:ff:ff:ff
inet 172.172.1.10/24 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::42:acff:feac:10a/64 scope link
valid_lft forever preferred_lft forever
/ # ping -c3 172.172.1.1 //测试连通性
PING 172.172.1.1 (172.172.1.1): 56 data bytes
64 bytes from 172.172.1.1: seq=0 ttl=64 time=0.268 ms
64 bytes from 172.172.1.1: seq=1 ttl=64 time=0.054 ms
64 bytes from 172.172.1.1: seq=2 ttl=64 time=0.053 ms
--- 172.172.1.1 ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 0.053/0.125/0.268 ms
配置路由表和iptable规则
##在server上
[root@server ~]# ip route add 172.172.1.0/24 via 192.168.200.20 dev eno16777736
[root@server ~]# iptables -P INPUT ACCEPT
[root@server ~]# iptables -P FORWARD ACCEPT
[root@server ~]# iptables -F
[root@server ~]# iptables -L -n
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain DOCKER (0 references)
target prot opt source destination
Chain DOCKER-ISOLATION (0 references)
target prot opt source destination
##在client上
[root@client ~]# ip route add 172.172.0.0/24 via 192.168.200.10 dev eno16777736
[root@client ~]# iptables -P INPUT ACCEPT
[root@client ~]# iptables -P FORWARD ACCEPT
[root@client ~]# iptables -F
[root@client ~]# iptables -L -n
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain CATTLE_FORWARD (0 references)
target prot opt source destination
Chain DOCKER (0 references)
target prot opt source destination
Chain DOCKER-ISOLATION (0 references)
target prot opt source destination
测试
##server测试
[root@server ~]# docker exec -it test1 /bin/sh //进入test1容器
/ # ping 172.172.1.10 -c3
PING 172.172.1.10 (172.172.1.10): 56 data bytes
64 bytes from 172.172.1.10: seq=0 ttl=62 time=1.660 ms
64 bytes from 172.172.1.10: seq=1 ttl=62 time=0.859 ms
64 bytes from 172.172.1.10: seq=2 ttl=62 time=0.615 ms
--- 172.172.1.10 ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 0.615/1.044/1.660 ms
##client测试
[root@client ~]# docker exec -it test2 /bin/sh //进入test2容器
/ # ping 172.172.0.10 -c3
PING 172.172.0.10 (172.172.0.10): 56 data bytes
64 bytes from 172.172.0.10: seq=0 ttl=62 time=0.592 ms
64 bytes from 172.172.0.10: seq=1 ttl=62 time=0.803 ms
64 bytes from 172.172.0.10: seq=2 ttl=62 time=0.569 ms
--- 172.172.0.10 ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 0.569/0.654/0.803 ms
定义Flannel网络
主机名 | IP地址/子网掩码 | 需安装软件 |
---|---|---|
server | 192.168.200.10/24 | etcd、Flannel、Docker |
client | 192.168.200.20/24 | etcd、Flannel、Docker |
server
[root@server ~]# yum install -y flannel //安装flannel
[root@server ~]# yum install -y etcd //安装etcd
[root@server ~]# systemctl start etcd //启动etcd
[root@server ~]# etcdctl --endpoints http://127.0.0.1:2379 set /coreos.com/network/config '{"Network":"10.0.0.0/16","SubnetLen":24,"SubnetMin":"10.0.1.0","SubnetMax":"10.0.20.0","Backend":{"Type":"vxlan"}}' //配置Flannel网络
{"Network":"10.0.0.0/16","SubnetLen":"24","SubnetMin":"10.0.1.0","SubnetMax":"10.0.20.0","Backend":{"Type":"vxlan"}}
[root@server ~]# vi /etc/sysconfig/flanneld //编辑flanneld读取的文件
FLANNEL_ETCD_PREFIX="/coreos.com/network" //文件改为上面配置的network
[root@server ~]# systemctl daemon-reload
[root@server ~]# systemctl start flanneld //启动
[root@server ~]# etcdctl ls /coreos.com/network/subnets //查看etcd中的数据
/coreos.com/network/subnets/10.0.3.0-24
[root@server ~]# ip a show flannel.1 //查看flannel.1网卡信息
135: flannel.1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UNKNOWN
link/ether b2:49:ca:53:26:79 brd ff:ff:ff:ff:ff:ff
inet 10.0.3.0/32 scope global flannel.1
valid_lft forever preferred_lft forever
inet6 fe80::b049:caff:fe53:2679/64 scope link
valid_lft forever preferred_lft forever
[root@server ~]# systemctl daemon-reload //重新加载守护进程
[root@server ~]# systemctl restart docker //重启docker
[root@server ~]# ip a show docker0 //查看docker0 ip
55: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1450 qdisc noqueue state DOWN
link/ether 02:42:7b:ea:31:d5 brd ff:ff:ff:ff:ff:ff
inet 10.0.3.1/24 scope global docker0
valid_lft forever preferred_lft forever
inet6 fe80::42:7bff:feea:31d5/64 scope link
valid_lft forever preferred_lft forever
[root@server ~]# vi /etc/etcd/etcd.conf //编辑配置文件,使客户端可以访问
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379" //第6行左右
client
//同server端,此处只写出不一样的配置
[root@client ~]# etcdctl --endpoints http://192.168.200.10:2379 set /coreos.com/network/config '{"Network":"10.0.0.0/16","SubnetLen":24,"SubnetMin":"10.0.1.0","SubnetMax":"10.0.20.0","Backend":{"Type":"vxlan"}}' ///配置Flannel网络
{"Network":"10.0.0.0/16","SubnetLen":24,"SubnetMin":"10.0.1.0","SubnetMax":"10.0.20.0","Backend":{"Type":"vxlan"}}
[root@client ~]# vi /etc/sysconfig/flanneld //编辑flanneld读取的文件
FLANNEL_ETCD_ENDPOINTS="http://192.168.200.10:2379" //修改为服务端的ip
FLANNEL_ETCD_PREFIX="/coreos.com/network" //文件改为上面配置的network
[root@client ~]# systemctl daemon-reload
[root@client ~]# systemctl start flanneld //启动
[root@client ~]# ip a show flannel.1 //查看ip
3398: flannel.1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UNKNOWN
link/ether 66:64:91:e3:59:a3 brd ff:ff:ff:ff:ff:ff
inet 10.0.20.0/32 scope global flannel.1
valid_lft forever preferred_lft forever
inet6 fe80::6464:91ff:fee3:59a3/64 scope link
valid_lft forever preferred_lft forever
[root@client ~]# systemctl daemon-reload //重新加载守护进程
[root@client ~]# systemctl restart docker //重启docker
[root@client ~]# ip a show docker0 //查看docker0 ip
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,PROMISC,UP> mtu 1500 qdisc noqueue state DOWN
link/ether 02:42:81:9f:d7:a7 brd ff:ff:ff:ff:ff:ff
inet 10.42.0.1/16 scope global docker0
valid_lft forever preferred_lft forever
inet 10.0.20.1/24 scope global docker0
valid_lft forever preferred_lft forever
inet6 fe80::42:81ff:fe9f:d7a7/64 scope link
valid_lft forever preferred_lft forever
测试
##创建容器
[root@server ~]# docker run -it busybox1 //起容器
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue
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
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
154: eth0@if155: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1450 qdisc noqueue
link/ether 02:42:0a:00:03:03 brd ff:ff:ff:ff:ff:ff
inet 10.0.3.3/24 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::42:aff:fe00:303/64 scope link
valid_lft forever preferred_lft forever
[root@client ~]# docker run -it busybox2 //起容器
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue
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
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
3409: eth0@if3410: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1450 qdisc noqueue
link/ether 02:42:0a:00:14:03 brd ff:ff:ff:ff:ff:ff
inet 10.0.20.3/24 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::42:aff:fe00:1403/64 scope link
valid_lft forever preferred_lft forever
##测试连通性
/ # ping 10.0.20.3 -c3
PING 10.0.20.3 (10.0.20.3): 56 data bytes
64 bytes from 10.0.20.3: seq=0 ttl=62 time=0.787 ms
64 bytes from 10.0.20.3: seq=1 ttl=62 time=0.485 ms
64 bytes from 10.0.20.3: seq=2 ttl=62 time=0.496 ms
--- 10.0.20.3 ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 0.485/0.589/0.787 ms
/ # ping 10.0.3.3 -c3
PING 10.0.3.3 (10.0.3.3): 56 data bytes
64 bytes from 10.0.3.3: seq=0 ttl=62 time=9.061 ms
64 bytes from 10.0.3.3: seq=1 ttl=62 time=0.509 ms
64 bytes from 10.0.3.3: seq=2 ttl=62 time=16.819 ms
--- 10.0.3.3 ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 0.509/8.796/16.819 ms