calico网络模式(一文学会Calico网络自定义)

本文目录
- 一文学会Calico网络自定义
- K8s网络组件-Calico
- k8s网络之Calico网络-工作原理
- k8s calico flannel cilium 网络性能测试
- 简述Kubernetes Calico网络组件实现原理
一文学会Calico网络自定义
Calico支持多个容器网络选项,用于可伸缩性、网络性能和与现有基础设施的互操作性。
不同的网络实现更适合不同的环境。Calico提供了几种不需要封装的基于IP路由的网络实现。如果您的部署需要封装,Calico提供覆盖网络(IP in IP或VXLAN)。Calico还支持使用其他Kubernetes网络选项来执行策略。本文档帮助您为集群选择最佳的网络选项。
Calico提供了一些方法,允许pod连接到其他pod、主机和外部网络(例如internet)。
Calico网络:
Calico支持使用边界网关协议(BGP)将路由信息共享到网络中。Calico支持节点到节点的全网格部署(有和没有路由反射器),以及BGP直接对机架(ToR)路由器顶部的现场部署;允许流量直接路由到工作负载,而不需要NAT或封装。
Calico可以使用许多其他Kubernetes网络选项执行网络策略强制。
下表显示了使用Calico时常见的网络选项。
本节提供更多关于Calico的内置网络选项的细节:
Calico可以与你的路由器使用BGP对等。这提供了出色的性能和易于调试的非封装流量,以及广泛的网络拓扑和连接选项。
此选项还提供了接近主机到主机的性能级别,并允许网络直接看到流量。
当所有节点都在一个L2子网上时,如果底层网络不强制执行IP地址检查,Calico可以在节点之间路由pod流量,而不需要封装。如果您的网络由多个L2子网组成,那么您可以使用路由器在BGP上进行对等,或者使用跨子网封装来仅封装跨子网边界的流量。
如果不允许在集群外部进行工作负载访问或使用基础设施进行对等访问,就无法在pod和不属于Calico集群的目的地之间路由流量。
如果可能,我们建议运行Calico没有网络覆盖/封装。这提供了最高的性能和最简单的网络;离开您的工作负载的包是连接到网络上的包。
但是,当运行在底层网络上时,有选择地使用覆盖(IP中的IP或VXLAN中的IP)是非常有用的,因为底层网络不容易知道工作负载IP。Calico可以对:所有的流量,没有流量,或者只对跨越子网边界的流量进行封装。
IP中的IP或VXLAN封装也可以在子网之间选择性地使用——这提供了子网中未封装的流量的性能优势,适用于织物包含多个L2网络且无法进行对等连接的环境。例如,如果您在AWS中跨多个VPC/子网使用Calico网络,Calico可以选择性地只封装在VPC/子网之间路由的流量,而不封装在每个VPC/子网中运行。
缺省的节点到节点的BGP网格必须关闭,以启用其他BGP拓扑。为此,修改默认的BGP配置资源。
每个节点的BGP对等点应用于集群中的一个或多个节点。您可以通过精确地指定节点的名称或使用标签选择器来选择节点。
Calico 可以配置扮演成一个路由反射器。每个节点要充当路由反射器必须有一个集群ID——通常一个未使用的IPv4地址。
默认的,所有的calico 节点使用64512 autonomous system, 除非特殊指定。下面的命令把它改成64513.
您可以配置每个IP池不同封装配置。然而,你不能一个IP池内混合封装类型。
IP in IP和 VXLAN只支持IPv4地址。
Calico 只有一个选项来选择性地封装流量 ,跨越子网边界。我们建议使用 IP in IP 的 cross subnet 选项把开销降到最低。
注意:切换封装模式会导到正在连接的进程中断。
IP in IP封装可以选择性的执行, 并且仅用于通过子网边界的通信量 。
开启这个功能,设置 ipipMode 为 CrossSubnet
ipipMode 设置 Always
下表针对Calico环境列出了常见的MTU大小。 因为MTU是endpoints间网络路径的全局属性, 你应该设定最低MTU的MTU包可能需要的任何路径。
额外的报头用于在IP和VXLAN IP协议,降低了最小的MTU大小头。在IP使用20-byte头(IP, VXLAN使用50-byte头)。因此,我们建议如下:
当使用flannel的网络时,网络接口的MTU应该匹配flannel接口的MTU。 假如使用flannel的VXLAN, 使用上面的 calico MTU with VXLAN 列的大小。
当你设置MTU,它适用于新工作负载。MTU变化应用于现有的工作负载,必须重新启动calico nodes。
如果您使用的是IP in IP和/或VXLAN calico overlay 网络,设置隧道MTU匹配veth MTU配置的值。
IP在IP隧道作为tunlx出现(例如,tunl0),连同MTU大小。例如:
允许工作负载使用私有IP地址访问互联网,你可以用你现有NAT功能,或者你可以在Calico IPPool上开启natOutgoing。
在以下的示例中,我们创建一个Calicco IPPool,并开启natOutgoing 。Outbound NAT是在节点本地执行的。
您可以创建额外的IPPools不用于IP地址管理,防止NAT某些CIDR块。这是有用的,如果你想让节点NAT网络流量,但不是在某些内部ip范围。例如,如果您不想NAT流量10.0.0.0/8,您可以创建以下池。您必须确保集群之间的网络和10.0.0.0/8可路由。
针对calico节点配置IP自动检测,确保路由使用正确的P地址。
当你安装Calico在一个节点上时,一个IP地址和子网被自动检测。Calico提供几种方式去配置子网自动检测,和支持配置指定的IPs。
针对节点间的路由,每个calico节点必须配置一个IPv4地址 和/或 一个IPV6地址,当安装一个calico在一个节点上时,一个节点资源使用从主机检测到的路由信息自动创建。针对一些部署,你可能想要自动的更新检测,确保节点获取正确的IP地址。
默认的,Calico使用 first-found 方法,也就是说第一个接口第一个有效的IP地址(排除local interface,因为它是docker bridge).你可以使用以下方法的任一一种改变默认方法。
(1)使用一个能到达特定IP或domain的地址。
(2)使用正则的方式,去匹配接口(interface)
(3)使用正则的方式,去排除匹配的接口(skip interface)
(1) calico node container(start/restart),使用环境变量去设置节点的值
(2) 更新节点的资源
因为你可以通过配置环境变量和节点资源,去更改IP地址和子网,下表描述了这些值如何同步的。
由于默认的自动检测方法是 first valid interface found (first-found). 去使用不同的自动检测方法,使用 kubectl set env 命令指定方法。
(1)IP 或 domain name
(2)包含匹配的接口
(3)排除匹配的接口
在下列情况下,您可能需要配置一个特定的IP子网:
八、IP地址及封装模式切换
针对安装Calico到kubernetes集群中的每个节点,每个manifest包含所有需要的资源。
它安装如下的kubernetes资源:
Calico IPAM从IP pools中分配 IP地址。
如果要修改pods使用的默认IP地址范围,那么修改calico.yaml清单中的 CALICO_IPV4POOL_CIDR 。
默认情况下,清单支持跨子网的IP-in-IP封装。许多用户可能希望禁用IP-in-IP封装,例如在以下情况下。
如果要关闭IP-in-IP的封装,修改清单中的 CALICO-IPV4POOL_IPIP .
默认情况下,Calico清单支持IP-in-IP封装。如果您所在的网络阻塞了ip中的ip,比如Azure,您可能希望切换到Calico的VXLAN封装模式。要做到这一点,在安装时(以便Calico创建默认的IP池与VXLAN和没有IP-in-IP配置必须撤消):
K8s网络组件-Calico
广播域
ARP(地址解析协议)
三层交换机
VLAN(Virtual Local Area Network):虚拟局域网
VLAN的主要好处
路由器主要分为两个端口类型
功能
路由器的功能
路由
相关概念
容器之间通信
容器访问外网
infra container
pod通信
两个Pod在同一个Node上
两个Pod在不同Node上
概述
etcd方式
api方式-kubeadmin
api方式-二进制
查看Calico状态
工作模式
概述
工作流程
概述
calicoctl工具修改为BGP模式
工作流程
背景
解决
具体步骤:
01 关闭 node-to-node模式
02 配置指定节点充当路由反射器
3、使用标签选择器将路由反射器节点与其他非路由反射器节点配置为对等
4、查看节点的BGP连接状态
网络需求
方案一:专门准备一台Node负责转发来自办公网络
方案二:两方上层路由器使用BGP做路由交换
概述
应用场景
Pod网络入口方向隔离
Pod网络出口方向隔离
Demo
需求1:将default命名空间携带app=web标签的Pod隔离,只允许携带run=client1标签的Pod访问80端口
需求2:default命名空间下所有pod可以互相访问,也可以访问其他命名空间Pod,但其他命名空间不能访问default命名空间Pod
k8s网络之Calico网络-工作原理
***隐藏网址***
calico有两种模式:ipip(默认)、bgp,bgp效率更高。
如果宿主机在同一个网段,可以使用ipip模式;
如果宿主机不在同一个网段,pod通过BGP的hostGW是不可能互相通讯的,此时需要使用ipip模式(如果仍想使用bgp模式,除非你在中间路由器上手动添加路由)。
k8s calico flannel cilium 网络性能测试
结论:
点评:
带宽: calico+ipip 》 flannel+vxlan 》 cilium+vlan
速度: calico+ipip 》 flannel+vxlan 》 cilium+vlan
稳定性:cilium+vlan 》 calico+ipip 》 flannel+vxlan
calico 作为老牌网络解决方案,可圈可点,已被 github 等公司用于生产。
flannel 配置简单,性能弱低于 calico,redis 测试中稍占上风。大并发下稳定性稍低。
***隐藏网址***
(说明:本来还准备比较一下 kube-router ,不过网络没有调通,暂时无法测试。)
一个问题:
flannel 的 host-gw 模式、flannel+vxlan+DirectRouting 模式、calico 关闭 ipip 模式、kube-router 这些部署情况下,跨主机的容器不通,感觉原因应该是同一个问题。
主机A ping 主机B 上的容器,容器有回包,但是只到了主机B,之后就被丢弃了。
欢迎探讨,一起研究。
待问题解决后,再把这些模式测试对比。
测试环境:
硬件:三台物理机,千兆网卡,单网卡,处于同一网段(在同一个二层网络中)
OS:Ubuntu 18.04,内核 4.15
k8s: 1.10.0
kube-proxy: ipvs 模式
flannel : 0.10 版本, vxlan模式(默认设置)
calico: 3.1 版本,ipip 模式(默认设置)
cilium: 1.0 版本,vxlan 模式(默认设置)
测试方法:
简述Kubernetes Calico网络组件实现原理
Calico是一个基于BGP的纯三层的网络方案,与OpenStack、Kubernetes、AWS、GCE等云平台都能够良好地集成。
Calico在每个计算节点都利用Linux Kernel实现了一个高效的vRouter来负责数据转发。每个vRouter都通过BGP协议把在本节点上运行的容器的路由信息向整个Calico网络广播,并自动设置到达其他节点的路由转发规则。
Calico保证所有容器之间的数据流量都是通过IP路由的方式完成互联互通的。Calico节点组网时可以直接利用数据中心的网络结构(L2或者L3),不需要额外的NAT、隧道或者Overlay Network,没有额外的封包解包,能够节约CPU运算,提高网络效率。我推荐你去看看时速云,他们是一家全栈云原生技术服务提供商,提供云原生应用及数据平台产品,其中涵盖容器云PaaS、DevOps、微服务治理、服务网格、API网关等。大家可以去体验一下。 如果我的回答能够对您有帮助的话,求给大大的赞。

更多文章:
activitythread工作原理(ViewModel的原理)
2026年5月26日 05:00
maven配置文件放哪里(maven打包时如何把包下面的XML配置文件也包含)
2025年9月12日 17:30
compensation 单词(compensation同义词)
2025年9月10日 19:15
mentality是什么意思(victim mentality是什么意思)
2026年1月13日 09:00
readprocessmemory(U盘出现仅完成部分的ReadProcessMemory 或WriteProcessMemory请求)
2025年10月5日 22:00
power query拆分列的拆分依据(在wps或excel里面,在一段文本里面把两个数字按大小挑出来)
2025年12月4日 07:15
according to legend(英语作文关于历史人物 少于100字数)
2026年7月3日 01:15
java数组的长度怎么看(java中如何判断一个数组的长度呢比如我申请了一个数组int [] arr = new int[8];)
2025年6月23日 17:30















