kubernetes网络之—Calico原理解读

kubernetes网络之—Calico原理解读nbsp Calico 简单简介 Calico 是一个纯三层的协议 为 OpenStack 虚机和 Docker 容器提供多主机间通信 Calico 不使用重叠网络比如 flannel 和 libnetwork 重叠网络驱动 它是一个纯三层的方法 使用虚拟路由代替虚拟交换 每一台虚拟路由通过 BGP 协议传播可达信息 路由 到剩余数据中心 nbsp Calico 架构 Calico 是一个三层的数据中心网络方案 而且

 

Calico简单简介

Calico是一个纯三层的协议,为OpenStack虚机和Docker容器提供多主机间通信。Calico不使用重叠网络比如flannel和libnetwork重叠网络驱动, 它是一个纯三层的方法,使用虚拟路由代替虚拟交换,每一台虚拟路由通过BGP协议传播可达信息(路由)到剩余数据中心。

 

Calico 架构

Calico 是一个三层的数据中心网络方案,而且方便集成 OpenStack 这种 IaaS 云架构,能够提供高效可控的 VM、容器、裸机之间的通信。

Bluemix.png

结合上面这张图,我们来过一遍 Calico 的核心组件: Felix,Calico agent,跑在每台需要运行 workload 的节点上,主要负责配置路由及 ACLs 等信息来确保 endpoint 的连通状态; etcd,分布式键值存储,主要负责网络元数据一致性,确保 Calico 网络状态的准确性; BGP Client(BIRD), 主要负责把 Felix 写入 kernel 的路由信息分发到当前 Calico 网络,确保 workload 间的通信的有效性; BGP Route Reflector(BIRD), 大规模部署时使用,摒弃所有节点互联的 mesh 模式,通过一个或者多个BGP Route Reflector来完成集中式的路由分发; 通过将整个互联网的可扩展 IP 网络原则压缩到数据中心级别,Calico 在每一个计算节点利用Linux kernel实现了一个高效的vRouter来负责数据转发而每个vRouter通过BGP 协议负责把自己上运行的 workload 的路由信息像整个 Calico 网络内传播 - 小规模部署可以直接互联,大规模下可通过指定的 BGP route reflector 来完成。 这样保证最终所有的 workload 之间的数据流量都是通过 IP 包的方式完成互联的。

 

Calico原理

11.png

Calico 节点组网可以直接利用数据中心的网络结构(支持 L2 或者 L3),不需要额外的 NAT,隧道或者 VXLAN overlay network。

Bluemix.png

  

如上图所示,这样保证这个方案的简单可控,而且没有封包解包,节约 CPU 计算资源的同时,提高了整个网络的性能。

此外,Calico 基于 iptables 还提供了丰富而灵活的网络 policy, 保证通过各个节点上的 ACLs 来提供 workload 的多租户隔离、安全组以及其他可达性限制等功能。

11.png

Bluemix.png

Calico网络方式(两种)
1)IPIP
从字面来理解,就是把一个IP数据包又套在一个IP包里,即把 IP 层封装到 IP 层的一个 tunnel,看起来似乎是浪费,实则不然。它的作用其实基本上就相当于一个基于IP层的网桥!一般来说,普通的网桥是基于mac层的,根本不需 IP,而这个 ipip 则是通过两端的路由做一个 tunnel,把两个本来不通的网络通过点对点连接起来。ipip 的源代码在内核 net/ipv4/ipip.c 中可以找到。




2)BGP
边界网关协议(Border Gateway Protocol, BGP)是互联网上一个核心的去中心化自治路由协议。它通过维护IP路由表或‘前缀’表来实现自治系统(AS)之间的可达性,属于矢量路由协议。BGP不使用传统的内部网关协议(IGP)的指标,而使用基于路径、网络策略或规则集来决定路由。因此,它更适合被称为矢量性协议,而不是路由协议。BGP,通俗的讲就是讲接入到机房的多条线路(如电信、联通、移动等)融合为一体,实现多线单IP,BGP 机房的优点:服务器只需要设置一个IP地址,最佳访问路由是由网络上的骨干路由器根据路由跳数与其它技术指标来确定的,不会占用服务器的任何系统。

 

每个主机上都部署了calico/node作为虚拟路由器,并且可以通过calico将宿主机组织成任意的拓扑集群。当集群中的容器需要与外界通信时, 就可以通过BGP协议将网关物理路由器加入到集群中,使外界可以直接访问容器IP,而不需要做任何NAT之类的复杂操作。 当容器通过calico进行跨主机通信时,其网络通信模型如下图所示:

Bluemix.png

从上图可以看出,当容器创建时,calico为容器生成veth pair,一端作为容器网卡加入到容器的网络命名空间,并设置IP和掩码,一端直接暴露在宿主机上, 并通过设置路由规则,将容器IP暴露到宿主机的通信路由上。于此同时,calico为每个主机分配了一段子网作为容器可分配的IP范围,这样就可以根据子网的 CIDR为每个主机生成比较固定的路由规则。 当容器需要跨主机通信时,主要经过下面的简单步骤: 1)容器流量通过veth pair到达宿主机的网络命名空间上。 2)根据容器要访问的IP所在的子网CIDR和主机上的路由规则,找到下一跳要到达的宿主机IP。 3)流量到达下一跳的宿主机后,根据当前宿主机上的路由规则,直接到达对端容器的veth pair插在宿主机的一端,最终进入容器。 从上面的通信过程来看,跨主机通信时,整个通信路径完全没有使用NAT或者UDP封装,性能上的损耗确实比较低。但正式由于calico的通信机制是完全基于三层的,这种机制也带来了一些缺陷,例如: 1)calico目前只支持TCP、UDP、ICMP、ICMPv6协议,如果使用其他四层协议(例如NetBIOS协议),建议使用weave、原生overlay等其他overlay网络实现。 2)基于三层实现通信,在二层上没有任何加密包装,因此只能在私有的可靠网络上使用。 3)流量隔离基于iptables实现,并且从etcd中获取需要生成的隔离规则,有一些性能上的隐患。

使用IPIP模式后的路由如下:

node1:

kubernetes网络之---Calico原理解读

 master1:

kubernetes网络之---Calico原理解读

此模式还会在宿主机上生成虚拟网卡tunnel

node1:

kubernetes网络之---Calico原理解读

master1:

kubernetes网络之---Calico原理解读

如此,在node1上能ping 通master1的pod。两个宿主机通过这个tunnel进行通信,就像Linux的网桥一样。

kubernetes网络之---Calico原理解读

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/214245.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午4:39
下一篇 2026年3月18日 下午4:39


相关推荐

  • 函数实现判断素数并调用函数输出100以内所有素数

    函数实现判断素数并调用函数输出100以内所有素数文件名称 2012 4 cpp 作者 胡颖 完成日期 2017 年 3 月 13 日 输入描述 输入整数 m 问题描述 判断整数 m 是否为素数 调用函数输出 100 以内的所有素数 程序输出 输出 m 是否为素数及 100 以内的素数 问题分析 构造函数判别素数 算法设计 略 include includeintma

    2026年3月16日
    2
  • serverTimezone=UTC的那些坑

    serverTimezone=UTC的那些坑serverTimezo UTC 的那些坑 UTC 坑 UTC 首先 介绍一下什么是 UTC UTC 简称世界统一时间 跟北京时间相比 比北京早 8 个小时 也就是说 北京 2020 年 3 月 20 日 18 点的时候 UTC 时间为 2020 年 3 月 20 日 10 点坑如果你用编译器连接数据库 定义了 serverTimezo UTC 那么在你编译器上执行的 SQL 语句 会先以 UTC 时区进行存储 发送

    2026年3月26日
    2
  • Hybrid开发框架一、Weex

    Hybrid开发框架一、Weex前言最近开始试水Weex开发,使用这么长一段时间,感觉写Weex还是非常方便的。作为一个Android开发,免不了要追查一下weex的sdk源码。今天,就以WeexSDKforAndroid为例,分析SDK的认识WeexSDK源码https://github.com/alibaba/weex/tree/dev/android整体分析下拉,按照js文件的渲染过程,绘制出了下面…

    2026年2月15日
    7
  • 计算矩阵的欧式距离

    计算矩阵的欧式距离对于 kNN 算法 难点在于计算测试集中每一样本到训练集中每一样本的欧氏距离 即计算两个矩阵之间的欧氏距离 现就计算欧式距离提出三种方法 1 两层循环分别对训练集和测试集中的数据进行循环遍历 计算每两个样本之间的欧式距离 此算法没有经过任何优化 importnumpya 1 np array 1 2 3 4 5 6

    2026年3月16日
    2
  • Pycharm的terminal闪退问题解决

    Pycharm的terminal闪退问题解决TOCPycharm 的 terminal 闪退 File gt setting gt Tools gt Terminal gt Shellpath 把 Shellpath 修改为 cmd exe

    2026年3月26日
    2
  • Java证书工具keytool用法总结

    Java证书工具keytool用法总结Keytool 简单介绍 keytool 是个密钥和证书管理工具 它使用户能够管理自己的公钥 私钥对及相关证书 用于 通过数字签名 自我认证 用户向别的用户 服务认证自己 或数据完整性以及认证服务 在 JDK nbsp 1 4 以后的版本中都包含了这一工具 它的位置为 JAVA HOME bin keytool exe keytool 用法说明使用 keytool 工具时可以使用如下命令 各个 JDK 版本

    2026年3月19日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号