Docker跨主机网络-overlay

一、前言Docker网络

 

1、单 Docker Host 容器通信网络方案

none、host、bridge 和 joined 容器

2、跨主机容器间通信网络方案

A、Docker 原生 Network 的 overlay 和 macvlan

B、第三方方案常用的有 flannel、weave 和 calico

N方案如何与 Docker 集成

利用: libnetwork 以及 CNM

2.1、libnetwork & CNM

libnetwork 是 Docker 容器网络库

Container Network Model (CNM)是libnetwork的核心,对容器网络抽象化,由以下三类组件组成:

Sandbox

Sandbox 是容器的网络栈,包含容器的 interface、路由表和 DNS 设置

Linux Network Namespace 是 Sandbox 的标准实现

Sandbox 可以包含来自不同 Network 的 Endpoint

Endpoint

Endpoint 作用是将 Sandbox 接入 Network

Endpoint 典型实现是 veth pair

1个 Endpoint 只能属于一个网络,且只能属于一个 Sandbox

Network

Network 包含一组 Endpoint

同1个 Network 的 Endpoint 可直接通信

Network 的实现可以是 Linux Bridge、VLAN 等

CNM 示例:

如上图所示:

2个容器,1个容器1个 Sandbox,每个 Sandbox 都有1个 Endpoint 连接到 Network 1,第2个 Sandbox 还有1个 Endpoint 是接入到了 Network 2

libnetwork CNM 定义了 Docker Container的网络模型,按照该模型开发出的 driver 能与 docker daemon 协同工作,实现Container Network

Docker 原生的 driver 包括 none、bridge、overlay 和 macvlan

第三方 driver 包括 flannel、weave、calico 等

 

二、Docker Overlay Network 环境

Docker 提供了 overlay driver,可创建基于 VxLAN 的 overlay 网络

VxLAN 将二层数据封装到 UDP 进行传输,VxLAN 提供与 VLAN 相同的以太网二层服务,并且拥有更强的扩展性和灵活性

什么是overlay网络

overlay网络用于连接不同机器上的docker容器,允许不同机器上的容器相互通信,同时支持对消息进行加密,当我们初始化一个swarm或是加入到一个swarm中时,在docker主机上会出现两种网络:

第一种、称为ingress的overlay网络

用于传递集群服务的控制或是数据消息,若在创建swarm服务时没有指定连接用户自定义的overlay网络,将会加入到默认的ingress网络

第二种、名为docker_gwbridge桥接网络

docker_gwbridge桥接网络会连接swarm中所有独立的docker系统进程

可以使用docker network create创建自定义的overlay网络,容器以及服务可以加入多个网络,只有同一网络中的容器可以相互交换信息,可以将单一容器或是swarm服务连接到overlay网络中,但是两者在overlay网络中的行为会有所不同,接下来会描述两者在overlay网络中的共同行为以及不同行为

注意事项:

如果想要连接到overlay网络,请确保连接前下列端口没有服务,并且服务器防火墙要允许下列端口通过:

TCP端口2377,用于集群管理信息的交流

TCP、UDP端口7946用于集群中节点的交流

UDP端口4789用于overlay网络中数据报的发送与接收

1、搭配key-value 数据库

Docerk overlay 网络需要1个 key-value 数据库保存网络状态信息,包括 Network、Endpoint、IP 等

Consul、Etcd 和 ZooKeeper 都是 Docker 支持的 key-vlaue 软件,此处使用 Consul

2、环境描述

使用docker-machine 创建的实验环境

  1. 跨主机的2台Docker 主机

Docker 主机 host02(192.168.233.144)和 host03(192.168.233.145)上实践各种跨主机网络方案

B、部署组件

主机 docker-centos (192.168.233.143) 上部署支持的组件,如: Consul

简单方式--容器方式运行 Consul

Consul可以用来实现分布式系统的服务发现与配置,它是HashiCorp公司推出的一款实用开源工具,支持Linux等平台。Consul是分布式的、高可用的、可横向扩展的。

Consul具备的特性

服务发现: Consul提供了通过DNS或者HTTP接口的方式来注册服务和发现服务。一些外部的服务通过Consul很容易的找到它所依赖的服务。

健康检测: Consul的Client提供了健康检查的机制,可以通过用来避免流量被转发到有故障的服务上。

Key/Value存储: 应用程序可以根据自己的需要使用Consul提供的Key/Value存储。Consul提供了简单易用的HTTP接口,结合其他工具可以实现动态配置、功能标记、领袖选举等等功能。

多数据中心: Consul支持开箱即用的多数据中心. 这意味着用户不需要担心需要建立额外的抽象层让业务扩展到多个区域。

执行指令:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值