docker系列—覆盖网络

本文深入探讨Docker覆盖网络的概念,包括overlay网络的创建、加密、自定义设置以及在群集服务和独立容器中的应用。介绍了如何配置网络以实现安全通信、端口发布和负载平衡。

覆盖网络

overlay网络驱动程序会创建多个docker进程主机之间的分布式网络。该网络位于(覆盖)特定于主机的网络之上,允许连接到它的容器(包括群集服务容器)安全地进行通信。Docker透明地处理每个数据包与Docker守护程序主机和正确的目标容器之间正确的的路由。

初始化swarm或将Docker主机加入现有swarm时,会在该Docker主机上创建两个新网络:

  • 一个称为覆盖网络ingress,处理与群集服务相关的控制和数据流量。创建群组服务并且不将其连接到用户定义的覆盖网络时,ingress默认连接到网络。
  • 一个名为的桥接网络docker_gwbridge,它将各个Docker守护程序连接到参与该群集的其他守护进程。

可以使用与创建用户定义bridge网络docker network create相同的方式创建用户定义的overly网络。服务或容器一次可以连接到多个网络。服务或容器只能通过它们各自连接的网络进行通信。

虽然可以将swarm服务和独立容器连接到覆盖网络,但默认行为和配置问题是不同的。因此,本主题的其余部分分为适用于所有覆盖网络的操作,适用于群集服务网络的操作以及适用于独立容器使用的覆盖网络的操作。

所有覆盖网络的操作

创建覆盖网络

先决条件:
使用覆盖网络的Docker守护程序的防火墙规则

  • 需要打开以下端口,以往返于参与覆盖网络的每个Docker主机的流量:

    • 用于群集管理通信的TCP端口2377
    • TCP和UDP端口7946,用于节点之间的通信
    • UDP端口4789,用于覆盖网络流量
  • 在创建覆盖网络之前,需要使用初始化Docker守护进程为swarm管理器,docker swarm init或者使用将该Docker守护进程加入现有的swarm docker swarm join。这两种方法均会创建默认的ingress覆盖网络,默认情况下,群集服务会使用该 覆盖网络。即使从未计划使用群体服务,也需要这样做。之后,可以创建其他用户定义的覆盖网络。

要创建用于群服务的覆盖网络,请使用以下命令:

docker network create -d overlay my-overlay

要创建可由群集服务或 独立容器用于与在其他Docker守护程序上运行的其他独立容器通信的覆盖网络,请添加–attachable标志:

docker network create -d overlay --attachable my-attachable-overlay

以指定IP地址范围,子网,网关和其他选项。详情 docker network create --help请见。

加密覆盖网络上的流量

加密覆盖网络上的流量
默认情况下,在GCM模式下使用AES算法对所有群集服务

### Linux Docker 网络配置与管理 #### 创建不同类型的网络容器 在Linux环境下,通过指定不同的`--network`参数可以创建多种类型的Docker网络容器。具体来说: - 使用命令 `docker run -id --name 1-none --network none alpine` 可启动一个名为`1-none`的Alpine镜像实例,并将其置于无网络模式下运行[^1]。 - 命令 `docker run -id --name 2-host --network host alpine` 启动了一个名称为`2-host`的容器,该容器共享主机的网络命名空间,意味着它可以直接访问宿主机上的所有接口和服务而无需额外设置端口映射。 - 对于桥接网络,默认情况下大多数容器都连接到此网络上;可以通过如下指令来部署:`docker run -id --name 3-bridge --network bridge alpine` ,这会使得新创建的容器被分配独立IP地址并能与其他在同一子网内的设备通信。 - 若要让两个或多个容器共用同一个网络栈,则可利用container选项实现这一点,例如执行语句 `docker run -id --name 4-container --network container:3-bridge alpine` 将使`4-container`和之前提到过的`3-bridge`拥有相同的网络环境。 ```bash # 示例脚本用于批量创建上述四种类型的测试容器 #!/bin/bash docker rm -f $(docker ps -aq) containers=("none" "host" "bridge") for i in "${!containers[@]}"; do name="test-${i}-${containers[$i]}" network_option="--network ${containers[$i]}" if [[ $i -eq 0 ]]; then # 特殊处理 'none' 类型 docker run -d --name "$name" $network_option busybox top & elif [[ $i -gt 0 && $i -lt ${#containers[@]} ]];then docker run -d --name "$name" $network_option nginx & fi done # 处理最后一个特殊案例 (container) last_name="test-last-container" linked_container=$(docker ps | grep test-[[:digit:]]-bridge | awk '{print $NF}') docker run -d --name "$last_name" --network container:$linked_container nginx & wait echo "All containers have been created." ``` 以上代码展示了如何自动化地构建一系列具有不同联网特性的实验性容器,有助于理解各种网络模式的实际效果以及它们之间的差异。 #### 配置自定义网络 除了默认提供的几种基本网络类型外,还可以根据实际需求定制专属的Docker网络结构。比如建立覆盖范围更广、灵活性更高的overlay网络以便支持跨节点集群间的通讯服务等高级应用场景。 ```bash # 创建一个新的 overlay 网络 docker network create -d overlay my-overlay-network ``` 这种做法不仅限定了特定应用间的安全边界,同时也简化了多租户架构下的资源隔离难题,在大规模分布式系统设计中有广泛应用前景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值