云原生之Docker容器跨主机指定IP通信

云原生之Docker容器跨主机指定IP通信

作者:mc_开发者 2022-07-20 15:19:17

云计算

云原生 对开发者而言,随着容器的普遍使用,开发者可以很方便的搭建项目的简易测试环境。

​​想了解更多关于开源的内容,请访问:​​

​​51CTO 开源基础软件社区​​

​​https://ost.IDC.NET​​

一、前言

1、使用场景

对开发者而言,随着容器的普遍使用,开发者可以很方便的搭建项目的简易测试环境。有时候为了项目可以在任意机器一键运行,不用配置连接IP等信息。所以希望可以提前固定容器的IP地址,而且一个项目有时候涉及多个容器,可能还会部署在多台机器上。所以如果容器间可以固定IP跨机器通信的话,会有很大方便。

2、docker网络

  • docker容器默认是一个有自己独立网络空间的虚拟系统。
  • docker安装后自动创建3中网络:bridge、host、none。
  • bridge:网桥模式,默认创建docker0网桥,172.17.0.0/16,宿主机可访问,外部机器不可见。
  • host:共享宿主机网络模式,外部主机与容器直接通信,容器缺少了隔离性。
  • none:禁用网络模式。
  • docker自定义网络
    docker提供了三种自定义网络驱动:bridge、overlay、macvlan。
  • bridge驱动类似默认的bridge网络模式。
  • overlay和macvlan是用于创建跨主机网络。
  • 支持自定义网段、网关,docker network create –subnet 172.77.0.0/24 –gateway 172.77.0.1 my_net。
  • docker创建容器使用默认docker0网络不支持自定义固定IP,都是动态的。

3、自定义网络使用

  1. 自定义创建网段。docker network create –subnet=172.18.0.0/16 spark-net。
  2. 指定网络驱动docker network create -d overlay –subnet 10.22.1.0/24 –gateway 10.22.1.1 spark-net-0。
  3. 创建容器固定IP。
docker run --name cloud1 \
--net spark-net --ip172.18.0.2 \
-h cloud1 \
-it ubuntu
docker run --name cloud1_0 \
--network spark-net-0 --ip10.22.1.26 \
-h cloud1 \
-it ubuntu

二、实践操作

1、Overlay网络模式详解

  • Overlay网络是目前比较主流的跨节点容器间数据传输和路由方案。
  • Overlay网络模式在主机网络之上,在多个Docker主机之间实现分布式网络,允许跨容器之间的交互。
  • Overlay网络是指在不改变现有网络基础设施的前提下,通过某种约定通信协议,把二层报文封装在IP报文之上的新的数据格式。

2、Consul服务发现

  • Consul是一个分布式、高可用性和多数据中心感知工具,用于服务发现、配置和编排。Consul 支持大规模快速部署、配置和维护面向服务的架构。
  • 部署单节点的consul服务(可选择公网服务器,或者能与其他部署容器通信的主机)。
# 拉取镜像
docker pull progrium/consul
# 运行consul容器
docker run -d-p8500:8500 -h consul --name consul --restart=always progrium/consul -server-bootstrap
# -h:表示consul的主机名
# --name consul:表示为该容器名
# --restart=always表示可以随着docker服务的启动而启动;
# 运行consul容器,该服务的默认端口是8500;-p:表示将容器的8500端口映射到宿主机的8500端口
# -serve -bootstarp:表示当在群集中,加上这两个选项可以使其以master的身份出现
  • 管理访问地址
    http://IP:8500/ui/#/dc1/kv/docker/nodes/。

3、修改docker配置

# 所有需要通信的机器都需要修改
vim /etc/docker/daemon.json
# 增加 cluster-store、cluster-advertise两个参数
{
"registry-mirrors": ["https://xxxx.xxxx.aliyuncs.com","https://registry.docker-cn.com"],
"cluster-store": "consul://IP:8500",
"cluster-advertise": "ens33:2376"
}
# cluster-store,是配置sonsul集群的访问地址
# cluster-advertise,是广播通信地址和端口
# 重启docker
systemctl daemon-reload
systemctl restart docker
#如果有端口拒绝访问问题,可直接关掉防火墙
#停止firewall
systemctl stop firewalld.service
#禁止firewall开机启动
systemctl disable firewalld.service
#查看开放端口列表
firewall-cmd --list-ports

4、实践机器规划

本文实践创建了3台虚机:192.168.17.150 192.168.17.151 192.168.17.152。

5、创建overlay网络

  • 选其中一台机器执行,例如在192.168.17.150执行
# 创建overlay网络,并自定义制定网段以及网关
# 可以通过制定不同的网段,以隔离不同的服务
docker network create -d overlay --subnet10.22.1.0/24 --gateway10.22.1.1 spark-net
# 每台机器查看创建的网络
docker network ls
# 查看具体信息
docker network inspect spark-net
  • 删除网络命令
# 删除自定义网络
docker network rm spark-net
# 如果有已连接的,先断开连接
docker network disconnect -f net-spark con1
  • 注意
    例如:在cloud1机器上,可以执行docker network disconnect -f spark-net cloud2但是执行docker network disconnect -f spark-net cloud1就无效,必须跨机器执行断连。

6. 跨主机创建容器验证

本文依赖上篇文章创建了3个容器, 可查看 ​​Docker搭建大数据平台之Hadoop,Spark,Hive初探​​。

192.168.17.150机器上执行。

docker run --name cloud1 \
-p50070:50070 \
-p8088:8088 \
-p8080:8080 \
-p7077:7077 \
-p9000:9000 \
-p16010:16010 \
--network net-spark --ip10.22.1.26 \
-h cloud1 \
--add-host cloud1:10.22.1.26 \
--add-host cloud2:10.22.1.27 \
--add-host cloud3:10.22.1.28 \
-it spark:v4

192.168.17.151机器上执行。

docker run --name cloud2  \
--network net-spark --ip10.22.1.27 \
-h cloud2 \
--add-host cloud1:10.22.1.26 \
--add-host cloud2:10.22.1.27 \
--add-host cloud3:10.22.1.28 \
-it spark:v4

192.168.17.152机器上执行。

docker run --name cloud3 \
--network net-spark --ip10.22.1.28 \
-h cloud3 \
--add-host cloud1:10.22.1.26 \
--add-host cloud2:10.22.1.27 \
--add-host cloud3:10.22.1.28 \
-it spark:v4

可分别在三个容器内互相ping IP10.22.1.26、10.22.1.27、10.22.1.28验证。

三、常见问题

1、如遇错误常用命令

  • 如果网络改动,需要重启docker
systemctl daemon-reload
systemctl restart docker
  • 关掉防火墙
# 停止firewall
systemctl stop firewalld.service
# 禁止firewall开机启动
systemctl disable firewalld.service
# 查看开放端口列表
firewall-cmd --list-ports
# 开放端口
firewall-cmd --zone=public --add-port=2379/tcp --permanent
# 重新载入
firewall-cmd --reload

2、将容器以指定IP链接到自定义网络中

#容器cloud3以IP10.22.1.28链接到overlay网络spark-net
docker network connect --ip10.22.1.28 spark-net cloud3

3、将容器从自定义网络中删除

# 注意不可在当前容器里执行断连
# 例如 需要断连容器cloud2,则需要在容器cloud1中执行如下命令
docker network disconnect -f spark-net cloud2

4、manager节点无法接入

docker.service配置 -H tcp://0.0.0.0:2376 –cluster-store=consul://121.4.138.199:8500 –cluster-advertise=ens33:2376 并不能正确执行,原理暂未知。

​​想了解更多关于开源的内容,请访问:​​

​​51CTO 开源基础软件社区​​

​​https://ost.IDC.NET​​。

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/270896.html<

(0)
管理的头像管理
上一篇2025-05-08 01:02
下一篇 2025-05-08 01:03

相关推荐

  • 站群服务器和普通服务器到底哪个更适合GEO,怎么选?

    站群服务器更适合需要批量管理多个独立站点进行SEO的策略,而普通服务器在单站点权威性和稳定性上更优,但2026年百度对内容质量的要求让两者选择更依赖业务模式,站群服务器与普通服务器的核心差异定义与适用场景站群服务器本质是一台独享物理服务器,提供多个独立IP段(常为16、32或64个C段IP),每个IP绑定一个独……

    2026-07-28
    0
  • 物理服务器和云服务器做站群到底选哪个,哪个更稳定?

    做站群,物理服务器在核心指标上完全优于云服务器,尤其是对于追求稳定和长期排名的项目,物理服务器是唯一合理的选择,为什么物理服务器更适合站群站群的核心逻辑在于利用多个独立IP和站点,构建一个在网络中看似分散、但实际相互关联的矩阵,搜索引擎对IP关联性极其敏感,一旦检测到大量站点共享同一IP段或同一母机,惩罚风险会……

    2026-07-28
    0
  • 国内高防服务器哪家防御真实靠谱,怎么选?

    国内高防服务器哪家防御真实靠谱?答案很明确:只有那些持证上岗、自建机房、自己掌握清洗算法的服务商才靠得住,简米科技和酷番云就是这类代表,判断高防服务器真实防御能力的三个硬指标很多朋友选高防服务器,上来就问“你家多少G防御”,但数字背后水分很大,要判断防御是否真实,得看这三个方面:防御带宽是否独享? 有些服务商宣……

    2026-07-28
    0
  • 裸金属服务器和物理服务器有什么区别?,怎么选?

    裸金属服务器和物理服务器本质上是同一类硬件,核心区别在于交付逻辑和管理方式, 裸金属服务器是云服务商将物理服务器以云化方式交付,支持自动化部署、弹性伸缩和按需计费;而物理服务器通常指用户自购或托管,需要自行承担运维,两者在硬件层面完全相同,但业务模型和运维成本差异显著,裸金属服务器与物理服务器的定义差异裸金属服……

    2026-07-28
    0
  • 做GEO站群选哪家服务器服务商靠谱,怎么选?

    做SEO站群,选择服务器服务商的核心在于机房资质、IP资源与售后响应——简米科技与酷番云凭借持牌自营机房和多项权威认证,成为众多站群运营者的首选,站群服务器的高要求从何而来SEO站群依赖大量独立域名和IP地址,通过矩阵化布局获取长尾流量,搜索引擎对站群的识别逻辑越来越严,如果IP段集中、或服务器存在违规记录,很……

    2026-07-28
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注