zoukankan      html  css  js  c++  java
  • docker网络

    容器间的通信以及容器到外部网络的通信是通过docker0网桥并结合iptables实现的。

    2. 四种单节点网络模式

     

    2.1 bridge 模式

    Docker 容器默认使用 bridge 模式的网络。其特点如下:

    • 使用一个 linux bridge,默认为 docker0
    • 使用 veth 对,一头在容器的网络 namespace 中,一头在 docker0 上
    • 该模式下Docker Container不具有一个公有IP,因为宿主机的IP地址与veth pair的 IP地址不在同一个网段内
    • Docker采用 NAT 方式,将容器内部的服务监听的端口与宿主机的某一个端口port 进行“绑定”,使得宿主机以外的世界可以主动将网络报文发送至容器内部
    • 外界访问容器内的服务时,需要访问宿主机的 IP 以及宿主机的端口 port
    • NAT 模式由于是在三层网络上的实现手段,故肯定会影响网络的传输效率。
    • 容器拥有独立、隔离的网络栈;让容器和宿主机以外的世界通过NAT建立通信

    2.2 Host 模式

    定义:

    Host 模式并没有为容器创建一个隔离的网络环境。而之所以称之为host模式,是因为该模式下的 Docker 容器会和 host 宿主机共享同一个网络 namespace,故 Docker Container可以和宿主机一样,使用宿主机的eth0,实现和外界的通信。换言之,Docker Container的 IP 地址即为宿主机 eth0 的 IP 地址。其特点包括:

      • 这种模式下的容器没有隔离的 network namespace
      • 容器的 IP 地址同 Docker host 的 IP 地址
      • 需要注意容器中服务的端口号不能与 Docker host 上已经使用的端口号相冲突
      • host 模式能够和其它模式共存
     

    启动一个 host 网络模式的容器

    docker run -d --name hostc1 --network host -p 5001:5001 training/webapp python app.py
    检查其 network namespace,其中可以看到主机上的所有网络设备

    2.3 container 模式

    定义:

     Container 网络模式是 Docker 中一种较为特别的网络的模式。处于这个模式下的 Docker 容器会共享其他容器的网络环境,因此,至少这两个容器之间不存在网络隔离,而这两个容器又与宿主机以及除此之外其他的容器存在网络隔离。  

    实验:

    (1)启动一个容器: 

    docker run -d --name hostcs1 -p 5001:5001 training/webapp python app.py

    (2)启动另一个容器,并使用第一个容器的 network namespace

    docker run -d --name hostcs2 --network container:hostcs1  training/webapp python app.py

    注意:因为此时两个容器要共享一个 network namespace,因此需要注意端口冲突情况,否则第二个容器将无法被启动。

    多节点 Docker 网络

      Docker 多节点网络模式可以分为两类,一类是 Docker 在 1.19 版本中引入的基于 VxLAN 的对跨节点网络的原生支持;另一种是通过插件(plugin)方式引入的第三方实现方案,比如 Flannel,Calico 等等。

    Docker 1.19 版本中增加了对 overlay 网络的原生支持。Docker 支持 Consul, Etcd, 和 ZooKeeper 三种分布式key-value 存储。

    eth1 的网络是一个内部的网段,其实它走的还是普通的 NAT 模式;而 eth0 是 overlay 网段上分配的IP地址,也就是它走的是 overlay 网络

    • Docker 在每个节点上创建了两个 linux bridge,一个用于 overlay 网络(ov-000100-1de98),一个用于非 overlay 的 NAT 网络(docker_gwbridge)
    • Overlay 网络中的容器处于一个虚拟的大二层网络中
    • Docker 从某种程度上利用了第一种和第三种方式的组合,首先Docker 利用 consul 以及 etcd 这样的分布式 key/value 存储来保存IP地址映射关系,另一方面个Docker 节点也通过某种协议来直接广告映射关系。
    关于Docker 网络模式选择的简单结论
    • Bridge 模式的性能损耗大概为10%
    • 原生 overlay 模式的性能损耗非常高,甚至达到了 56%,因此,在生产环境下使用这种模式需要非常谨慎。
    • 如果一定要使用 overlay 模式的话,可以考虑使用 Cisco 发起的  Calico 模式,它的性能和 bridge 相当。
  • 相关阅读:
    Python环境搭建后,多种方式的使用进行程序的执行。
    Visual Studio 2017进行Python开发环境的搭建,使用VS2017进行python代码的编写。
    Linux Ubuntu运行线程程序出现undefined reference to ‘pthread_create’和undefined reference to ‘pthread_join’错误。
    计算机二级-C语言-程序填空题-190107记录
    2018/03/08 每日一学PHP 之 常量defind 和 const区别
    H5手机页面剖析
    jQuery(三)
    jQuery(二)
    jQuery(一)
    JS构造函数(便于理解,简易)
  • 原文地址:https://www.cnblogs.com/muzinan110/p/7573781.html
Copyright © 2011-2022 走看看