7.跨宿主机容器间的通讯(macvlan、overlay)

2022-04-06 分类:docker 阅读(450) 评论(0)

孙富阳, 江湖人称没人称。多年互联网运维工作经验,曾负责过孙布斯大规模集群架构自动化运维管理工作。擅长Web集群架构与自动化运维,曾负责国内某大型博客网站运维工作。

1.跨宿主机容器间的通讯之macvlan

macvlan类似与虚拟机的桥接网络,它不支持自动名字解析但是可以固定ip地址
##01与02机器都启动一个alpine镜像
#创建网络(一块网卡只能桥接一次)
docker network create -d macvlan --subnet 10.0.0.0/24 --gateway 10.0.0.254 -o parent=eth0 macvlan_1
#启动容器
[root@docker01 ~]#  docker run -it --network macvlan_1 --ip 10.0.0.105 alpine:latest 
[root@docker02 ~]#  docker run -it --network macvlan_1 --ip 10.0.0.106 alpine:latest 

##而且它不光能ping通对方的容器,对方的宿主机ip也可以ping通
##退出当前的容器
ctrl+p  +   ctrl+q

##远程连接也没问题
ssh 10.0.0.106

##容器与容器之间通讯没有问题,唯独不能与自己的宿主机通讯,否则会冲突。
假设就一台或者两台宿主机的话,用macvlan非常合适,多了就不合适了
但是缺点是没办法自动配置上网,得配置iptables共享上网规则

2.跨宿主机容器间的通讯之overlay(重叠网络)

1.先来说一下什么是VLAN

虚拟局域网(VLAN)是一组逻辑上的设备和用户,这些设备和用户并不受物理位置的限制,可以根据功能、部门及应用等因素将它们组织起来,相互之间的通信就好像它们在同一个网段中一样,由此得名虚拟局域网,由于交换机端口有两种VLAN属性,其一是VLANID,其二是VLANTAG,分别对应VLAN对数据包设置VLAN标签和允许通过的VLANTAG(标签)数据包,不同VLANID端口,可以通过相互允许VLANTAG,构建VLAN。VLAN是一种比较新的技术,工作在OSI参考模型的第2层和第3层,一个VLAN不一定是一个广播域,VLAN之间的通信并不一定需要路由网关,其本身可以通过对VLANTAG的相互允许,组成不同访问控制属性的VLAN,当然也可以通过第3层的路由器来完成的,但是,通过VLANID和VLANTAG的允许,VLAN可以为几乎局域网内任何信息集成系统架构逻辑拓扑和访问控制,并且与其它共享物理网路链路的信息系统实现相互间无扰共享。VLAN可以为信息业务和子业务、以及信息业务间提供一个相符合业务结构的虚拟网络拓扑架构并实现访问控制功能。与传统的局域网技术相比较,VLAN技术更加灵活,它具有以下优点: 网络设备的移动、添加和修改的管理开销减少;可以控制广播活动;可提高网络的安全性。

2. VXLAN详解https://www.sohu.com/a/436381129_445400

3.overlay需要一台机器存储网段信息 创建docker03主机

01机器创建目录,把下载好的rpm包移动并打包,发送到03的机器上并安装
[root@docker01 ~]#   mkdir docker_rpm
[root@docker01 ~]#  find /var/cache/yum/ -type f -name "*.rpm"|xargs mv -t docker_rpm/
[root@docker01 ~]#  tar zcf docker_rpm docker_rpm.tar.gz
[root@docker01 ~]#  scp -rp docker_rpm.tar.gz root@172.16.1.12:/root
 
[root@docker03 ~]#   ll
-rw-r--r--  1 root root 113548677 Jun 10 23:34 docker_rpm.tar.gz
[root@docker03 ~]   # tar xf docker_rpm.tar.gz
yum localinstall *.rpm -y
[root@docker01 ~]#   systemctl enable docker
[root@docker01 ~]#   systemctl start docker
[root@docker01 ~]#   systemctl status docker

4. docker03上: consul存储ip地址的分配

#把consul镜像上传到03机器上
[root@docker03 ~]#  docker image load -i docker_progrium_consul.tar.gz 

##启动容器
[root@docker03 ~]# docker run -p 8400:8400 -p 8500:8500 -p 8600:53/udp -h consul progrium/consul -server -bootstrap
##打开浏览器查看
10.0.0.13:8500

5.docker01、02上编辑配置文件

[root@docker02 ~]# cat /etc/docker/daemon.json
{
  "registry-mirrors": ["https://registry.docker-cn.com"],###加速用的
  "insecure-registries": ["harbor.com"],###指定仓库的域名和ip地址
  "cluster-store": "consul://10.0.0.13:8500",
  "cluster-advertise": "10.0.0.12:2376"
}
systemctl restart docker

6.打开浏览器查看是否添加了节点信息

http://10.0.0.13:8500/ui/#/dc1/kv/docker/nodes/

7.创建overlay网络(在01和02机器上操作)

docker network create -d overlay --subnet 172.26.0.0/16 --gateway 172.26.0.1  ol1
[root@docker02 ~]# docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
bdef8887c62c   bridge    bridge    local
c21ecb12d13f   host      host      local
9f7a85b48803   none      null      local
bb7af3b99037   ol1       overlay   global
###可以看到docker01和docker02都有ol1网络,是全局设置的

8.启动容器测试

[root@docker01 ~]#  docker run -it --network ol1 --name test02  alpine:latest  /bin/sh
[root@docker02 ~]#  docker run -it --name test01 --network ol1 alpine:latest /bin/sh
每个容器有两块网卡,eth0实现容器间的通讯,eth1实现容器访问外网

评论已关闭

登录

忘记密码 ?

切换登录

注册

鲁ICP备2021019243号-1