`
gaojingsong
  • 浏览: 1210075 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

【Docker 之Flannel 介绍】

阅读更多

Docker跨主机容器间网络通信实现的工具有Pipework、Flannel、Weave、Open vSwitch(虚拟交换机)、Calico实现跨主机容器间的通信。其中Pipework、Weave、Flannel,三者的区别是:

 

Weave的思路

在每个宿主机上布置一个特殊的route的容器,不同宿主机的route容器连接起来。 route拦截所有普通容器的ip请求,并通过udp包发送到其他宿主机上的普通容器。

这样在跨机的多个容器端看到的就是同一个扁平网络。 weave解决了网络问题,不过部署依然是单机的。

 

flannel的思路 

Flannel是CoreOS团队针对Kubernetes设计的一个网络规划服务,简单来说,它的功能是让集群中的不同节点主机创建的Docker容器都具有全集群唯一的虚拟IP地址。但在默认的Docker配置中,

每个节点上的Docker服务会分别负责所在节点容器的IP分配。这样导致的一个问题是,不同节点上容器可能获得相同的内外IP地址。并使这些容器之间能够之间通过IP地址相互找到,也就是相

互ping通。

 

Flannel的设计目的就是为集群中的所有节点重新规划IP地址的使用规则,从而使得不同节点上的容器能够获得"同属一个内网"且"不重复的"IP地址,并让属于不同节点上的容器能够直接通过内网IP通信。

 

Flannel实质上是一种"覆盖网络(overlay network)",即表示运行在一个网上的网(应用层网络),并不依靠ip地址来传递消息,而是采用一种映射机制,把ip地址和identifiers做映射来资源定位。也就

是将TCP数据包装在另一种网络包里面进行路由转发和通信,目前已经支持UDP、VxLAN、AWS VPC和GCE路由等数据转发方式。

 

原理是每个主机配置一个ip段和子网个数。例如,可以配置一个覆盖网络使用 10.100.0.0/16段,每个主机/24个子网。因此主机a可以接受10.100.5.0/24,主机B可以接受10.100.18.0/24的包。flannel使用etcd来维护分配的子网到实际的ip地址之间的映射。对于数据路径,flannel 使用udp来封装ip数据报,转发到远程主机。选择UDP作为转发协议是因为他能穿透防火墙。例如,AWS Classic无法转发IPoIP or GRE 网络包,是因为它的安全组仅仅支持TCP/UDP/ICMP。

 

flannel 使用etcd存储配置数据和子网分配信息。flannel 启动之后,后台进程首先检索配置和正在使用的子网列表,然后选择一个可用的子网,然后尝试去注册它。

etcd也存储这个每个主机对应的ip。flannel 使用etcd的watch机制监视/coreos.com/network/subnets下面所有元素的变化信息,并且根据他来维护一个路由表

 

 

pipework的思路

pipework是一个单机的工具,组合了brctl等工具,可以认为pipework解决的是宿主机上的设置容器的虚拟网卡、网桥、ip等,可以配合其他网络使用。

 

 

Flannel is a simple and easy way to configure a layer 3 network fabric designed for Kubernetes.

 

How it works

Flannel runs a small, single binary agent called flanneld on each host, and is responsible for allocating a subnet lease to each host out of a larger, preconfigured address space. Flannel uses either the Kubernetes API or etcd directly to store the network configuration, the allocated subnets, and any auxiliary data (such as the host's public IP). Packets are forwarded using one of several backend mechanisms including VXLAN and various cloud integrations.

 

Networking details

Platforms like Kubernetes assume that each container (pod) has a unique, routable IP inside the cluster. The advantage of this model is that it removes the port mapping complexities that come from sharing a single host IP.

 

Flannel is responsible for providing a layer 3 IPv4 network between multiple nodes in a cluster. Flannel does not control how containers are networked to the host, only how the traffic is transported between hosts. However, flannel does provide a CNI plugin for Kubernetes and a guidance on integrating with Docker.

 

Flannel is focused on networking. For network policy, other projects such as Calico can be used.

 

Getting started on Kubernetes

The easiest way to deploy flannel with Kubernetes is to use one of several deployment tools and distributions that network clusters with flannel by default. For example, CoreOS's Tectonic sets up flannel in the Kubernetes clusters it creates using the open source Tectonic Installer to drive the setup process.

 

Though not required, it's recommended that flannel uses the Kubernetes API as its backing store which avoids the need to deploy a discrete etcd cluster for flannel. This flannel mode is known as the kube subnet manager.

 

 

flannel是CoreOS提供用于解决Dokcer集群跨主机通讯的覆盖网络工具。它的主要思路是:预先留出一个网段,每个主机使用其中一部分,然后每个容器被分配不同的ip;让所有的容器认为大家在同一个直连的网络,底层通过UDP/VxLAN等进行报文的封装和转发。

 

 



 

一条网络报文从一个容器发送到另外一个容器的过程:

1、容器直接使用目标容器的ip访问,默认通过容器内部的eth0发送出去。

2、报文通过veth pair被发送到vethXXX。

3、vethXXX是直接连接到虚拟交换机docker0的,报文通过虚拟bridge docker0发送出去。

4、查找路由表,外部容器ip的报文都会转发到flannel0虚拟网卡,这是一个P2P的虚拟网卡,然后报文就被转发到监听在另一端的flanneld。

5、flanneld通过etcd维护了各个节点之间的路由表,把原来的报文UDP封装一层,通过配置的iface发送出去。

6、报文通过主机之间的网络找到目标主机。

7、报文继续往上,到传输层,交给监听在8285端口的flanneld程序处理。

8、数据被解包,然后发送给flannel0虚拟网卡。

9、查找路由表,发现对应容器的报文要交给docker0。

10、docker0找到连到自己的容器,把报文发送过去。

  • 大小: 75 KB
0
0
分享到:
评论

相关推荐

    Etcd + flannel + Docker 实现 docker 跨主机容器之间通讯 .pdf

    本文详细阐述了如何通过安装和配置etcd、flannel和Docker来实现跨主机的容器间通信。以下将详细梳理本文的知识点: 1. Docker容器技术: Docker 是一个开源的应用容器引擎,让开发者可以打包应用以及依赖包到一个...

    flannel-flannel-v0.25.1和flannel-flannel-cni-plugin-v1.4.1-flanne

    flannel-flannel-v0.25.1-amd64.tar.gz和flannel-flannel-cni-plugin-v1.4.1-flannel1-amd64.tar.gz k8s的flnannel网络插件docker镜像离线资源包

    Etcd flannel Docker 实现 docker 跨主机容器之间通讯

    `Etcd`、`Flannel` 和 `Docker` 是三个关键组件,它们协同工作,使得 Docker 容器可以在跨主机环境中相互通信。本篇文章将深入探讨这三个组件的作用以及如何实现跨主机的 Docker 容器通信。 首先,`Etcd` 是一个...

    kubernetes网络插件flannel

    镜像为docker.io/flannel/flannel:v0.25.6和docker.io/flannel/flannel-cni-plugin:v1.5.1-flannel2 错误“Error registering network: failed to acquire lease: node "master" pod cidr not assigned”解决方法,...

    Docker网络解决方案-Flannel部署记录(个人珍藏版)

    Flannel是CoreOS开发的一个轻量级网络解决方案,专为Kubernetes、Docker Swarm等容器编排系统设计,它旨在为跨主机的容器提供一个扁平化的网络环境。本文将深入探讨Docker网络解决方案——Flannel的部署过程。 首先...

    flanneld-v0.11.0-amd64.docker

    k8s.gcr.io/flannel:v0.11.0-amd64镜像tar包,使用 docker load --input flannel_v0.11.0-amd64.tar进行导入

    flannel-v0.11.0-linux-amd64.tar.gz插件所需yml和镜像.rar

    docker import flannel-v0.11.0-linux-amd64.tar.gz kubectl create -f kube-flannel.yml 查看安装是否成功 kubectl get pod -n kube-system 如果STATUS不是running则失败删除重装 kubectl delete -f kube-...

    k8s网络flannel镜像包

    k8s网络flannel镜像包 flannel_v0.23.0.tar flannel-cni-plugin_v1.2.0.tar 可直接使用docker load 到本地环境

    《Docker容器 利用Kubernates Flannel Cockpit和Atomic构建和部署》.pdf

    《Docker容器 利用Kubernates Flannel Cockpit和Atomic构建和部署》

    Flannel网络配置实战:Docker集群网络互联解决方案

    首先介绍了网络环境规划和软件准备步骤,然后逐步指导完成 Etcd 数据库和 Flannel 网络配置,并在两台 Docker 主机上部署服务,最终实现了 Docker 容器间的相互通信。文章还提供了详细的命令示例,确保读者可以按照...

    flannel.dockerimg

    flanneld-v0.12.0-amd64.docker 就是flannel的docker镜像, docker image load -i flannel.dockerimg

    flannel插件v0.23.0

    flannel是Kubernetes集群网络中的一个关键组件,用于在各个节点之间提供网络连接。v0.23.0是flannel的一个版本更新,它可能包含了性能优化、bug修复或者新的特性。flannel的主要任务是在Pod之间创建一个扁平的网络...

    镜像flannel/flannel:v0.24.0

    k8s搭建过程中需要的插件flannel镜像

    flannel网络配置

    - 配置Docker:Flannel需要与Docker进行集成,通过设置环境变量或修改Docker配置文件,使Docker使用Flannel提供的网络。 **4. flanneld** flanneld是Flannel的主进程,负责在每个节点上运行。它监听etcd以获取网络...

    flannel v1.2.0镜像以及yaml文件

    在Kubernetes集群中,网络通信是至关重要的,而Flannel就是一种被广泛使用的网络插件,它为集群内的Pod提供跨节点的网络通信能力。Flannel v1.2.0是其一个稳定版本,提供了高效且可靠的网络解决方案。在这个主题中,...

    k8s flanneld-v0.13.0-amd64.docker

    k8s 网络组件,使用 docker load < flannelxxx.docker 完成该docker 镜像的安装。

    docker容器技术文档

    Docker 容器技术文档 Docker 容器技术是一种轻量级的操作系统虚拟化技术,能够在隔离的环境中运行多个应用程序。下面是 Docker 容器技术的详细知识点: 安装 Docker 在安装 Docker 之前,需要先安装操作系统。...

    flannel-v0.11.0-amd64.tar

    flannel:v0.11.0-amd64.tar镜像tar包,使用 docker load -i flannel-v0.11.0-amd64.tar进行导入

    docker.io/grafana/grafana:10.4.2

    离线部署grafana 10.4.2所需的镜像包

Global site tag (gtag.js) - Google Analytics