docker跨网络连接主机

一、overlay

   vxlan底层技术,vxlan有一个功能,他把二层的数据封装到udp里传输,跟connet有点相似,通过添加网卡的方式,内网一张网卡,外网一张网卡。

     consul:数据中心的含义,可以将其当做数据库来理解,类似于Redis等非关系型数据库,采用的是键-值对的方式,存放着各个容器的IP及端口信息。

     consul的功能很强大,可以以群集的方式运行,并且具备健康监测等功能。

   需要有一个键值对,来保存我们的网络状态信息,比如:consul,etcd,zookeeper

   1.环境部署

主机名IP地址
consul192.174.1.34
docker-host1192.174.1.36
docker-hots2192.174.1.38

2.下载镜像

docker search  consul
docker pull  progrium/consul

3.开启防火墙规则(每台都要做)

firewall-cmd --add-port={7946,4789,2733,2376}/tcp --permanent
firewall-cmd --add-port={7946,4789,2733,2376}/udp --permanent
firewall-cmd --reload

4.启动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

可能会报如下错误,

 原因是:docker服务启动时定义的自定义链docker由于某种原因被清掉

解决方法:重启docker

5.指定consul服务器

vim  /etc/lib/systemd/system/docker.service



ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock 
-H tcp://0.0.0.0:2376 --cluster-store=consul://192.174.1.24:8500 --cluster-advertise=ens33:2376   (指定consul位置)

查看网页

6.开启混杂模式

ifconfig  ens33 promisc

7.创建overlay网络

docker network  create -d overlay  ov_net1
docker network ls
docker network  inspect ov_net1

8.在两个节点闯将以overlay网络生成的容器,验证网络

 docker run -dit --name test1 --network ov_net1 busybox
docker run -dit --name test2 --network ov_net1 busybox

验证结果:

    

二、macvxlan

 Docker跨主机访问,可以使用部署consul服务来实现docker容器之间跨主机通信,也可以使用MacVlan网络来实现。

MacVlan工作原理:

MacVlan是Linux内核支持的网络接口。要求的Linux内部版本是v3.9-3.19和4.0+。

通过物理网卡创建MacVlan子接口,允许一块物理网卡拥有多个独立的MAC地址和IP地址。虚拟的子接口将直接暴露在相邻物理网络中。

当发送包时。物理网卡收到包后,会根据收到包的目的MAC地址判断这个包需要交给哪个其中的虚拟网卡。

本质上首先时宿主机物理网卡工作在“混杂模式”,这样物理网卡的MAC地址将会失效,所有二层网络中的流量物理网卡都能收到。接下来就是在这张物理网卡上创建虚拟网卡,并为虚拟网卡指定MAC地址,实现一卡多用,在物理网络看来,每张虚拟网卡都是一个单独的接口。

 使用MacVlan需要注意的:

  1. 在使用MacVlan网络时,网络性能的问题,因为物理网卡中接入的主机变多,广播包占用比快速升高而引起的网络性能下降问题。
  2. 网卡需要工作在“混杂模式”下。
  3. 工作在“混杂模式”,物理网卡的MAC地址会失效,所以,运行的容器并不能与外网进行通信。
  4. 总体来说,bridge和overlay网络是更好的选择,因为虚拟网络应该与物理网络隔离而不是共享。   

 部署:

     1.环境需求:

主机名ip地址
node1192.174.1.40
node2192.174.1.41

   2.打开网卡混杂模式

ip link set ens33 promisc on

  3.node1创建macvlan网络

docker network create -d macvlan  --subnet 100.1.1.0/24 --gateway 100.1.1.1 -o parent=ens33 mac_net1  (两台节点应该是一样的属于同一个网络)

4.创建容器

docker run -dit --name box1 --ip 100.1.1.2 --network mac_net1 busybox
docker run -dit --name box2 --ip 100.1.1.4 --network mac_net1 busybox

5.结果验证:

   

 

三、基于machine搭建overlay

        1.下载consul

docker  pull    progrium/consul

        2.创建容器

docker run  -d  --restart always -p  8400:8400   -p 8500:8500  -p 8600:53/udp -h node1  progrium/consul -server -bootstrap -ui-dir /ui

        3.开启混杂模式:

ifconfig ens33  promisc

        4.修改节点配置文件

vim /etc/systemd/system/docker.service.d/10-machine.conf

[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock --storage-driver overlay2 --tlsverify --tlscacert /etc/docker/ca.pem --tlscert /etc/docker/server.pem --tlskey /etc/docker/server-key.pem --label provider=generic  --cluster-store=consul://192.174.1.34:8500 --cluster-advertise=ens33:2376
Environment=

      5.重新加载配置文件

systemctl daemon-reload 
Systemctl  restart  docker

     查看网页:

    6.创建网卡 

docker network create -d overlay ov_net1

        

   7.运行容器

docker run -itd --name bbox1 --network ov_net1 busybox
docker run -itd --name bbox2 --network ov_net1 busybox

   8.验证结果

              

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值