专栏首页用户3749098的专栏Docker容器跨主机通讯的几种方式

Docker容器跨主机通讯的几种方式

Docker容器跨主机通讯的几种方式

前言:Docker的5种网络模式

Bridge

此时docker引擎会创建一个veth对,一端连接到容器实例并命名为eth0,另一端连接到指定的网桥中(比如docker0),因此同在一个主机的容器实例由于连接在同一个网桥中,它们能够互相通信。容器创建时还会自动创建一条SNAT规则,用于容器与外部通信时,类似家里上网用的ISP提供给我们的动态IP。如果用户使用了-p或者-P端口,还会创建对应的端口映射规则,使得外部请求能够访问容器的服务,但是你不能通过IP直接访问,本文提供了3种方式实现容器的跨主机访问。

Host

与宿主机共享网络,此时容器没有使用网络的namespace,宿主机的所有设备,会暴露到容器中,因此存在安全隐患。

None

不设置网络,相当于容器内没有配置网卡,用户可以手动配置。

Containe

指定与某个容器实例共享网络

Network

使用自定义网络,可以使用docker network create创建,并且默认支持多种网络驱动,用户可以自由创建桥接网络或者overlay网络。

Prework:

  1. 安装Docker
  2. 安装OVS(非编译) apt-get install openvswitch-switch
  3. 编译安装OVS:

apt-get install git

apt-get install autoconf automake libtool

apt-get install openssl

apt-get install libssl-dev

apt-get install make

apt-get install make-guile

apt-get install python-six

获取代码: git clone https://github.com/openvswitch/ovs.git

编译操作:

cd ovs ./boot.sh ./configure make make install

加载模块

/sbin/modprobe openvswitch

查看安装是否成功:

/sbin/lsmod | grep openvswitch

修改环境变量:

export PATH=$PATH:/usr/local/share/openvswitch/scripts

1. 直接路由方式

这种方式最简单,只需一步:在左侧本机增加一个静态路由。

ip route add 172.17.42.0/24 via 172.31.4.143

在右侧主机新增一条静态路由: ip route add 172.17.43.0/24 via 172.31.15.168

当然前提是,docker0 网桥的网段改掉,参照下图的方式,同时需要提醒的是,需要把本机的路由转发打开。

ubuntu的话:

修改 /etc/sysctl.conf,把ip_forward = 1 的注释去掉即可

centos的话:

修改 /etc/sysctl.d/99-sysctl.conf

添加net.ipv4.ip_forward = 1,然后试试sysctl -p

很简单的方式,其实很像flannel网络的Host-Gateway的原理

2. 基于OVS+GRE的大二层通信

示意图如下:

  • 修改Docker0的网络地址

编辑主机1上的 /etc/docker/daemon.json 文件,添加内容:

{ "bip": "172.17.43.1/24" }

编辑主机2上的 /etc/docker/daemon.json 文件,添加内容:

{ "bip":"172.17.42.1/24" }

  • 重启docker服务

主机1和主机2上均执行如下命令重启docker服务以使修改后的docker0网段生效

systemctl restart docke

  • 创建ovs bridge
ovs-vsctl add-br br0 
ifconfig 
  • 通过ifconfig命令,我们发现多了一个br0网桥。
  • 设置gre端口 (主机2上面也一样,只是remote_ip为172.31.15.168)

ovs-vsctl add-port br0 gre0 – set Interface gre0 type=gre option:remote_ip=172.31.4.143

brctl addif docker0 br0

ip link set dev br0 up

ip link set dev docker0 up

ip route add 172.17.0.0/16 dev docker0

  • 启动容器测试下

docker run -it nginx /bin/bash

显示两个跨主机容器能互相ping通。

原文链接:https://blog.csdn.net/xialingming/article/details/83093031

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Docker容器跨主机通信之:直接路由方式

    直观上看,要实现网络通信,机器需要至少一个网络接口(物理接口或虚拟接口)与外界相通,并可以收发数据包;此外,如果不同子网之间要进行通信,需要额外的路由机制。

    py3study
  • Docker容器跨主机通信之:直接路由方式

    就目前Docker自身默认的网络来说,单台主机上的不同Docker容器可以借助docker0网桥直接通信,这没毛病,而不同主机上的Docker容器之间只能通过在...

    1850810
  • 跨页面通讯的几种方式

    你经常会遇到需要跨标签共享信息的情况,那么本文就跟大家一起回顾下web端有哪些方式可以实现这样的需求。

    RobinsonZhang
  • 跨主机容器间通讯解决方案

    创建容器服务来测试:docker service create --name tomcat1 --replicas 2 192.168.56.200:5000/...

    @凌晨
  • Docker容器跨主机通信之:OVS+GRE

    OpenVSwich即开放式虚拟交换机实现,简称OVS,OVS在云计算领域应用广泛,值得我们去学习使用。

    py3study
  • Docker 容器跨主机多网段通信解决方案

    一、MacVlan 实现Docker的跨主机网络通信的方案有很多,如之前博文中写到的通过部署 Consul服务实现Docker容器跨主机通信

    小手冰凉
  • 部署 Consul服务实现Docker容器跨主机通信

    consul 数据中心的含义,可以将其当做数据库来理解,类似于Redis等非关系型数据库,采用的是键-值对的方式,存放着各个容器的IP及端口信息。 consul...

    小手冰凉
  • Docker网络——实现容器间通信、容器与外网通信以及容器的跨主机访问

    由上图我们可以看到创建的网络ID为4554d78082da ,使用ip addr查看本机网络:

    1850810
  • Docker镜像创建容器的几种方法

    每个容器都是由镜像创建的应用程序的一个实例,并且一个主机系统可以运行多个容器,每个容器都是隔离的。接下来,我将介绍如何创建、使用和管理容器。

    角落的白板报
  • 基于consul的Docker-overlay跨多宿主机容器网络

    可以启动一个server和多个agent(此处是一个),然后让agent,join到consul集群中

    字母哥博客
  • Docker Network

    docker 的网络驱动有很多种方式,docker 官网给出的网络解决方案有 6 种,分别是:bridge、host、overlay、macvlan、none、...

    用户2491317
  • docker容器跨服务器的迁移方式export和save

    老七Linux
  • 使用腾讯云容器服务(TKE)实现应用跨可用区高可用部署之一

    本文描述如何使用腾讯云容器服务(TKE)实现跨可用区的应用高可用部署,包含如下内容:

    杨泽华
  • 初学Docker容器网络不得不看的学习笔记

    Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。

    宜信技术学院
  • 在Docker中使用Open vSwitch创建跨主机的容器网络

    本文介绍了如何使用Open vSwitch为Docker 1.9.0及以后版本提供网络支持。操作前请先确认你已经按照INSTALL.md(http://open...

    SDNLAB
  • Docker 入门到实战教程(四)容器链接

    在使用Docker容器时,我们需要访问容器的内部网络,或需要在容器间相互访问。Docker 容器默认不会开放任何端口,因此需要将容器与宿主机进行端口映射,使容器...

    小东啊
  • Docker学习教程笔记第一篇:基本认识Docker以及它的核心概念

    Docker是诞生于2013年,是dotCloud的一个开源项目,基于Google推出的GO语言实现。遵从Apache2.0协议。

    聚优云惠
  • 机器学习的几种学习方式

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

    村雨遥
  • .NET Core容器化@Docker

    温馨提示:本文适合动手演练,效果更佳。 ?  1. 引言 我们知道. NET Core最大的特性之一就是跨平台,而对于跨平台,似乎大家印象中就是可以在非Wi...

    圣杰

扫码关注云+社区

领取腾讯云代金券