[Kuberentes][Kubernetes容器网络3]kubernetes 纯三层网络模型

目录

  • 解读 Kubernetes 三层网络方案

    • Flannel Host Gateway 模式
    • Calico 项目
      • Calico 项目的架构
      • 核心流程
      • Route Reflector模式
    • 总结

解读 Kubernetes 三层网络方案



除了前面说的 VXLAN 这种二层虚拟可扩展局域网方案之外,还有纯三层网络方案。

Flannel Host Gateway 模式

Flannel 的 Host Gateway 模式:

Flannel在宿主机上创建如下路由规则:

$ ip route
...
10.244.1.0/24 via 10.168.0.3 dev eth0

很容易理解,host-gw 模式下的工作原理,其实就是将每个 Flannel 子网的下一跳地址,设置成了该子网所在宿主机的IP地址。

这样根据容器 IP 找到容器所在子网的 IP后,就可以直接在宿主机上找到对应的主机 IP。将这台主机作为目标子网的网关。

主机和子网的对应关系保存在ETCD中。

因此,host-gw模式要求集群所有宿主机之间是二层连通的。

Calico 项目

与 Flannel host-gw 模式原理相同

宿主机上添加如下路由规则

<目的容器IP地址段> via <网关的IP地址> dev eth0

区别:Calico 项目没有使用 ETCD 来保存容器所在子网和主机 IP 的对应关系,而是使用了 BGP(Border Gateway Protocol, 边界网关协议)。它是一个 Linux 内核原生就支持的、专门用在大规模数据中心里维护不同的“自治系统”之间路由信息的、无中心的路由协议

负责将两个自治子网连接起来的路由器被称为边界网关。如果连接的自治网络很多,那么无法手动配置路由器,需要使用 BGP 来自动对边界网关的路由表进行配置和维护。

在使用了 BGP 之后,你可以认为,在每个边界网关上都会运行着一个小程序,它们会将各自的路由表信息,通过 TCP 传输给其他的边界网关。而其他边界网关上的这个小程序,则会对收到的这些数据进行分析,然后将需要的信息添加到自己的路由表里。

所谓 BGP,就是在大规模网络中实现节点路由信息共享的一种协议

Calico 项目的架构

组成:

  1. Calico 的 CNI 插件。这是 Calico 与 Kubernetes 对接的部分。
  2. Felix。一个Daemonset,负责在宿主机上插入路由规则(即写入Linux内核中的FIB转发信息库),以及维护 Calico 所需要网络设备的
  3. BIRD。BGP 的客户端,负责在集群里分发路由规则信息。

除了对路由信息的维护方式之外,Calico 项目与 Flannel 的 host-gw 模式的另一个不同之处,就是它不会在宿主机上创建任何网桥设备

Calico 的 CNI 网络插件为每个容器设置一个 Veth Pair 设备,然后把其中一端放置在宿主机上。

由于没有设置网桥,所以 Calico 的 CNI 插件还需要在宿主机上设置从宿主机到容器的路由规则:

10.233.2.3 dev cali5863f3 scope link

即:发往 10.233.2.3 的 IP 包,应该进入 cali5863f3 设备。

核心流程

有了这样的 Veth Pair 设备之后,容器发出的 IP 包就会经过 Veth Pair 设备出现在宿主机上。然后,宿主机网络栈就会根据路由规则的下一跳 IP 地址,把它们转发给正确的网关。接下来的流程就跟 Flannel host-gw 模式完全一致了。其中,这里最核心的“下一跳”路由规则,就是由 Calico 的 Felix 进程负责维护的。这些路由规则信息,则是通过 BGP Client 也就是 BIRD 组件,使用 BGP 协议传输而来的。

而这些通过 BGP 协议传输的消息,你可以简单地理解为如下格式:

[BGP消息]
我是宿主机192.168.1.3
10.233.2.0/24网段的容器都在我这里
这些容器的下一跳地址是我

Calico 将所有的宿主机当作了边界路由器

Calico 的默认模式中,每台宿主机上的 BGP 客户端都需要和其他所有 BGP 客户端通信交换路由信息,这被称为 Node-to-Node Mesh 模式。该模式推荐在节点少于100的集群中使用,在更大规模中,需要使用 Route Reflector 模式。

Route Reflector模式

使用中间节点来跟所有节点建立 BGP 连接。其他节点只需要跟中间节点通信。

总结

纯三层网络的模型其实要比 Flannel VXLAN 模式和 UDP 模式更容易理解。核心思想就是把宿主机当作一个个边界路由器,通过 BGP 来设定宿主机上的路由规则。

原文地址:https://www.cnblogs.com/hezhiqiangTS/p/11867108.html

时间: 2024-10-09 21:07:19

[Kuberentes][Kubernetes容器网络3]kubernetes 纯三层网络模型的相关文章

[Kubernetes][Kubernetes容器网络2]深入解析容器跨主机网络

目录 深入解析容器跨主机网络 Flannel Flannel UDP模式基本原理 UDP模式的缺陷 Flannel VXLAN 模式 深入解析容器跨主机网络 在Docker默认配置下,不同宿主机上的容器通过IP地址是无法相互通信的. 因此社区出现了很多用于解决容器跨主机通信问题的方案. Flannel Flannel 支持三种后端实现: VXLAN host-gw UDP 先以 UDP 模式为例 Flannel UDP模式基本原理 假设有两台宿主机: Node1: container-1,IP

容器网络插件那么多,博云为什么基于OVS深度自研?

背景 从2015年开始,博云开始基于Kubernetes和容器帮助客户交付应用管理平台.在开始阶段,博云选择了业界使用度非常广泛且成熟稳定的calico作为默认的网络方案并在calico方面积累了大量生产实践经验.随着容器云平台的落地越来越多,关于容器云平台网络部分的建设要求也越来越高,我们和多家客户进行了深入沟通,虽然需求有所差异,但总结下来主要的诉求包括: 从运维管理角度,更倾向于采用二层网络模型:在主流的二层组网的数据中心中,受限于硬件能力.运维人员的能力和管理复杂度等需求,大部分客户不希

Kubernetes &amp; Docker 容器网络终极之战(十四)

目录 一.单主机 Docker 网络通信 1.1.host 模式 1.2 Bridge 模式 1.3 Container 模式 1.4.None 模式 二.跨主机 Docker 网络通信分类 2.1 通信方案 2.2.容器网络规范 2.3.网络通信实现方案 2.4.Kubernetes 网络模型 三.跨主机 Docker 网络 3.1 Flannel 网络方案 3.2.Calico 网络方案 3.3.Canal 网络方案 3.4.Docker overlay 网络方案 3.5.Docker ma

从 Kubernetes 谈容器网络

Pod 首先,Kubernetes 中的基本单元是 Pod,而非 Docker 容器. Pod 是一组共享了下面资源的容器: 进程命名空间 网络命名空间 IPC 命名空间 UTS 命名空间 简单的讲,一个 Pod 是一个小型的"虚拟机",里面运行若干个不同的进程,每个进程实际上就是一个容器. Kubernetes 要干的事情是要把这些 Pod 给互相连接起来,是不是联想到了什么了? 设计理念 其实 Docker 默认采用 NAT 的方式已经组成了简单的网络了.但Kubernetes 认

Kubernetes &amp; Docker 容器网络终极之战

与 Docker 默认的网络模型不同,Kubernetes 形成了一套自己的网络模型,该网络模型更加适应传统的网络模式,应用能够平滑的从非容器环境迁移到 Kubernetes 环境中. 自从 Docker 容器出现,容器的网络通信一直是众人关注的焦点,而容器的网络方案又可以分为两大部分: 单主机的容器间通信: 跨主机的容器间通信. 一.单主机 Docker 网络通信 利用 Net Namespace 可以为 Docker 容器创建隔离的网络环境,容器具有完全独立的网络栈,与宿主机隔离.也可以使

大型网站技术-3. 容器Docker与kubernetes

大型网站技术基石篇-容器Docker与kubernetes Docker和Kubernetes的关系就如Xen与OpenStack. Docker是一种容器技术,和Hypervisor(KVM/Xen这类)不同的是,Docker不会提供一整个操作系统,他能提供隔离的程序运行环境.对一个应用来说这已经够了. Kubernetes是Google的一个开源容器管理项目,他能利用Docker/其他技术部署/管理容器集群.   Docker          项目地址:https://www.docker

10分钟快速搭建Kubernetes容器集群平台

官方提供Kubernetes部署3种方式 minikube Minikube是一个工具,可以在本地快速运行一个单点的Kubernetes,尝试Kubernetes或日常开发的用户使用.不能用于生产环境. 官方文档:https://kubernetes.io/docs/setup/minikube/ kubeadm kubeadm可帮助你快速部署一套kubernetes集群.kubeadm设计目的为新用户开始尝试kubernetes提供一种简单的方法.目前是Beta版. 官方文档:https://

Docker Kubernetes Service 网络服务代理模式详解

Docker Kubernetes  Service 网络服务代理模式详解 Service service是实现kubernetes网络通信的一个服务 主要功能:负载均衡.网络规则分布到具体pod 注:kubernetes deployment服务分配服务器负载均衡VIP只能NODE节点单独访问,这里需要外网用户可以放问到容器内,这里就需要用到service. 网络代理模式 kube-proxy v1.0中只支持userspace模式,在v1.1中,添加了iptables代理,在v1.2开始ip

云宏大讲坛 | 容器编排引擎Kubernetes的那些事儿

原创:Higx (Vol. 040) 云宏大讲坛Vol. 040 在不久前<容器的前世今生>中,追求技术前沿的小伙伴对于容器技术的发展历史已经抓住了脉络.但对于容器编排引擎Kubernetes的概念,则了解得较为模糊.那么,Kubernetes究竟是什么? Kubernetes的希腊语意为"舵手",缩写为k8s.正所谓"大海航行靠舵手,容器运行靠编排",Kubernetes的主要功能就是调度控制容器的一切.目前,Kubernetes已经成为容器编排调度的