docker-覆盖网络
docker network rm docker_gwbridge
Error response from daemon: Error response from daemon: network net2 has active endpoints
1 docker swarm leave //退出集群
2 把本网络的容器关掉
3 docker network inspect docker_gwbridge //查看详细信息
4 /var/lib/docker/network/files/ingress_sbox/ //网卡相关信息
5 rm -rf ingress_sbox //删除这个目录
6 systemctl restart docker
7 发现用docker network list查看没了
但是ifconfig查看时还在
ifconfig 网卡名 down
ok
使用覆盖网络
该overlay
网络驱动程序会创建多个docker守护主机之间的分布式网络。
该网络位于(覆盖)特定于主机的网络之上,允许连接到它的容器(包括群集服务容器)安全地进行通信。
Docker透明地处理每个数据包与正确的Docker守护程序主机和正确的目标容器的路由。
初始化swarm或将Docker主机加入现有swarm时,会在该Docker主机上创建两个新网络:
- 称为覆盖网络
ingress
,处理与群集服务相关的控制和数据流量。创建群组服务并且不将其连接到用户定义的覆盖网络时,它ingress
默认连接到网络。 - 一个名为的桥接网络
docker_gwbridge
,它将各个Docker守护程序连接到参与该群集的其他守护进程。
可以使用与创建用户定义overlay
网络docker network create
相同的方式创建用户定义的bridge
网络。
服务或容器一次可以连接到多个网络。服务或容器只能通过它们各自连接的网络进行通信。
虽然可以将swarm服务和独立容器连接到覆盖网络,但默认行为和配置问题是不同的。
适用于群集服务网络的操作以及适用于独立容器使用的覆盖网络的操作。
所有覆盖网络的操作
创建覆盖网络
先决条件:
使用覆盖网络的Docker守护程序的防火墙规则
需要以下端口打开来往于覆盖网络上的每个Docker主机的流量:
- 用于集群管理通信的TCP端口2377
- TCP和UDP端口7946用于节点之间的通信
- UDP端口4789用于覆盖网络流量
在创建覆盖网络之前,需要将Docker守护程序初始化为swarm管理器或者使用它将其连接到现有的swarm。这些中的任何一个都会创建默认
ingress
覆盖网络,默认情况下 由群服务使用。即使从未计划使用群组服务,也需要执行此操作。之后,可以创建其他用户定义的覆盖网络。
要创建用于swarm服务的覆盖网络,请使用如下命令:
$ 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算法加密所有群集服务管理流量 。群中的管理器节点每隔12小时轮换用于加密八卦数据的密钥。
要加密应用程序数据,请--opt encrypted
在创建覆盖网络时添加。这样可以在vxlan级别启用IPSEC加密。此加密会产生不可忽视的性能损失,因此应该在生产中使用此选项之前对其进行测试。
启用覆盖加密后,Docker会在所有节点之间创建IPSEC隧道,在这些节点上为连接到覆盖网络的服务安排任务。这些隧道还在GCM模式下使用AES算法,管理器节点每12小时自动旋转密钥。
Windows不支持叠加网络加密。如果Windows节点尝试连接到加密的覆盖网络,则不会检测到错误,但节点无法通信。
SWARM模式覆盖网络和独立容器
可以将覆盖网络功能与两者一起使用--opt encrypted --attachable
,并将非托管容器附加到该网络:
$ docker network create --opt encrypted --driver overlay --attachable my-attachable-multi-host-network
自定义默认入口网络
大多数用户从不需要配置ingress
网络,但Docker 17.05及更高版本允许这样做。如果自动选择的子网与网络上已存在的子网冲突,或者需要自定义其他低级网络设置(如MTU),则此功能非常有用。
自定义ingress
网络涉及删除和重新创建它。这通常在在swarm中创建任何服务之前完成。如果具有发布端口的现有服务,则在删除ingress
网络之前需要删除这些服务。
在没有ingress
网络存在的时间内,不发布端口的现有服务继续运行但不是负载平衡的。这会影响发布端口的服务,例如发布端口80的WordPress服务。
检查
ingress
网络使用docker network inspect ingress
,并删除其容器连接到它的任何服务。这些是发布端口的服务,例如发布端口80的WordPress服务。如果未停止所有此类服务,则下一步失败。删除现有
ingress
网络:$ docker network rm ingress WARNING! Before removing the routing-mesh network, make sure all the nodes
in your swarm run the same docker engine version. Otherwise, removal may not
be effective and functionality of newly created ingress networks will be
impaired.
Are you sure you want to continue? [y/N]
使用
--ingress
标志创建新的覆盖网络,以及要设置的自定义选项。此示例将MTU设置为1200,将子网设置为10.11.0.0/16
,并将网关设置为10.11.0.2
。$ docker network create \
--driver overlay \
--ingress \
--subnet=10.11.0.0/16 \
--gateway=10.11.0.2 \
--opt com.docker.network.driver.mtu=1200 \
my-ingress
注意:可以将
ingress
网络命名为其他内容ingress
,但只能拥有一个。尝试创建第二个失败。重新启动在第一步中停止的服务。
自定义docker_gwbridge接口
它docker_gwbridge
是一个虚拟网桥,将覆盖网络(包括ingress
网络)连接到单个Docker守护程序的物理网络。Docker初始化swarm或将Docker主机加入swarm时会自动创建它,但它不是Docker设备。它存在于Docker主机的内核中。如果需要自定义其设置,则必须在将Docker主机加入群组之前或从群集中临时删除主机之后执行此操作。
停止Docker。
删除现有
docker_gwbridge
界面。$ ip link set docker_gwbridge down $ ip link del dev docker_gwbridge
启动Docker。不要加入或初始化群。
docker_gwbridge
使用docker network create
命令使用自定义设置手动创建或重新创建桥。此示例使用子网10.11.0.0/16
。$ docker network create \
--subnet 10.11.0.0/16 \
--opt com.docker.network.bridge.name=docker_gwbridge \
--opt com.docker.network.bridge.enable_icc=false \
--opt com.docker.network.bridge.enable_ip_masquerade=true \
docker_gwbridge
初始化或加入群。由于桥已经存在,Docker不会使用自动设置创建它。
群组服务的运营
在覆盖网络上发布端口
连接到同一覆盖网络的群集服务有效地将所有端口相互暴露。对于可在服务外部访问的端口,必须使用或标记on 或发布该端口。支持遗留冒号分隔语法和较新的逗号分隔值语法。较长的语法是首选,因为它有点自我记录。-p
--publish
docker service create
docker service update
标志值 | 描述 |
---|---|
-p 8080:80或 -p published = 8080,target = 80 |
将服务上的TCP端口80映射到路由网格上的端口8080。 |
-p 8080:80 / udp或 -p published = 8080,target = 80,protocol = udp |
将服务上的UDP端口80映射到路由网格上的端口8080。 |
-p 8080:80 / tcp -p 8080:80 / udp或 -p published = 8080,target = 80,protocol = tcp -p published = 8080,target = 80,protocol = udp |
将服务上的TCP端口80映射到路由网格上的TCP端口8080,并将服务上的UDP端口80映射到例程网格上的UDP端口8080。 |
绕过群集服务的路由网格
默认情况下,发布端口的swarm服务使用路由网格来实现。当连接到任何swarm节点上的已发布端口(无论它是否正在运行给定服务)时,将被透明地重定向到正在运行该服务的worker。实际上,Docker充当的群服务的负载均衡器。使用路由网格的服务以虚拟IP(VIP)模式运行。即使在每个节点上运行的服务(通过--global
标志)也使用路由网格。使用路由网格时,无法保证哪个Docker节点服务客户端请求。
要绕过路由网格,可以使用DNS循环(DNSRR)模式启动服务,方法是将--endpoint-mode
标志设置为dnsrr
。必须在服务前运行自己的负载均衡器。Docker主机上的服务名称的DNS查询返回运行该服务的节点的IP地址列表。配置负载均衡器以使用此列表并平衡节点之间的流量。
单独的控制和数据流量
默认情况下,与群组管理相关的控制流量以及进出应用程序的流量都在同一网络上运行,尽管群集控制流量已加密。可以将Docker配置为使用单独的网络接口来处理两种不同类型的流量。当你初始化或者加入群,指定--advertise-addr
和--datapath-addr
分别。必须为加入群集的每个节点执行此操作。
覆盖网络上独立容器的操作
将独立容器连接到覆盖网络
该ingress
网络是创造无--attachable
标志,这意味着只有群服务可以使用它,而不是独立的容器。可以将独立容器连接到使用该--attachable
标志创建的用户定义的覆盖网络。这使得在不同Docker守护程序上运行的独立容器能够进行通信,而无需在各个Docker守护程序主机上设置路由。
发布端口
标志值 | 描述 |
---|---|
-p 8080:80 |
将容器中的TCP端口80映射到覆盖网络上的端口8080。 |
-p 8080:80/udp |
将容器中的UDP端口80映射到覆盖网络上的端口8080。 |
-p 8080:80/sctp |
将容器中的SCTP端口80映射到覆盖网络上的端口8080。 |
-p 8080:80/tcp -p 8080:80/udp |
将容器中的TCP端口80映射到覆盖网络上的TCP端口8080,并将容器中的UDP端口80映射到覆盖网络上的UDP端口8080。 |
容器发现
在大多数情况下,应该连接到服务名称,该名称是负载平衡的,并由支持该服务的所有容器(“任务”)处理。要获取支持该服务的所有任务的列表,请执行DNS查找tasks.<service-name>.
docker-覆盖网络的更多相关文章
- docker从零开始网络(三) overly(覆盖)网络
使用overly网络 该overlay网络驱动程序会创建多个docker进程主机之间的分布式网络.该网络位于(覆盖)特定于主机的网络之上,允许连接到它的容器(包括群集服务容器)安全地进行通信.Dock ...
- 2.docker的网络模式
本篇文章使用nginx:apline 镜像进行编辑. docker 版本基于 [root@master song]# docker version Client: Version: API vers ...
- 四、创建覆盖网络--Flannel
Flannel是 CoreOS 团队针对 Kubernetes 设计的一个覆盖网络(Overlay Network)工具,其目的在于帮助每一个使用 Kuberentes 的 CoreOS 主机拥有 ...
- Docker源码分析(八):Docker Container网络(下)
1.Docker Client配置容器网络模式 Docker目前支持4种网络模式,分别是bridge.host.container.none,Docker开发者可以根据自己的需求来确定最适合自己应用场 ...
- Docker源码分析(六):Docker Daemon网络
1. 前言 Docker作为一个开源的轻量级虚拟化容器引擎技术,已然给云计算领域带来了新的发展模式.Docker借助容器技术彻底释放了轻量级虚拟化技术的威力,让容器的伸缩.应用的运行都变得前所未有的方 ...
- docker从零开始网络(四 ) host网络
使用主机网络 如果host对容器使用网络驱动程序,则该容器的网络堆栈不会与Docker主机隔离.例如,如果您运行绑定到端口80 host的容器并使用网络,则容器的应用程序将在主机IP地址的端口80上可 ...
- docker从零开始网络(二)桥接网络
使用桥接网络 在网络方面,桥接网络是链路层设备,它在网络段之间转发流量.桥接网络可以是硬件设备或在主机内核中运行的软件设备. 就Docker而言,桥接网络使用软件桥接器,该软件桥接器允许连接到同一桥接 ...
- docker从零开始网络(一)概述
概述 预计阅读时间: 4分钟 Docker容器和服务如此强大的原因之一是您可以将它们连接在一起,或者将它们连接到非Docker工作负载.Docker容器和服务甚至不需要知道它们部署在Docker上,或 ...
- docker的网络(进阶)
overlay网络 overlay网络驱动程序会在多个docker守护程序(即多个主机上的docker守护程序)之间创建分布式网络.该网络(overlays)位于特定于主机的网络之上,允许连接到它的容 ...
- docker的网络(基础)
Docker的网络子系统是可插拔的,使用驱动程序.默认情况下存在多个驱动程序,并提供核心网络功能: bridge:docker默认的网络驱动.如果未指定驱动程序,则这是需要创建的网络类型.当应用程序在 ...
随机推荐
- Helm V3 新版本发布
Helm v3.0.0 Alpha 1 is coming! Helm 作为 Kubernetes 体系的包管理工具,已经逐渐成为了事实上的应用分发标准.根据 2018 年 CNCF 的一项云原生用户 ...
- 洛谷 2403 [SDOI2010] 所驼门王的宝藏
题目描述 在宽广的非洲荒漠中,生活着一群勤劳勇敢的羊驼家族.被族人恭称为“先知”的Alpaca L. Sotomon是这个家族的领袖,外人也称其为“所驼门王”.所驼门王毕生致力于维护家族的安定与和谐, ...
- Laravel 上传excel,读取并写入数据库 (实现自动建表、存记录值
<?php namespace App\Http\Controllers; use Illuminate\Foundation\Bus\DispatchesJobs; use Illuminat ...
- 从规则引擎到复杂事件处理(CEP)
Drools Fusion既是规则引擎,又可以作为CEP.除了事件定义和时间推理之外,对于引擎本身也会有一些不同的使用.主要体现在会话时钟.流模式.滑动窗口和对事件的内存管理. 会话时钟 由于事件的时 ...
- [转载]Eclipse luna tomcat 控制台 中文乱码
http://hahalzb.iteye.com/blog/709109 今天做S2SH集成的例子,所有该设置的地方都设置成了UTF-8,包括tomcat的配置文件server.xml.web.xml ...
- Codeforces 1100F(离线 or 在线)
传送门 •参考资料 [1]:在线线性基 [2]:离线线性基 [3]:离线线性基 •题意 给你 n 个数,m 次询问: 每次询问给定一个区间 $l,r$,求 $a_{l \cdots r}$ 异或的最大 ...
- java GUI(图形用户界面)
GUI Graphical User Interface(图形用户接口). 用图形的方式,来显示计算机操作的界面,这样更方便更直观. CLI Command line User Interface ( ...
- Mail.Ru Cup 2018 Round 2 C. Lucky Days(拓展欧几里得)
传送门 待参考资料: [1]:https://www.cnblogs.com/Patt/p/9941200.html •题意 a君,b君存在幸运周期: a君在第[ L1+k·t1,R1+k·t1]天为 ...
- 2018-2-13-git-合并两个仓库
title author date CreateTime categories git 合并两个仓库 lindexi 2018-2-13 17:23:3 +0800 2018-2-13 17:23:3 ...
- 关于redux和react-redux使用combinereducers之后的问题
最近用react写项目的时候,开始复习之前学过的redux,记录一下一些坑,以防忘记 我现在的redux目录下有这么些东西 首先是index.js import { createStore } fro ...