翼度科技»论坛 云主机 LINUX 查看内容

Docker不同宿主机网络打通

6

主题

6

帖子

18

积分

新手上路

Rank: 1

积分
18
本方式使用docker Swarm集群的方式创建overlay 网络进行打通
背景

因java微服务使用nacos做配置中心,为了解决Nacos服务注册使用Docker容器内网ip问题,使用此方案
前置条件

1、宿主机之间需要开通端口

管理端口:

2377/tcp: 用于管理 Swarm 模式集群。这是 Swarm Manager 和 Worker 节点之间进行通信的主要端口,用于集群管理和任务调度。
节点间通信端口:

2375/tcp: 用于 Docker API 的通信。在 Swarm 模式下,这个端口通常只在 Manager 节点上开启,供外部客户端访问。
2376/tcp: 与 2375 类似,但使用了 TLS 加密。如果启用了 TLS,那么 2376 端口将被用于安全的 Docker API 访问。
网络端口:

4789/udp: 用于 VXLAN 通信,当使用 overlay 网络驱动时会用到此端口。这是 Swarm 用于跨节点容器通信的主要端口之一。
7946/tcp and/or 7946/udp: 用于节点间的服务发现和心跳消息。这两个端口用于 Raft 协议中的通信,以便维护集群状态的一致性。
2、docker版本

Swarm 在 Docker 1.12 版本之前属于一个独立的项目,在 Docker 1.12 版本发布之后,该项目合并到了 Docker 中,成为 Docker 的一个子命令。目前,Swarm 是 Docker 社区提供的唯一一个原生支持 Docker 集群管理的工具。它可以把多个 Docker 主机组成的系统转换为单一的虚拟 Docker 主机,使得容器可以组成跨主机的子网网络。因此,docker版本必须大于1.12,以下我使用的docker版本为 27.1.1
安装docker

因为docker源被屏蔽以后,安装docker需要从阿里源进行安装,如果需要详细安装过程,请参考文档:https://www.cnblogs.com/lanheader/p/14260710.html
前期只需要替换源即可,这里不做过多的描述,系统我使用的是ubuntu 22
  1. # 安装GPG证书
  2. curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
  3. # 安装源
  4. sudo sh -c 'echo "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" > /etc/apt/sources.list.d/docker.list'
  5. # 验证是否成功安装了docker
  6. sudo systemctl status docker
  7. docker --version
复制代码
安装Swarm集群

master执行
  1. docker swarm init --advertise-addr=192.168.0.1 # 注意替换这里的IP,IP为master的ip
  2. Swarm initialized: current node (maw28ll7mlxuwp47z5c5vo2v1) is now a manager.
  3. To add a worker to this swarm, run the following command:
  4. docker swarm join --token xxxxxxxxxxxxxxxxxxxxxxxxxxxxx 192.168.0.1:2377  # 注意保存此行命令
  5. To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
复制代码
work节点执行

这个是加入节点的命令,删除节点使用  docker swarm leave
  1. docker swarm join --token xxxxxxxxxxxxxxxxxxxxxxxxxxxxx 192.168.0.1:2377
复制代码
在 manager 节点,查看当前网络集群的节点情况
  1. root@ubuntu22:~# docker node ls
  2. ID                            HOSTNAME   STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
  3. 7r4vvml8kd2jem850rqfl158h *   ubuntu22   Ready     Active         Leader           27.1.1
  4. lrvsq6quwaxleqejf0w1nawvu     ubuntu22   Ready     Active                          27.1.1
  5. u4v4os8zats4ro795a4l6lw3y     ubuntu22   Ready     Active                          27.1.1
  6. root@ubuntu22:~#
复制代码
在 manager 节点,创建 overlay  网络

注意,这里强调使用--attachable参数,否则docker-compose不能使用此网络
  1. docker network create -d overlay  --attachable test
复制代码
在 master 节点的查看是否创建成功

正常情况下,如果网络未激活,则节点不会有test网络,需要执行后才会出现网络
  1. root@ubuntu22:~# docker network ls
  2. NETWORK ID     NAME                   DRIVER    SCOPE
  3. 28d3903acdb2   bridge                 bridge    local
  4. c2147e916c72   docker_gwbridge        bridge    local
  5. 7jczo6vw7mig   test                   overlay   swarm
  6. 63fa0e285c02   host                   host      local
  7. ypqnzuafqukz   ingress                overlay   swarm
  8. b0e97299b587   none                   null      local
复制代码
激活网络,使节点存在overlay网络

创建一个镜像

busybox 镜像可能拉取不到,各位大佬自行想办法解决...,再次感谢 方老师~
  1. FROM busybox
  2. MAINTAINER  lanheader@163.com
  3. ENTRYPOINT  ["tail","-f","/etc/hosts"]
复制代码
打包镜像
  1. docker build -t busybox-swarm . swarm
复制代码
激活overlay 网络
  1. docker service create --replicas 3 --name  busybox-net  --network  test busybox-swarm
复制代码
查看服务
  1. root@ubuntu22:~# docker service  ls
  2. ID             NAME          MODE         REPLICAS   IMAGE                  PORTS
  3. iicn2h7rw3af   busybox-net   replicated   3/3        busybox-swarm:latest   
复制代码
查看节点容器工作状态
  1. # 查看节点
  2. root@ubuntu22:~# docker  service  ps busybox-net
  3. ID             NAME                IMAGE                  NODE       DESIRED STATE   CURRENT STATE               ERROR                         PORTS
  4. s9reawp6seu5   busybox-net.1       busybox-swarm:latest   ubuntu22   Running         Running 41 minutes ago                                    
  5. iw3fvcy3tu14   busybox-net.2       busybox-swarm:latest   ubuntu22   Running         Running about an hour ago                                 
  6. vn16j18a2jzd   busybox-net.3       busybox-swarm:latest   ubuntu22   Running         Running about an hour ago           
复制代码
测试

使用docker inspect xxx 查看容器IP地址
在docker exec -it  xxx sh   进入容器进行测试
Docker-compose 配置文件中添加网络

容器中执行使用test网络即可
  1. networks:
  2.   test:
  3.     external: true
复制代码
完毕!!!

来源:https://www.cnblogs.com/lanheader/p/18367654
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!
来自手机

举报 回复 使用道具