概念

了解 Calico 支持的不同网络选项,以便可以根据需要选择最佳选项。
Calico 灵活的模块化架构支持广泛的部署选项,因此您可以选择适合您特定环境和需求的最佳网络方法。这包括使用各种 CNI 和 IPAM 插件以及底层网络类型在非覆盖或覆盖模式下运行的能力,有或没有 BGP。

Kubernetes 网络基础知识

Kubernetes 网络模型定义了一个“扁平”网络,其中:

  • 每个 pod 都有自己的 IP 地址。
  • 任何节点上的 Pod 都可以在没有 NAT 的情况下与所有其他节点上的所有 Pod 通信。

这创建了一个干净的、向后兼容的模型,从端口分配、命名、服务发现、负载平衡、应用程序配置和迁移的角度来看,Pod 可以像 VM 或物理主机一样对待。可以使用网络策略来定义网络分段,以限制这些基本网络功能内的流量。

在这个模型中,有很大的灵活性来支持不同的网络方法和环境。网络具体如何实施的细节取决于所使用的 CNI、网络和云提供商插件的组合。

CNI插件

CNI(容器网络接口)是一个标准 API,它允许不同的网络实现插入 Kubernetes。每当创建或销毁 Pod 时,Kubernetes 都会调用 API。有两种类型的 CNI 插件:

  • CNI 网络插件:负责向/从 Kubernetes pod 网络添加或删除 pod。这包括创建/删除每个 Pod 的网络接口以及将其连接/断开连接到网络实现的其余部分。
  • CNI IPAM 插件:负责在创建或删除 Pod 时为其分配和释放 IP 地址。根据插件的不同,这可能包括为每个节点分配一个或多个 IP 地址 (CIDR) 范围,或从底层公共云网络获取 IP 地址以分配给 pod。

云提供商集成

Kubernetes 云提供商集成是特定于云的控制器,可以配置底层云网络以帮助提供 Kubernetes 网络。根据云提供商的不同,这可能包括自动将路由编程到底层云网络中,以便它本机知道如何路由 pod 流量。

Kubenet

Kubenet 是一个内置于 Kubernetes 中的极其基础的网络插件。它不实现跨节点联网或网络策略。它通常与云提供商集成一起使用,该集成在云提供商网络中设置路由以在节点之间或在单节点环境中进行通信。 Kubenet 与 Calico 不兼容。

覆盖网络

覆盖网络是分层在另一个网络之上的网络。在 Kubernetes 的上下文中,覆盖网络可用于处理底层网络之上的节点之间的 pod 到 pod 流量,该网络不知道 pod IP 地址或哪些 pod 正在哪些节点上运行。覆盖网络的工作原理是将底层网络不知道如何处理的网络数据包(例如使用 pod IP 地址)封装在底层网络知道如何处理的外部数据包中(例如节点 IP 地址)。用于封装的两种常见网络协议是 VXLAN 和 IP-in-IP

  • 使用覆盖网络的主要优点是:减少了对底层网络的依赖。例如,您可以在几乎任何底层网络之上运行 VXLAN 覆盖,而无需与底层网络集成或对底层网络进行任何更改。
  • 使用覆盖网络的主要缺点是:轻微的性能影响。封装数据包的过程占用少量 CPU,数据包中用于编码封装(VXLAN 或 IP-in-IP 标头)的额外字节减少了可以发送的内部数据包的最大大小,进而可以意味着需要为相同数量的总数据发送更多数据包。

Pod IP 地址在集群外部不可路由。

VXLAN 和 IP in IP的区别

在某些不支持 IP 中 IP 的环境(例如 Azure)中支持 VXLAN。 VXLAN 的每个数据包开销略高,因为封装的包头更大,为50字节,IPIP为20字节,但除非您正在运行网络密集型工作负载,否则您通常不会注意到差异。两种封装的另一个小区别是 Calico 的 VXLAN 实现不使用 BGP,而 Calico 的 IP in IP 实现可以在 Calico 节点之间使用 BGP。

跨子网覆盖

除了标准的 VXLAN 或 IP-in-IP 覆盖之外,Calico 还支持 VXLAN 和 IP-in-IP 的“跨子网(cross-subnet)”模式。在这种模式下,在每个子网中,底层网络充当 L2 网络。在单个子网内发送的数据包不会被封装,因此您可以获得非覆盖网络的性能。跨子网发送的数据包被封装,就像普通的覆盖网络一样,减少对底层网络的依赖(无需与底层网络集成或对底层网络进行任何更改)。

就像标准覆盖网络一样,底层网络不知道 pod IP 地址,并且 pod IP 地址在集群外部不可路由。

集群外的 Pod IP 可路由性

不同 Kubernetes 网络实现的一个重要区别特征是 pod IP 地址是否可以跨更广泛的网络在集群外部路由。

不可路由

如果 pod IP 地址在集群外不可路由,那么当 pod 尝试与集群外的 IP 地址建立网络连接时,Kubernetes 使用一种称为 SNAT(源网络地址转换)的技术来更改源 IP地址从 Pod 的 IP 地址到托管 Pod 的节点的 IP 地址。连接上的任何返回数据包都会自动映射回 pod IP 地址。因此 pod 不知道 SNAT 正在发生,连接的目的地将节点视为连接的源,底层更广泛的网络永远不会看到 pod IP 地址。

对于相反方向的连接,集群外的东西需要连接到 pod,这只能通过 Kubernetes 服务或 Kubernetes 入口完成。集群之外的任何东西都不能直接连接到 pod IP 地址,因为更广泛的网络不知道如何将数据包路由到 pod IP 地址。

可路由

如果 pod IP 地址可以在集群外路由,那么 pod 可以在没有 SNAT 的情况下连接到外部世界,并且外部世界可以直接连接到 pod,而无需通过 Kubernetes 服务或 Kubernetes 入口。

  • 可在集群外路由的 pod IP 地址的优点是:避免出站连接的 SNAT 对于与现有的更广泛的安全要求进行集成可能是必不可少的。它还可以简化调试和操作日志的可理解性。如果您有专门的工作负载,这意味着某些 pod 需要直接访问,而无需通过 Kubernetes 服务或 Kubernetes 入口,那么可路由的 pod IP 在操作上比使用主机网络 pod 的替代方案更简单。
  • 可在集群外路由的 pod IP 地址的主要缺点是:  pod IP 在更广泛的网络中必须是唯一的。例如,如果运行多个集群,您将需要为每个集群中的 pod 使用不同的 IP 地址范围 (CIDR)。在大规模运行时,或者如果现有企业对 IP 地址空间有其他重大需求,这反过来又会导致 IP 地址范围耗尽挑战。

什么决定可路由性?

如果您为集群使用覆盖网络,则 pod IP 通常无法在集群外部路由。

如果您没有使用覆盖网络,那么 pod IP 是否可在集群外路由取决于正在使用的 CNI 插件、云提供商集成或(对于本地)BGP 对等物理网络的组合。

BGP

BGP(边界网关协议)是一种基于标准的网络协议,用于跨网络共享路由。它是互联网的基本构建块之一,具有出色的扩展特性。

Calico 内置了对 BGP 的支持。在本地部署中,这允许 Calico 与物理网络(通常是架顶式路由器)对等交换路由,形成一个非覆盖网络,其中 pod IP 地址可在更广泛的网络中路由,就像附加的任何其他工作负载一样到网络。

Calico 网络

Calico 灵活的模块化网络架构包括以下内容。

Calico CNI 网络插件

Calico CNI 网络插件使用一对虚拟以太网设备(veth 对)将 pod 连接到主机网络命名空间的 L3 路由。这种 L3 架构避免了许多其他 Kubernetes 网络解决方案中具有的额外 L2 桥接器的不必要的复杂性和性能开销。

Calico CNI IPAM 插件

Calico CNI IPAM 插件从一个或多个可配置的 IP 地址范围内为 pod 分配 IP 地址,根据需要为每个节点动态分配小块 IP。结果是与许多其他 CNI IPAM 插件(包括在许多网络解决方案中使用的主机本地 IPAM 插件)相比,IP 地址空间使用效率更高。

覆盖网络模式

Calico 可以提供 VXLAN 或 IP-in-IP 覆盖网络,包括仅跨子网模式。

非覆盖网络模式

Calico 可以提供在任何底层 L2 网络或 L3 网络之上运行的非覆盖网络,该网络是具有适当云提供商集成的公共云网络或具有 BGP 能力的网络(通常是具有标准 Top-of 的本地网络) -机架路由器)。

网络策略执行

Calico 的网络策略执行引擎实现了 Kubernetes 网络策略的全部功能,以及 Calico 网络策略的扩展功能。这与 Calico 的内置网络模式或任何其他 Calico 兼容网络插件和云提供商集成。

Calico 兼容的 CNI 插件和云提供商集成

除了 Calico CNI 插件和内置网络模式外,Calico 还兼容许多第三方 CNI 插件和云提供商集成。

详:Determine best networking option

Calico网络选项选择相关推荐

  1. k8s中将flannel网络切换calico网络

    注意事项: 1.kubelet 配置必须增加 --network-plugin=cni 选项 2.kubec-proxy 组件不能采用 --masquerade-all 启动,因为会与 Calico ...

  2. 选项选择Windows XP系统安装MySQL5.5.28图解

    本文纯属个人见解,是对前面学习的总结,如有描述不正确的地方还请高手指正~ Windows XP系统安装MySQL5.5.28图解 MySQL数据库的安装一共分为两个部分:数据库的安装和数据库的配置. ...

  3. win7网络里面没有计算机,Win7没有无线网络选项教你完美解决

    电脑想要连接无线网络,那么就需要有无线网络选项,在Win7中网络连接中的"无线网络"就是了,而以Win10中则叫"Wlan"那么Win7系统没有无线网络选项是怎 ...

  4. 使用 Prometheus-Operator 监控 Calico(网络监控)

    使用 Prometheus-Operator 监控 Calico(网络监控) Calico 中最核心的组件就是 Felix,它负责设置路由表和 ACL 规则等,以便为该主机上的 endpoints 资 ...

  5. 计算机没有管理无线网络,笔记本win7系统下没有无线网络选项的解决方法

    无线网络随处可见,可以供手机电脑上网,然而有笔记本win7系统用户却发现经常会出现没有无线网络选项的情况,只剩下一个本地连接,碰到这样的问题该如何处理呢,接下来就给大家带来笔记本win7系统下没有无线 ...

  6. win10系统默认 登录界面中会有一个网络选项,如何关闭 ?

    默认情况下, win10系统 登录界面中会有一个网络选项,它能够帮助用户在未登录情况下更方便地选择网络.不过,有些用户因为要一直挂机,所以希望可以去除掉网络选择,防止他人修改或关掉网络.这该如何操作呢 ...

  7. k8s网络基础学习-Calico网络插件

    第十课 k8s网络基础学习-Calico网络插件 tags: k8s网络 calico proxy arp bgp full mesh bgp RR 文章目录 第十课 k8s网络基础学习-Calico ...

  8. Kubernetes容器网络(二):Calico网络原理

    1.前置网络知识 1).BGP 自治系统AS:在单一的技术管理下的一组路由器,而这些路由器使用一种AS内部的路由选择协议和共同的度量以确定分组在该AS内的路由,同时还使用一种AS之间的路由协议以确定在 ...

  9. win7发现不了无线网络_win10系统间设置共享文件夹后“网络”选项下仍然无任何文件(即发现不了共享电脑)...

    我的上一个问题:win10共享文件夹启用"IMB.0/CIFS文件共享支持"失败,提示0x8000ffff 解决之后,仍然发现不了共享电脑:"网络"选项下为空. ...

最新文章

  1. Matlab与线性代数 -- 单位矩阵
  2. 解决Cygwin编译cocos2dx 遇到的 error: 'UINT64_C' was not declared in this scope 问题
  3. 在centos下报错:-bash: apt-get: 未找到命令
  4. git checkout之一 HEAD基本和detached 状态
  5. modbus协议手册_20种PLC元件编号和Modbus编号地址对应表
  6. python基础:pip和虚拟环境
  7. leetcode答案集锦
  8. 测试开发岗面试,需要准备的100道题型
  9. 从零开发区块链应用(十一)--以太坊地址生成
  10. 网络模块打线步骤及技巧解读
  11. 小程序云开发前端显示云存储的图片
  12. jQuery学习笔记之closest()
  13. Stata:gen命令中的group()函数的潜在风险
  14. Java对数组对象进行排序
  15. 关于筹码理论的一些知识
  16. oracle8i substr,Oracle中INSTR和SUBSTR的用法
  17. 华为交换机 STP 协议
  18. HR8833 替换DRV8833 H桥电机驱动IC
  19. IOS主题切换ThemeManager
  20. linux命令:head、tail

热门文章

  1. 44_linux挂载硬盘
  2. dlopen、dlsym、dlclose
  3. 我的HTMLCSS学习总结
  4. CMake中add_custom_command的使用
  5. php syslog,关于syslog协议
  6. apache 服务器配置 虚拟,apache配置虚拟服务器
  7. 灯光设计中筒灯与射灯的使用
  8. socket.io介绍
  9. 今天在Palm上读完钱穆的《中国历代政治得失》
  10. 利用计算机录音模拟声波,realplayer插件 声音数字化|74数字化声音试题(7)