Flannel is a simple and easy way to configure a layer 3 network fabric designed for Kubernetes.
Flannel实质上是一种“覆盖网络(overlay network)”,也就是将TCP数据包装在另一种网络包里面进行路由转发和通信,目前已经支持UDP、VxLAN、AWS VPC和GCE路由等数据转发方式。
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.
Flannel是一种基于overlay网络的跨主机容器网络解决方案,也就是将TCP数据包封装在另一种网络包里面进行路由转发和通信,
Flannel是CoreOS开发,专门用于docker多机互联的一个工具,让集群中的不同节点主机创建的容器都具有全集群唯一的虚拟ip地址
Flannel使用go语言编
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.
flannel架构介绍
flannel默认使用8285端口作为UDP
封装报文的端口,VxLan使用8472端口。
那么一条网络报文是怎么从一个容器发送到另外一个容器的呢?
- 容器直接使用目标容器的ip访问,默认通过容器内部的eth0发送出去。
- 报文通过
veth pair
被发送到vethXXX
。 -
vethXXX
是直接连接到虚拟交换机docker0
的,报文通过虚拟bridge docker0
发送出去。 - 查找路由表,外部容器ip的报文都会转发到
flannel0
虚拟网卡,这是一个P2P
的虚拟网卡,然后报文就被转发到监听在另一端的flanneld
。 -
flanneld
通过etcd
维护了各个节点之间的路由表,把原来的报文UDP
封装一层,通过配置的iface
发送出去。 - 报文通过主机之间的网络找到目标主机。
- 报文继续往上,到传输层,交给监听在8285端口的
flanneld
程序处理。 - 数据被解包,然后发送给
flannel0
虚拟网卡。 - 查找路由表,发现对应容器的报文要交给
docker0
。 -
docker0
找到连到自己的容器,把报文发送过去。
相关推荐
这本书籍章节深入浅出地介绍了Kubernetes网络的基础概念,包括服务发现、网络模型以及Pod间的通信机制。它会解释为何Kubernetes需要像Flannel这样的网络插件,以及Flannel如何实现Pod的网络隔离和跨节点通信。书中...
下面将详细介绍Flannel及其在Kubernetes中的作用、工作原理和配置方法。 **Flannel简介** Flannel是由CoreOS团队开发的,旨在解决Kubernetes集群中Pod间的网络通信问题。在Kubernetes中,每个Pod都有一个全局唯一的...
这次的分享内容将从Flannel的介绍、工作原理及安装和配置三方面来介绍这个工具的使用方法。 Flannel通过给每台宿主机分配一个子网的方式为容器提供虚拟网络,它基于Linux TUN/TAP,使用UDP封装IP包来创建overlay网络...
4、Flannel介绍 Flannel是k8s的一种网络插件,用于实现跨节点的Pod间通信。它为每个节点分配一个子网,并在节点间建立隧道,使得Pod可以在集群内部自由通信。Flannel提供了多种网络后端,如VXLAN、UDP等,以适应不同...
这次的分享内容将从Flannel的介绍、工作原理及安装和配置三方面来介绍这个工具的使用方法。 Flannel通过给每台宿主机分配一个子网的方式为容器提供虚拟网络,它基于Linux TUN/TAP,使用UDP封装IP包来创建overlay网络...
其次,`README.md` 文件通常包含了项目的详细介绍、安装指南、配置参数以及常见问题解答。在这个压缩包中,README.md可能会详细解释如何在Kubernetes集群中部署和配置Flannel,包括设置环境变量、创建必要的kube-...
20200422 Rancher Labs解决方案介绍-v1.1.pdf
**背景介绍:** 在企业级应用中,私有云的部署变得越来越常见。为了在私有云环境中运行Kubernetes+Docker集群,首先需要构建一个满足Kubernetes需求的网络环境。Kubernetes假设所有Pod位于一个可以直接互连的扁平...
书中还探讨了使用Flannel和Calico作为网络解决方案,介绍了它们的架构、安装和如何使用BGP或IP-in-IP技术进行路由公告。此外,还讨论了如何将Flannel和Calico结合使用(即Canal方案),以及如何在Kubernetes中使用...
- **Flannel**:使用 UDP 或其他传输方式进行跨主机通信,每个主机有一个 CIDR,容器间可以直接通信。但存在 IP 浪费和对外服务需要映射到主机 IP 的问题。 - **Calico**:通过 Felix(Calico Agent)实现高度灵活的...
本教程将详细介绍如何通过二进制方式安装Kubernetes,以便于你亲自操作并理解其背后的流程。我们将涉及到以下几个关键知识点: 1. **Kubernetes二进制安装**: 二进制安装是直接下载Kubernetes组件的可执行文件,并...
整体而言,Kubernetes的介绍与安装涵盖了从概念理解到实践操作的完整流程,旨在帮助用户从零开始构建和管理一个可扩展的容器化应用程序平台。随着Kubernetes在容器编排领域的广泛使用,它已经成为了云原生应用开发和...
本文将详细介绍如何在 CentOS 7.5 上搭建 K8S v1.11.0 集群。 #### 二、准备工作 在正式安装 K8S 之前,需要做一些准备工作,包括安装 Docker-CE 和 Kubeadm,并进行必要的系统配置。 ##### 1.1 安装 Docker-CE ...
在本篇文章中,将详细介绍Kubernetes集群使用kubeadm工具部署安装的过程,内容包括kube-proxy开启ipvs的前置条件,Docker的安装,以及kubeadm的主从配置方法。 首先,要开启kube-proxy的ipvs模式,需要满足一定的...
本文将详细介绍Log-Pilot的工作原理、配置和使用方法。 **1. Log-Pilot简介** Log-Pilot是阿里云为了应对Kubernetes集群中日志管理的挑战而开发的开源项目。它提供了一种灵活且可扩展的方式来收集和处理容器日志,...
容器网络介绍 在现代软件开发领域,容器技术已经成为部署和管理应用程序的标准工具,尤其是Docker和Kubernetes等平台的崛起。容器网络是容器技术的重要组成部分,它为容器提供了一个高效、灵活和可移植的网络环境。...
网盘文件永久链接1_Kubernetes课程介绍.mp42_What is Kubernetes.mp43_Kubernetes整体架构.mp44_Kubernetes环境搭建方式.mp45_Kubeadm部署Kubernetes.mp46_Kubeadm部署Kubernetes环境准备.mp47_Kubeadm部署...
- **Master/Node** (172.20.0.113): 包含`kube-apiserver`、`kube-controller-manager`、`kube-scheduler`、`kubelet`、`kube-proxy`、`etcd`以及`flannel`。 - **Node** (172.20.0.114 和 172.20.0.115): 每个节点...
CNI网络介绍-Flannel: Flannel实质上是一种“覆盖网络(overlay network)”,也就是将TCP数据包装在另一种网络包里面进行路由转发和通信,目前已经支持UDP、VxLAN、Host-GW等数据转发方式。 CNI网络介绍-Calico: ...
该文章介绍以手动的方式,搭建Kubernetes容器云集群环境,所谓手动是逐步通过进程的方式来搭建。现在的Kubernetes搭建都很方便,主要通过Kubeadm结合Kubernetes的镜像包来搭建部署,但对很多新手来说,里面细节的...