本方式使用docker SwArm集群的方式创建overlay 网络进行打通
背景
因java微服务使用nacos做配置中心,为了解决Nacos服务注册使用Docker容器内网ip问题,使用此方案
前置条件
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
# 安装GPG证书curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add –# 安装源 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 # 验证是否成功安装了dockersudo systemctl status docker docker –version安装Swarm集群
master执行
docker swarm init –advertise-addr=192.168.0.1 # 注意替换这里的IP,IP为master的ipSwarm initialized: current node (maw28ll7mlxuwp47z5c5vo2v1) is now a manager. To add a worker to this swarm, run the followingcommand: docker swarm join –token xxxxxxxxxxxxxxxxxxxxxxxxxxxxx 192.168.0.1:2377# 注意保存此行命令 To add a manager to this swarm, run docker swarm join-token manager and follow the instructions.work节点执行
这个是加入节点的命令,删除节点使用 docker swarm leave
docker swarm join –token xxxxxxxxxxxxxxxxxxxxxxxxxxxxx 192.168.0.1:2377在 manager 节点,查看当前网络集群的节点情况
root@ubuntu22:~# docker node ls ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION 7r4vvml8kd2jem850rqfl158h * ubuntu22 Ready Active Leader27.1.1 lrvsq6quwaxleqejf0w1nawvu ubuntu22 Ready Active 27.1.1u4v4os8zats4ro795a4l6lw3y ubuntu22 Ready Active27.1.1 root@ubuntu22:~#在 manager 节点,创建 overlay 网络
注意,这里强调使用–attachable参数,否则docker-compose不能使用此网络
docker network create -d overlay –attachable test在 master 节点的查看是否创建成功
正常情况下,如果网络未激活,则节点不会有test网络,需要执行后才会出现网络
root@ubuntu22:~# docker network lsNETWORK ID NAME DRIVER SCOPE 28d3903acdb2 bridge bridgelocal c2147e916c72 docker_gwbridge bridge local 7jczo6vw7mig testoverlay swarm 63fa0e285c02 host hostlocalypqnzuafqukz ingress overlay swarm b0e97299b587 none nulllocal激活网络,使节点存在overlay网络
创建一个镜像
busybox 镜像可能拉取不到,各位大佬自行想办法解决…,再次感谢 方老师~
FROM busybox MAINTAINER lanheader@163.com ENTRYPOINT [“tail”,“-f”,“/etc/hosts”]打包镜像
docker build -t busybox-swarm . swarm激活overlay 网络
docker service create –replicas 3 –name busybox-net –network test busybox-swarm查看服务
root@ubuntu22:~# docker service lsID NAME MODE REPLICAS IMAGE PORTS iicn2h7rw3af busybox-net replicated 3/3 busybox-swarm:latest查看节点容器工作状态
# 查看节点 root@ubuntu22:~# docker service ps busybox-netID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS s9reawp6seu5 busybox-net.1 busybox-swarm:latest ubuntu22 Running Running41 minutes ago iw3fvcy3tu14 busybox-net.2 busybox-swarm:latest ubuntu22 Running Running about an hour ago 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网络即可
networks: test: external: true完毕!!!
暂无评论内容