zoukankan      html  css  js  c++  java
  • 走进docker聊聊docker网络

    容器网络概念

    1. 首先了解下linux的网络构成概念
    • 命名空间: Linux在网络栈中引入网络命名空间,将独立的网络协议栈隔离到不同的命令空间中,彼此间无法通信;Docker利用这一特性,实现不容器间的网络隔离。

    • Veth设备对:实现不同命名空间通信

    • Iptables/Netfilter: Iptables/Netfilter:Netfilter负责在内核中执行各种挂接的规则(过滤、修改、丢弃等),运行在内核模式中;Iptables模式是在用户模式下运行的进程,负责协助维护内核中Netfilter的各种规则表;通过二者的配合来实现整个Linux网络协议栈中灵活的数据包处理机制。

    • 网桥:网桥是一个二层网络设备,通过网桥可以将linux支持的不同的端口连接起来,并实现类似交换机那样的多对多的通信

    • 路由:Linux系统包含一个完整的路由功能,当IP层在处理数据发送或转发的时候,会使用路由表来决定发往哪里。

    1. 运行Docker容器默认使用的是bridge网络,Docker还包含其他网络模型,容器网络模型主要包含了3个概念
    • network: 网络模型
      • 单主机网络模式(none、host、bridge,joined container)
      • 多主机网络模式(overlay、macvlan、flannel)
    • sandbox:沙盒,它定义了容器内的虚拟网卡、DNS和路由表,是network namespace的一种实现,是容器的内部网络栈
    • endpoint:端点,用于连接sandbox和network
    1. 这里我们先介绍下Docker常用的网络模式:
    网络模式简介
    Host 容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。
    Bridge 此模式会为每一个容器分配、设置IP等,并将容器连接到一个docker0虚拟网桥,通过docker0网桥以及Iptables nat表配置与宿主机通信。
    none 该模式关闭了容器的网络功能,不分配子网跟ip
    Container 创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围。
    overlay 容器在两个跨主机进行通信的时候,是使用overlay network这个网络模式进行通信
    luxurong@hb13520 ~ % docker network ls
    NETWORK ID          NAME                  DRIVER              SCOPE
    5a9f0bc5a93a        bridge                bridge              local
    5239b7670d4f        composetest_default   bridge              local
    0487feea0278        host                  host                local
    ddfec4c499d9        none                  null                local
    62e4405853d2        testcompose_default   bridge              local
    1. 如何创建并且使用自定义网络驱动?
    #创建网络
    ocker network create --driver bridge my-net
    #my-net网络
    docker run --network=my-net ......

    网络的创建是非常的简单,至此大家了解了几种常见的网络模型。

    详解Docker驱动原理差异性

    主机ip:

    1. Host网络

    该模式与宿主机在同一个网络中,但没有独立IP地址。一个Network Namespace提供了一份独立的网络环境,包括网卡、路由、Iptable规则等都与其他的Network Namespace隔离。一个Docker容器一般会分配一个独立的Network Namespace。但如果启动容器的时候使用host模式,那么这个容器将不会获得一个独立的Network Namespace,而是和宿主机共用一个Network Namespace。容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。

    1. Container网络

    在理解了host模式后,这个模式也就好理解了。这个模式指定新创建的容器和已经存在的一个容器共享一个Network Namespace,而不是和宿主机共享。新创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围等。同样,两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的。两个容器的进程可以通过lo网卡设备通信。kubernetes的pod就是使用的这一模式。

    1. None网络 不指定网络,需要手动去配置网卡信息。

    2. Bridge网络

    Bridge网络使用独立network Namespace,并连接到docker0虚拟网卡(默认模式)。通过docker0网桥以及Iptables nat表配置与宿主机通信;bridge模式是Docker默认的网络设置,此模式会为每一个容器分配Network Namespace、设置IP等,并将一个主机上的Docker容器连接到一个虚拟网桥上。

    5.overlay 网络

    使用host也可以实现跨主机进行通信,直接使用这个物理的ip地址就可以进行通信。overlay它会虚拟出一个网络比如10.0.9.3这个ip地址,在这个overlay网络模式里面,有一个类似于服务网关的地址,然后把这个包转发到物理服务器这个地址,最终通过路由和交换,到达另一个服务器的ip地址。 Docker里实现采用会有一个服务发现consul,,会定义一个ip地址池,比如10.0.9.0/24之类的,上面会有容器,容器的ip地址会从上面去获取,获取完了后,会通过eth1进行通信,贼这实现跨主机的东西。

    结束

    下篇讲解Docker-Swarm如何在微服务项目中使用!

    欢迎关注公众号! 公众号回复:入群 ,扫码加入我们交流群! 扫码关注公众号获取更多学习资料

    欢迎关注我的公众号!里面可以加入微信技术交流群!
  • 相关阅读:
    JavaScript 操作注意事项(此日志持续更新)
    JavaScript省市级联
    Outlook 2013 中添加 live.cn 帐户
    readonly, const, static, static readonly 关键字实例说明
    Windows 8 应用开发常见问题及解决方案(持续更新)
    【转】用C#动态创建Access数据库
    使用 Layer 弹出 iframe 层,并让 iframe 自适应内容宽高
    Visual Studio 常见问题及解决方案(持续更新)
    Python核心编程学习日记之模块
    Python核心编程学习日记之函数式编程
  • 原文地址:https://www.cnblogs.com/1ssqq1lxr/p/14594952.html
Copyright © 2011-2022 走看看