前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Docker容器跨主机通讯的几种方式

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

作者头像
1850810
修改2021-06-07 10:30:49
2K0
修改2021-06-07 10:30:49
举报
文章被收录于专栏:用户3749098的专栏

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
代码语言:javascript
复制
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通。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Docker容器跨主机通讯的几种方式
  • 前言:Docker的5种网络模式
    • Bridge
      • Host
        • None
          • Containe
            • Network
              • Prework:
              • 1. 直接路由方式
              • 2. 基于OVS+GRE的大二层通信
              相关产品与服务
              容器服务
              腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档