【Docker详解】实现跨网络的连接

目录

overlay

Overlay网络驱动的功能和优势:

案例使用overlay测试

macvlan

案例使用macvxlan测试


overlay

overlay网络是一种用于创建多主机容器通信的网络驱动程序。它允许在跨多个docker主机的容器之间建立虚拟的Overlay网络,使得这些容器可以无缝地进行通信。

overlay网络使用的时VXLAN协议在不同的Docker主机之间创建虚拟网络。每个Docker节点上的Overlay网络代理维护一个“网络隧道”,负责将来自不用节点上的容器之间的通信流量进行封装和解封装

Overlay网络驱动的功能和优势:

  1. 跨主机通信:允许在多个Docker主机上的容器之间进行通信,容器可以像在同一主机上一样进行通信,无需手动配置额外的网络设置。

  2. 容器发现和服务发现:通过使用Overlay网络,容器可以通过名称而不是IP地址相互访问,这简化了容器的发现和连接。

  3. 安全性:Overlay网络使用加密和隧道技术来确保传输的隐私和安全。

  4. 扩展性:可以轻松扩展Overlay网络以容纳大量的容器,并支持高可用性和负载均衡。

案例使用overlay测试

主机名IP地址
consul192.168.8.10
docker-node1192.168.8.20
docker-node2192.168.8.30

首先这三台主机都安装20版本的docker-ce-20.10.19-3.el7,这里安装docker就跳过了,安装好之后启动docker

紧接着我们下载consul镜像

[root@consul ~]# docker pull progrium/consul

然后在启动这个consul容器

[root@consul ~]# docker run -d --restart always -p 8400:8400 -p 8500:8500 -p 8600:53/udp -h node1 progrium/consul -server -bootstrap -ui-dir /ui

容器生成之后,就可以直接使用浏览器来验证我们的服务是否正常运行,访问http://IP:8500

然后在给其他两台主机上指定consul服务器

[root@docker-node1 ~]# vim /etc/docker/daemon.json
{
        "cluster-store":"consul://192.168.8.10:8500",
        "cluster-advertise":"ens33:2376"
}
​
[root@docker-node2 ~]# vim /etc/docker/daemon.json
{
        "cluster-store":"consul://192.168.8.10:8500",
        "cluster-advertise":"ens33:2376"
}

在给这两台重新启动docker

[root@docker-node1 ~]# systemctl restart docker

然后我们在创建一个overlay网络

[root@docker-node1 ~]# docker network create -d overlay net1 --attachable

分别在node1和node2上运行一个容器然后使用我们刚在创建的网络

[root@docker-node1 ~]# docker run -dit --name test1 --network net1 busybox
​
[root@docker-node2 ~]# docker run -dit --name test2 --network net1 busybox

分别查看这两个容器的ip地址

[root@docker-node1 ~]# docker exec -it test1 ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue 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
6: eth0@if7: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1450 qdisc noqueue 
    link/ether 02:42:0a:00:00:02 brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.2/24 brd 10.0.0.255 scope global eth0
       valid_lft forever preferred_lft forever
9: eth1@if10: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue 
    link/ether 02:42:ac:12:00:02 brd ff:ff:ff:ff:ff:ff
    inet 172.18.0.2/16 brd 172.18.255.255 scope global eth1
       valid_lft forever preferred_lft forever
[root@docker-node2 ~]# docker exec -it test2 ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue 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
6: eth0@if7: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1450 qdisc noqueue 
    link/ether 02:42:0a:00:00:03 brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.3/24 brd 10.0.0.255 scope global eth0
       valid_lft forever preferred_lft forever
9: eth1@if10: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue 
    link/ether 02:42:ac:12:00:02 brd ff:ff:ff:ff:ff:ff
    inet 172.18.0.2/16 brd 172.18.255.255 scope global eth1
       valid_lft forever preferred_lft forever

然后这两个容器互ping

[root@docker-node1 ~]# docker exec -it test1 ping 10.0.0.3
PING 10.0.0.3 (10.0.0.3): 56 data bytes
64 bytes from 10.0.0.3: seq=0 ttl=64 time=3.183 ms
64 bytes from 10.0.0.3: seq=1 ttl=64 time=0.516 ms
64 bytes from 10.0.0.3: seq=2 ttl=64 time=0.378 ms
64 bytes from 10.0.0.3: seq=3 ttl=64 time=0.849 ms
​
[root@docker-node2 ~]#  docker exec -it test2 ping 10.0.0.2
PING 10.0.0.2 (10.0.0.2): 56 data bytes
64 bytes from 10.0.0.2: seq=0 ttl=64 time=3.173 ms
64 bytes from 10.0.0.2: seq=1 ttl=64 time=0.920 ms
64 bytes from 10.0.0.2: seq=2 ttl=64 time=0.965 ms
64 bytes from 10.0.0.2: seq=3 ttl=64 time=0.513 ms

macvlan

Macvlan是Docker提供的一种网络驱动程序,它允许Docker容器直接通过物理网络接口使用宿主机的MAC地址。Macvlan网络驱动程序使得每个容器都能获得唯一的MAC地址,就像宿主机的物理或虚拟机网卡一样

使用Macvlan网络驱动程序时,每个容器都可以直接与宿主机所连接的物理网络通信,就像它们是网络中的独立设备一样。这使得容器能够实现与网络上的其他设备直接进行通信,而不需要进行NAT转换

案例使用macvxlan测试

主机名IP地址
docker-node1192.168.8.20
docker-node2192.168.8.30

两台主机都打开网卡的混杂模式

[root@docker-node1 ~]# ip link set ens33 promisc on
[root@docker-node1 ~]# ip link show ens33
2: ens33: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
    link/ether 00:0c:29:8f:34:73 brd ff:ff:ff:ff:ff:ff
    
    [root@docker-node2 ~]# ip link set ens33 promisc on
[root@docker-node2 ~]# ip link show ens33
2: ens33: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
    link/ether 00:0c:29:0a:77:f6 brd ff:ff:ff:ff:ff:ff

docker-node1上创建一个macvlan网络

[root@docker-node1 ~]# docker network  create -d macvlan --subnet 192.168.1.1/24 --gateway 192.168.1.1 -o parnet=ens33 mac_net1

还需要在docker-node2上也创建一个macvlan网络,而且两个节点应该一样,属于同一个网络

[root@docker-node2 ~]# docker network  create -d macvlan --subnet 192.168.1.1/24 --gateway 192.168.1.1 -o parnet=ens33 mac_net1

在回到docker-node1主机上启动一个容器并且网络使用macvlan的网络

[root@docker-node1 ~]# docker run -dit --name box1 --ip 192.168.1.10 --network mac_net1 busybox

docker-node2同样也是启动一个网络时macvlan的容器然后只需要ip地址不一样就可以

[root@docker-node2 ~]# docker run -dit --name box2 --ip 192.168.1.20 --network mac_net1 busybox

接着我们就可以验证这两个主机是否能互ping就可以了

[root@docker-node1 ~]# docker exec -it box1 ping 192.168.1.20
​
[root@docker-node2 ~]# docker exec -it box2 ping 192.168.1.10
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值