使用Flannel网络或自定义网桥实现跨主机容器的互连

Docker基础命令的使用

**

自定义网桥

**

主机名IP地址/子网掩码容器名容器ip
server192.168.200.10/24test1172.172.0.10
client192.168.200.20/24test2172.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地址/子网掩码需安装软件
server192.168.200.10/24etcd、Flannel、Docker
client192.168.200.20/24etcd、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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值