热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Docker网络基础:实现跨主机容器间的高效通信与访问

Docker网络基础探讨了如何通过高效的技术手段实现跨主机容器间的顺畅通信与访问。本文深入分析了Docker网络架构,特别是其在多主机环境下的应用,为Go语言开发者提供了宝贵的实践指导和理论支持。

在同一宿主机下的Docker的容器之间是默认互相联通的。通过docker inspect id或name可以查看到ip地址。在不通的容器中来执行ping是可以ping通的。

但我们通过观察发现,每一个启动容器的ip地址不是固定的,所以如果我们通过ip地址来实现互连明显是不靠谱的。但我们发现这些ip又处于同一网段中而且默认是127.0.0.X,这就是Docker容器默认跨主机之间的链接方法的第一种:网桥实现

在docker宿主机上运行ifconfig命令可以看的存在一个docker0的网桥。Docker容器通过docker0 网桥实现同一主机间中,容器的ip地址分配和访问,所以,如果希望Docker跨主机访问,最简单的方式就是将不同主机的docker0 设置为同一网段。

整体网络拓扑结构就是这样:

这里写图片描述

但是通过这种桥接,所有网卡都要在一个网段下,所以要对每个Docker守护进程对ip的分配做出限制:

下面,我们就来实现这个结构:

两台Ubuntu 的 ip:

Host1 : 10.211.55.3 网卡:eth0

Host2 :10.211.55.5 网卡 eth1

网关:10.211.55.1

对容器ip的划分:

Host1: 10.211.55.64/26

  地址范围: 10.211.55.65~10.211.55.126

Host2: 10.211.55.128/26

  地址范围: 10.211.55.129~10.211.55.190

需要的操作:

以下,以Host1 为例,Host2 上操作相似,只是网卡名字不一样,我在这里,没有我们不使用默认的docker0 网桥,而是自己新建一个网桥:

apt-get install bridge-utils 
  1. 分别在Docker主机上建立虚拟网桥:

       Host1: $ sudo brctl addbr br0

  2. 为网桥分配一个同网段ip

      Host1: $ sudo ifconfig br0 10.211.55.10 netmask 255.255.255.0

      Host2: $ sudo ifconfig br0 10.211.55.20 netmask 255.255.255.0

  3. 桥接本地网卡:

      Host1: $ sudo brctl addif br0 eth0

这里,我们就准备好了网桥设置

下面我们来修改Docker的配置,使用我们新建的网桥代替docker0:

  1. 修改 /etc/default/docker文件

      $sudo vim /etc/default/docker

  2. 添加守护进程的启动选项:

      Host1: DOCKER_OPTS=” -b=br0 –fixed-cidr=‘10.211.55.64/26‘ “

      Host2: DOCKER_OPTS=” -b=br1 –fixed-cidr=‘10.211.55.128/26‘ “
      
      这里,-b 用来指定容器连接的网桥名字

         –fixed-cidr用来限定为容器分配的IP地址范围

  3. 保存文件并重启Docker服务

      $ sudo service docker restart
      
    下面,就可以来验证:

1.分别在两个Host上启动一个容器

  $ docker run -it ubuntu /bin/bash
  
2.在容器中运行ping命令查看连接情况 发现是互通的。

Docker跨主机容器链接方法二:Open vSwitch
简称OVS是一个虚拟交换软件.目的是让大规模网络自动化可以通过编程扩展。

先看一下实现这种方式的连接所具备的条件:
1.双网卡,Host-Only & NAT
2.安装Open vSwitch: apt-get install openvswitch-switch

操作步骤:

  • 1.在虚拟机中建立ovs网桥
  • 2.添加gre连接
  • 3.配置docker容器虚拟网桥
  • 4.为虚拟网桥添加ovs接口
  • 5.添加不同Docker容器网段路由

具体执行的一些命令如下:
针对10.211.55.3设置

sudo ovs-vsctl show  #ovs状态
sudo ovs-vsctl add-br obr0  #增加ovs网桥名为obr0
sudo ovs-vsctl add-port obr0 gre0  # 增加gre接口名为obr0
sudo ovs-vsctl set interface gre0 type=gre
options:remote_ip=10.211.55.5 
 #设置接口指定链接类型为gre 并指定远程链接的ip
sudo ovs-vsctl show  
   #接下来设计本机docker网桥
sudo brctl addbr br0  
sudo ifconfig br0 10.211.55.1 netmask 255.255.255.0  
sudo brctl addif br0 obr0#为本机网桥设置ovs网桥链接  
sudo brctl show  
   #最后设置为docker网桥br0
   #这样本机就可以链接10.211.55.5

对于10.211.55.5要联通10.221.55.3只需要对其设置路由表即可:

route  
sudo ip route add 10.211.55.0/24 via 10.211.55.5 dev eth0  

Docker跨主机容器链接方法三:weave

建立一个虚拟的网络,用于将运行在不同主机的Docker容器连接起来.
要实现这种方式所需要的条件如下:
双网卡,Host-Only & NAT
host1:10.0.2.6
host2:10.0.2.8
host1上应用容器1:192.168.0.2/24
host2上应用容器1:192.168.0.3/24
两台机器上均安装Docker以及weave,并均启动好weave路由容器
在两台机器上均启动一个应用容器.可以直接使用weave run命令,也可以先使用docker run启动好容器,然后使用weave attach命令给容器绑定IP地址

安装好weava之后,便执行绑定:
在10.0.2.6之中:

weava launch 10.0.2.8
#配置docker处于192.168.0.2/24的网段中
c2=$(weava run 192.168.0.2/24 -ti ubuntu /bin/bash)
docker attach $c2

按如上的方法做了后所以主机内的容器通常是全部可以链接成功的,但一般情况下这样很不安全:

我们会使用在/etc/default/docker中配置-icc=false (拒绝容器的所有链接)以及–iptables=true (启动宿主机防火墙规则)而对于需要互连的则使用–link来制定。–link 容器名称:自己定义的别名


推荐阅读
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 本文探讨了如何在日常工作中通过优化效率和深入研究核心技术,将技术和知识转化为实际收益。文章结合个人经验,分享了提高工作效率、掌握高价值技能以及选择合适工作环境的方法,帮助读者更好地实现技术变现。 ... [详细]
  • Docker的安全基准
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 根据最新发布的《互联网人才趋势报告》,尽管大量IT从业者已转向Python开发,但随着人工智能和大数据领域的迅猛发展,仍存在巨大的人才缺口。本文将详细介绍如何使用Python编写一个简单的爬虫程序,并提供完整的代码示例。 ... [详细]
  • 实体映射最强工具类:MapStruct真香 ... [详细]
  • 深入解析 Apache Shiro 安全框架架构
    本文详细介绍了 Apache Shiro,一个强大且灵活的开源安全框架。Shiro 专注于简化身份验证、授权、会话管理和加密等复杂的安全操作,使开发者能够更轻松地保护应用程序。其核心目标是提供易于使用和理解的API,同时确保高度的安全性和灵活性。 ... [详细]
  • Startup 类配置服务和应用的请求管道。Startup类ASP.NETCore应用使用 Startup 类,按照约定命名为 Startup。 Startup 类:可选择性地包括 ... [详细]
  • This guide provides a comprehensive step-by-step approach to successfully installing the MongoDB PHP driver on XAMPP for macOS, ensuring a smooth and efficient setup process. ... [详细]
  • 本文详细介绍如何使用Samba软件配置CIFS文件共享服务,涵盖安装、配置、权限管理及多用户挂载等关键步骤。通过具体示例和命令行操作,帮助读者快速搭建并优化Samba服务器。 ... [详细]
  • Hadoop入门与核心组件详解
    本文详细介绍了Hadoop的基础知识及其核心组件,包括HDFS、MapReduce和YARN。通过本文,读者可以全面了解Hadoop的生态系统及应用场景。 ... [详细]
  • 深入了解 Windows 窗体中的 SplitContainer 控件
    SplitContainer 控件是 Windows 窗体中的一种复合控件,由两个可调整大小的面板和一个可移动的拆分条组成。本文将详细介绍其功能、属性以及如何通过编程方式创建复杂的用户界面。 ... [详细]
  • 作为一名专业的Web前端工程师,掌握HTML和CSS的命名规范是至关重要的。良好的命名习惯不仅有助于提高代码的可读性和维护性,还能促进团队协作。本文将详细介绍Web前端开发中常用的HTML和CSS命名规范,并提供实用的建议。 ... [详细]
  • 自己用过的一些比较有用的css3新属性【HTML】
    web前端|html教程自己用过的一些比较用的css3新属性web前端-html教程css3刚推出不久,虽然大多数的css3属性在很多流行的浏览器中不支持,但我个人觉得还是要尽量开 ... [详细]
author-avatar
昆山莱盛劳务
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有