首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

Docker不同宿主机网络打通

编程知识
2024年08月19日 15:58

本方式使用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

# 安装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'
# 验证是否成功安装了docker
sudo systemctl status docker
docker --version

安装Swarm集群

master执行

docker swarm init --advertise-addr=192.168.0.1 # 注意替换这里的IP,IP为master的ip
Swarm initialized: current node (maw28ll7mlxuwp47z5c5vo2v1) is now a manager.
To add a worker to this swarm, run the following command:
 
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         Leader           27.1.1
lrvsq6quwaxleqejf0w1nawvu     ubuntu22   Ready     Active                          27.1.1
u4v4os8zats4ro795a4l6lw3y     ubuntu22   Ready     Active                          27.1.1
root@ubuntu22:~# 

在 manager 节点,创建 overlay 网络

注意,这里强调使用--attachable参数,否则docker-compose不能使用此网络

docker network create -d overlay  --attachable test

在 master 节点的查看是否创建成功

正常情况下,如果网络未激活,则节点不会有test网络,需要执行后才会出现网络

root@ubuntu22:~# docker network ls
NETWORK ID     NAME                   DRIVER    SCOPE
28d3903acdb2   bridge                 bridge    local
c2147e916c72   docker_gwbridge        bridge    local
7jczo6vw7mig   test                   overlay   swarm
63fa0e285c02   host                   host      local
ypqnzuafqukz   ingress                overlay   swarm
b0e97299b587   none                   null      local

激活网络,使节点存在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  ls
ID             NAME          MODE         REPLICAS   IMAGE                  PORTS
iicn2h7rw3af   busybox-net   replicated   3/3        busybox-swarm:latest   

查看节点容器工作状态

# 查看节点
root@ubuntu22:~# docker  service  ps busybox-net
ID             NAME                IMAGE                  NODE       DESIRED STATE   CURRENT STATE               ERROR                         PORTS
s9reawp6seu5   busybox-net.1       busybox-swarm:latest   ubuntu22   Running         Running 41 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

完毕!!!

From:https://www.cnblogs.com/lanheader/p/18367654
本文地址: http://www.shuzixingkong.net/article/1236
0评论
提交 加载更多评论
其他文章 智能指针相关:enable_shared_from_this()在开发中的常见应用
类中使用shared_ptr()的问题 当我们先定义一个指针,然后再用这个指针构造两个智能指针 int main() { int* pt = new int(); std::shared_ptr<int> p1(pt); std::shared_ptr<int> p2(pt)
智能指针相关:enable_shared_from_this()在开发中的常见应用
【VMware VCF】VMware Cloud Foundation Part 07:管理工作负载域中的主机和集群。
一个标准 VMware Cloud Foundation 实例中具有管理工作负载域和 VI 工作负载域两种类型,管理域有且只有一个,而 VI 域可以创建多个,每种工作负载域中可以具有多个 vSphere 集群,而每个集群中可以具有多台主机,有关工作负载域所支持的集群和主机数等限制请查看 VMware
【VMware VCF】VMware Cloud Foundation Part 07:管理工作负载域中的主机和集群。 【VMware VCF】VMware Cloud Foundation Part 07:管理工作负载域中的主机和集群。 【VMware VCF】VMware Cloud Foundation Part 07:管理工作负载域中的主机和集群。
仅花一天时间,开发者重制 32 年前经典 Mac 应用!
导读:在这个快节奏的技术世界里,重温过去并从中汲取灵感总是一件有趣的事情。今天要介绍的是一款仅用一天时间重制的经典 Macintosh 应用——Stapler。这款应用最初发布于1992年,现在由一位充满激情的开发者重新打造,不仅保留了原汁原味的功能,还加入了现代化的改进和特性,使其更适合现代 ma
仅花一天时间,开发者重制 32 年前经典 Mac 应用!
上周热点回顾(8.12-8.18)
热点随笔: · 程序员失业日记3:工作真不好找 (小码A梦)· 老弟想自己做个微信,被我一个问题劝退了。。 (程序员鱼皮)· 实习第一天,不小心透露了,我是拆迁户 (Java3y)· 告别卡
Blazor开发框架Known-V2.0.8
V2.0.8 Known是基于Blazor的企业级快速开发框架,低代码,跨平台,开箱即用,一处代码,多处运行。目前已有部分客户在使用,最近客户的项目和产品,有的在Docker中运行,有的在重新升级改造中使用达梦数据库。为快速响应客户的需求,本次版本修复了一些BUG、增强了框架内置功能和无代码设置功能
Blazor开发框架Known-V2.0.8 Blazor开发框架Known-V2.0.8 Blazor开发框架Known-V2.0.8
SimpleRAG:基于WPF与Semantic Kernel实现的一个简单的RAG应用
SimpleRAG介绍 SimpleRAG是基于WPF与Semantic Kernel实现的一个简单的RAG应用,可用于学习与理解如何使用Semantic Kernel构建RAG应用。 GitHub地址:https://github.com/Ming-jiayou/SimpleRAG 主要功能 AI
SimpleRAG:基于WPF与Semantic Kernel实现的一个简单的RAG应用 SimpleRAG:基于WPF与Semantic Kernel实现的一个简单的RAG应用 SimpleRAG:基于WPF与Semantic Kernel实现的一个简单的RAG应用
基于surging的产品项目-木舟开源了!
一 、 概述 因为前段时间电脑坏了,导致代码遗失,踌躇满志马上上线的平台产品付之东流,现在熬夜在写代码希望能尽快推出企业正常使用的平台产品,而这次把代码开源,一是让大家对surging 使用有个深入的了解,二也是开源社区起到监督推动作用,底层的代码基本上已经完成,比如脚本解析,规则引擎,协议组件的热
基于surging的产品项目-木舟开源了! 基于surging的产品项目-木舟开源了! 基于surging的产品项目-木舟开源了!
.NET8 Blazor 从入门到精通:(三)类库和表单
目录Razor 类库创建使用使可路由组件可从 RCL 获取静态资源表单EditForm标准输入组件验证HTML 表单 Razor 类库 这里只对 RCL 创建和使用的做一些简单的概述,详细内容参考官方文档 使用 Razor 类库 (RCL) 中的 ASP.NET Core Razor 组件。 创建
.NET8 Blazor 从入门到精通:(三)类库和表单 .NET8 Blazor 从入门到精通:(三)类库和表单 .NET8 Blazor 从入门到精通:(三)类库和表单