实现Docker 容器跨主机通讯

实现Docker 容器跨主机通讯

方案一:docker swarm集群

https://blog.csdn.net/AMCUL/article/details/132913280

方案二:直接路由法

在部署中提到的方法的实现分固定网段、路由持久化、IP转发三部分组成。

方法1:
修改并固定docker0的默认网段

修改docker0网段ip,在主机的/etc/docker/daemon.json文件中,加入如下内容:

#打开daemon.json文件
vi /etc/docker/daemon.json

#主机一中添加的内容
#172.16.200.1 为主机一的docker网段ip
{
 "bip": "172.16.200.1/24"
}

#主机二中添加的内容
#172.16.210.1 为主机二的docker网段ip
{
 "bip": "172.16.210.1/24"
}

#重启docker服务
systemctl restart docker 

添加路由规则,主机间互相添加

#主机1上添加路由规则(添加主机2的ip和网段)
ip route add 172.16.210.0/24 via 172.20.1.52

#主机2上添加路由规则(添加主机1的ip和网段)
ip route add 172.16.200.0/24 via 172.20.1.51

#方式一:
#开启路由转发
iptables -P FORWARD ACCEPT

#方式二:
#配置iptables规则(本机的网段)
#主机一
iptables -t nat -F POSTROUTING
iptables -t nat -A POSTROUTING -s 172.16.200.0/24 ! -d 172.16.0.0/16 -j MASQUERADE

#主机二
iptables -t nat -F POSTROUTING
iptables -t nat -A POSTROUTING -s 172.16.210.0/24 ! -d 172.16.0.0/16 -j MASQUERADE

启动容器并测试

# 主机1上启动ubuntu容器
docker run -it --name node1 ubuntu:latest /bin/bash

# 主机2上启动ubuntu容器
docker run -it --name node2 ubuntu:latest /bin/bash

#安装测试工具
apt-get update
#安装ping工具
apt-get install inetutils-ping -y
#安装ip查看工具
apt-get install net-tools -y
路由持久化(防止主机重启路由丢失)
法一:(推荐)

/etc/sysconfig/network-scripts/目录下创建名为route-enp0s3(enp0s3为主机网卡的名字,以实际为准)的文件
推荐此方法,注意创建时route-后跟的是本机主机的网卡名

vi /etc/sysconfig/network-scripts/route-enp0s3

#在此文件添加如下格式的内容
#主机一中添加
172.16.230.0/24 via 172.20.1.52
#主机二中添加
172.16.220.0/24 via 172.20.1.51

#重启网络验证
service network restart


#查看路由表中是否有刚才添加的路由
ip route show | column -t
法二:

/etc/sysconfig/static-routes 文件里添加如下内容 (没有static-routes需手动建立)

#主机一中添加
any net 172.16.230.0/24 via 172.20.1.52
#主机二中添加
any net 172.16.220.0/24 via 172.20.1.51

#重启网络服务
systemctl restart network

#查看路由表中是否有刚才添加的路由
ip route show | column -t
开启IP转发
#永久开启
vi /etc/sysctl.conf
#修改
net.ipv4.ip_forward=1
方法2:(适用于使用固定ip的容器)
创建docker网络

docker桥接类型网络创建
分别对两台服务器中的docker创建名字为test的网络,指定子网范围为 172.16.220.0/24 、172.16.230.0/24

#主机一
docker network create test --driver bridge --ipam-driver default --subnet 172.16.220.0/24

#主机二
docker network create test --driver bridge --ipam-driver default --subnet 172.16.230.0/24
#查看网络
docker network ls

设置静态路由

#主机1上添加路由规则(添加主机2的ip和网段)
ip route add 172.16.230.0/24 via 172.20.1.52

#主机2上添加路由规则(添加主机1的ip和网段)
ip route add 172.16.220.0/24 via 172.20.1.51

#开启路由转发
iptables -P FORWARD ACCEPT

启动容器并测试

# 主机1上启动ubuntu容器(加上创建的桥接网络)
docker run -it --name node1 --net=test ubuntu:latest /bin/bash

# 主机2上启动ubuntu容器(加上创建的桥接网络)
docker run -it --name node2 --net=test ubuntu:latest /bin/bash

#安装测试工具
apt-get update
#安装ping工具
apt-get install inetutils-ping -y
#安装ip查看工具
apt-get install net-tools -y
路由持久化(防止主机重启路由丢失)

使用nmtui图形化界面添加

 #下载nmtui
 yum install net-tools -y
 #显示nmtui图形化界面
 nmtui

在主机一网卡中配置主机二的docker网络的ip段和ip,在主机二网卡中配置主机一的docker网络的ip段和ip

#主机一中添加
172.16.230.0/24  172.20.1.52
#主机二中添加
172.16.220.0/24  172.20.1.51

配置完成会在/etc/sysconfig/network-scripts文件夹下看到在这里插入图片描述在这里插入图片描述

启动对应主机的新创建的网卡(网络重启或系统重启后会失效)

#主机一
nmcli c up br-aed92de88760
#主机二
nmcli c up br-0ab3914edle2

要使新网卡保持启动则需将对应新创建的网卡文件中的ONBOOT=no改为ONBOOT=yes

#主机一
vi ifcfg-br-aed92de88760
#ONBOOT=no改为ONBOOT=yes
ONBOOT=yes
#主机二
vi ifcfg-br-0ab3914edle2
#ONBOOT=no改为ONBOOT=yes
ONBOOT=yes

#重启网络服务
systemctl restart network

在这里插入图片描述

开启IP转发
#永久开启
vi /etc/sysctl.conf
#修改
net.ipv4.ip_forward=1

此时容器不受网络重启影响,可实现跨主机通讯。
但系统重启后,所创建的docker网络和容器均失效。
需要重新创建docker网络和容器,此后docker网络和容器均不受系统重启和网络重启的影响,成功实现docker容器的跨主机通讯。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值