114.kubernetes之calico
calico包括如下重要组件:calico/node,Typha,Felix,etcd,BGP Client,BGP Route Reflector。
calico/node:把Felix,calico client, confd,Bird封装成统一的组件作为统一入口,同时负责给其他的组件做环境的初始化和条件准备。
Felix:主要负责路由配置以及ACLS规则的配置以及下发,它存在在每个node节点上。
etcd:存储各个节点分配的子网信息,可以与kubernetes共用;
BGPClient(BIRD), 主要负责把 Felix写入 kernel的路由信息分发到当前 Calico网络,确保 workload间的通信的有效性;
BGPRoute Reflector(BIRD), 大规模部署时使用,在各个节点之间不是mesh模式,通过一个或者多个 BGPRoute Reflector 来完成集中式的路由分发;当etcd中有新的规则加入时,Route Reflector 就会将新的记录同步。
Typha:在节点数比较多的情况下,Felix可通过Typha直接和Etcd进行数据交互,不通过kube-apiserver,既降低其压力。生产环境中实例数建议在3~20之间,随着节点数的增加,按照每个Typha对应200节点计算。
配置
相关操作
//由于我的环境是kube-router需要将以前的数据清理下,如果遇到问题需要清理也可以按照如下步骤
删除网卡
删除node已经分配的podCIDR
kube-manager
kubelet
[root@host229 ~]# etcdctl get / --prefix --keys-only |grep minions
/registry/minions/host214
/registry/minions/host227
/registry/minions/host228
/registry/minions/host229
[root@host229 ~]# etcdctl del /registry/minions/host214
[root@host229 ~]# etcdctl del /registry/minions/host227
[root@host229 ~]# etcdctl del /registry/minions/host228
[root@host229 ~]# etcdctl del /registry/minions/host229
文件模板地址
calico有两种模式iptable和ipvs,之一通过调整kube-proxy中的--proxy-mode=ipvs 来指定,相比iptables模式,ipvs模式性能更好,能够支持更大的集群规模。
k8s之calico网络
在一个物理server上安装三个VM,VM操作系统如下:
root@master:~# l***_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 19.10
Release: 19.10
Codename: eoan
一个VM作为master,另外两个VM作为worker:
calico安装
wget
kubectl apply -f calico.yaml
calico客户端命令工具-calicoctl,可用来查看,修改calico配置
calico支持三种网络模式,可通过修过calico.yaml进行配置:
下面分别进行配置验证,并分析数据流向
安装完calico,默认就是ipip模式。
node之间是full mesh连接。
进入calico pod,查看运行的进程。
而且在node上会多出一个网络接口tunl0,用于封装/解封装ipip报文
通过下面yaml文件部署两个pod,验证网络连通性。
nginx.yaml
1nginx.yaml -- 复制nginx.yaml,修改name
可看到两个pod分别部署在不同的worker上。
进入一个pod,可以ping通另一个pod
以10.24.166.130 ping 10.24.104.3 为例:
所以报文达到tunl0设备时,报文格式如下,源目的ip不变,因为ipip模式,所以mac已经没了。
封装完ipip,根据外层ip再次查找host路由表,从ens3网卡发送出去
参考: : Switching from IP-in-IP to VXLAN
修过 calico.yaml:
重新apply calico.yaml
查看calico node上运行的进程,已经没了bird等和BGP相关的进程。
calicoctl查看node状态,也已经没有BGP相关内容
而且每个节点上多了一个网络接口:
和ipip模式verify一样,创建两个pod。
进入一个pod,可以ping通另一个pod
以10.24.166.130 ping 10.24.104.2 为例:
所以pod发出icmp request报文,可在eth0抓到。
从neigh信息可知,10.24.104.0 对应的mac地址为66:2d:bf:44:a6:8b
所以报文达到vxlan.calico设备时,报文格式如下,源目的ip不变,但是目的mac已经变为10.24.104.0对应的mac,源mac变为vxlan.calico设备的mac
在 vxlan_xmit 中调用 vxlan_find_mac 根据目的mac查找fdb信息。
从fdb信息可知,mac 66:2d:bf:44:a6:8b 对应ip 192.168.122.22。
此ip即为vxlan外层目的ip。
封装完vxlan,根据外层ip再次查找host路由表,从ens3网卡发送出去
解封装后,将报文发送给vxlan.calico网卡,可在此抓到报文
修改 calico.yaml,将 CALICO_IPV4POOL_IPIP 的value改完 Never
重新apply calico.yaml
查看 calico node status和calico node上的进程,看和ipip模式没有区别。区别在于worker上的路由表,跨节点通信不再通过tunl0。
或者通过如下方式动态更新,从IPIP到纯BGP模式
和ipip模式verify一样,创建两个pod。
进入一个pod,可以ping通另一个pod
以10.24.166.128 ping 10.24.104.1为例
引用自
一文学会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 ***tonomous system, 除非特殊指定。下面的命令把它改成64513.
您可以配置每个IP池不同封装配置。然而,你不能一个IP池内混合封装类型。
IP in IP和 VXLAN只支持IPv4地址。
Calico 只有一个选项来选择性地封装流量 ,跨越子网边界。我们建议使用 IP in IP 的 cross subnet 选项把开销降到***。
注意:切换封装模式会导到正在连接的进程中断。
IP in IP封装可以选择性的执行, 并且仅用于通过子网边界的通信量 。
开启这个功能,设置 ipipMode 为 CrossSubnet
ipipMode 设置 Alw***s
下表针对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 overl*** 网络,设置隧道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配置必须撤消):
calico的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于calico和flannel的优缺点、calico的信息别忘了在本站进行查找喔。