11.1 Docker 网络-简介

  • 容器网络模型 (CNM)
  • Libnetwork 是 CNM 的实现

Docker 封装了一系列本地驱动:

  • 单机桥接网络 (Single-Host Bridge Network)
  • 多机覆盖网络 (Multi-Host Overly)
  • 接入 VLAN
  • Libnetwork 提供了本地服务发现和基础的容器负载均衡解决方案

11.2 Docker 网络-详解

11.2.1 基础理论

Docker 网络架构主要由3个主要部分构成:

  • CNM: 设计标准
  • Libnetwork: 具体实现
  • 驱动

顶层设计:

image.png

  1. CNM

3个基本要素:

  • 沙盒 (Sandbox): 独立的网络栈
  • 终端 (Endpoint): 虚拟网络接口
  • 网络 (Network): 网桥 (类似交换机) 的软件实现

image.png

CNM 组件与容器进行关联:

image.png

加入 Docker 主机:

image.png

  1. Libnetwork

    • CNM 是设计文档
    • Libnetwork 是标准实现, 开源, Go 编写, 跨平台
    • 实现了本地服务发现 (Service Discovery)
    • 基于 Ingress 的容器负载均衡
    • 网络控制层, 管理层
  2. 驱动

  • 负责实现数据层
  • 网络连通性, 隔离性

不是很好理解该层.

控制层, 管理层与数据层的关系:

image.png

11.2.2 单机桥接网络

  • 最简单
  • 单机: 该网络只能在单个 Docker 主机上运行, 并且只能与所在 Docker 主机上的容器进行连接
  • 桥接: 802.1.d 桥接的实现 (二层交换机)

容器无法直接进行通信 (不在一个网段中的话):

image.png

bridge 网络和 docker0 网桥之间的关系:

image.png

补充接入 bridge 网络的容器:

image.png

创建单机桥接网络:

  1. $ docker network create -d bridge localnet

查看网桥:

  1. $ brctl show

目前的网桥配置:

image.png

新建容器并接入新建的桥接网络中:

  1. $ docker container run -d --name c1 --network localnet alpine sleep 1d

关系:

image.png

  • 如果再创建一个新容器并加入到 localnet, 那么它和 c1 之间可以 ping 通

端口映射:

image.png

11.2.3 多机覆盖网络

  • 允许单个网络包含多个主机

创建:

  1. $ docker network create --d overlay

11.2.4 接入现有网络

  • Docker 内置的 Macvlan 驱动用于容器与物理之间的通信
  • 需要提供 mac 和 ip

容器化应用连接到网络:

  • 需要将主机网卡 (NIC) 设置为混杂模式 (Promiscuous Mode)

image.png

物理网络配置两个 VLAN:

image.png

添加一个 Docker 主机并连到该网络:

image.png

将容器接入 VLAN 100, 首先使用 Macvlan 驱动创建新的 Docker 网络, 但是还需要设置几个参数:

  • 子网信息
  • 网关
  • 可分配给容器的 IP 范围
  • 主机使用的接口或者子接口

创建一个 macvlan100 的 Macvlan 网络, 该网络会连接到 VLAN 100:

  1. $ docker network create -d macvlan --subnet=10.0.0.0/24 --ip-range=10.0.0.0/25 --gateway=10.0.0.1 -o parent=eth0.100 macvlan100

image.png

部署到该网络中:

  1. $ docker container run -d --name mactainer1 --network macvlan100 alpine sleep 1d

image.png

多个 Macvlan 网络:

image.png

用于故障排除的容器和服务日志
**
daemon 日志存储位置:

  • Systemd: Journald, journalctl -u docker.service

容器日志:

  • docker container logs

11.2.6 Ingress 网络

11.3 Docker 网络-命令

11.4 本章小结