文章目录 Calico 网络模型 Calico网络的转发细节 路由配置组件Felix 路由广播组件BGP Speaker Calico 架构 Calico全景架构图 全连接复杂性与规模问题 大规模部署架构图 跨网段访问问题 Calico的IPIP模式(解决物理机不在一个网段的问题) Calico 网络模型 由于两台物理机的容器网段不同,我们完全可以将两台物理机配置成为路由器,并按照容器的网段配置路由表。 这个agent在Calico中称为Felix。 Calico中还实现了灵活配置网络策略Network Policy,可以灵活配置两个容器通或者不通。 ---- Calico 架构 Calico全景架构图 全连接复杂性与规模问题 这里面还存在问题,就是BGP全连接的复杂性问题。
一、关于 Calico Felix, Typha 和 kube-controllers 组件 Felix 是一个守护进程,运行在每台机器上实现网络策略等功能,Felix 是 calico 的大脑。 二、 配置 calico 允许 metrics 上报 1. name: calico-felix-metrics namespace: calico-system spec: selector: k8s-app: calico-node name: calico-typha-metrics namespace: calico-system spec: selector: k8s-app: calico-typha name: calico-kube-controllers-metrics namespace: calico-system spec: selector: k8s-app: calico-kube-controllers
在这篇文章中,我们将对 Calico 和 Flannel 进行对比,以帮助您选择最适合您的 Kubernetes 网络插件。实现方式Calico 使用基于路由的方法实现网络功能。 此外,Calico 的路由表也非常小,因为每个容器只需要一个路由规则。这使得 Calico 在大规模部署时非常适用。 配置和部署Calico 的配置和部署相对来说比较复杂,因为它需要为每个节点设置路由规则。 安全性Calico 和 Flannel 都提供了一定程度的安全性。Calico 可以通过网络策略来控制容器之间的通信,Flannel 则使用网络策略来限制容器之间的通信。 扩展性Calico 的扩展性非常好,因为它使用的是基于路由的方法,可以轻松地与其他路由器和防火墙集成。此外,Calico 还支持多种路由协议,可以与多种网络拓扑结构集成。
前言 Calico 是一个纯三层的数据中心网络方案,而且无缝集成像 OpenStack 这种 Iaas 云架构,能够提供可控的 VM、容器、裸机之间的 IP 通信。为什么说它是纯三层呢? Calico 网络模型揭秘 下面我们通过具体的例子来帮助大家理解 Calico 网络的通信原理。 所以 Calico 是怎么做到的呢? 这里我就不绕弯子了,实际上 Calico 利用了网卡的代理 ARP 功能。 现在我们知道,Calico 本质上还是利用了代理 ARP 撒了一个“善意的谎言”,下面我们来确认一下。 模拟组网 既然我们已经掌握了 Calico 的组网原理,接下来就可以手动模拟验证了。
Calico 作为一种常用的 Kubernetes 网络插件,使用 BGP 协议对各节点的容器网络进行路由交换。 本文是《Calico BGP 功能介绍》系列的第一篇,介绍 Calico 所使用的 BGP 软件路由器——BIRD。 关于 BGP 协议,网上资料众多,在这里不再做介绍。 reject "RIP metric is too big"; else accept "ok"; } 常见协议 这里只介绍 Calico get_doc&v=20&f=bird.html#toc5 原文链接:https://maao.cloud/2021/01/26/Calico-BGP%E5%8A%9F%E8%83%BD%E4%BB%8B
1、Calico概述 2、Calico架构及BGP实现 3、Calico部署 4、Calico管理工具 5、Calico BGP模式 6、Calico Route Reflector 模式(RR) 7、Calico IPIP模式 8、Calico网络策略 1、Calico概述 Calico是Kubernetes生态系统中另一种流行的网络选择。 Calico CNI插件在CNI框架内封装了Calico的功能。 Calico是一个基于BGP的纯三层的网络方案,与OpenStack、Kubernetes、AWS、GCE等云平台都能够良好地集成。 Calico 3.x的默认配置使用的是IPIP类型的传输方案而非BGP。 Calico的系统架构如图所示 ? calico相关文件 # ls /opt/cni/bin/calico-ipam /opt/cni/bin/calico-ipam # cat /etc/cni/net.d/ 10-calico.conflist
1 Calico默认的网络模式是IPIP2 切换到BGP网络模式2.1 确保安装了calicoctl工具2.2 配置一个global BGP peerglobal BGP peer是确保和集群其他calico apiVersion: projectcalico.org/v3kind: BGPPeermetadata: name: my-global-peerspec: peerIP: 192.20.30.40 # 每个calico node都和该地址建立peer asNumber: 645672.3 为每个calico node配置BGP peerapiVersion: projectcalico.org/v3kind: BGPPeermetadata name: rack1-torspec: peerIP: 192.20.30.40 asNumber: 64567 nodeSelector: rack == 'rack-1' # 可以基于标签操作calico
前面介绍Flannel的三层网络解决方案是host-gw,其实还有一个非常出名的单独的三层网络解决方案Calico,它的工作模式和host-gw基本一致,也是会在每台宿主机上添加如下格式的路由规则: < 不同于Flannel,Calico是通过BGP(Border Gateway Protocol 边界网关协议)来自动的在集群中分发路由信息。 明白了BGP的大体工作原理后,其Calico的工作架构就非常容易理解,它由三部分组成: Calico的CNI插件; Felix,负责在宿主机上插入路由规则以及维护Calico所需的网络设备; BIRD, 如上就是Calico的工作原理(Calico不会在宿主机上创建任何网桥设备,这与Flannel是不同的)。 Node-to-Node Mesh Calico的默认模式是Node-to-Node Mesh,这种模式下,所有主机上的BGP Client都需要与其他主机进行通信交换路由规则信息,但是随着节点N的增加
Calico 组件 下图显示了 Kubernetes 的必需和可选 Calico 组件,具有网络和网络策略的本地部署。 Calico CNI 插件允许您将 Calico 网络用于任何使用 CNI 网络规范的编排器。通过标准的 CNI 配置机制和 Calico CNI 插件进行配置。 它是 Calico CNI 插件之一。 RBAC 控制对 Calico 资源的访问 使用 Kubernetes 审计日志生成 Calico 资源更改的审计日志 etcd etcd 是一个一致的、高可用性的分布式键值存储,它为 Calico 这允许 Calico 与编排器紧密绑定,因此用户可以使用他们的编排工具管理 Calico 网络。需要时,编排器插件会从 Calico 网络向编排器提供反馈。
本文是《Calico BGP 功能介绍》系列的第二篇,介绍 Calico 中 BGP 功能的实现。所使用的 Calico 版本为 v3.17.3。 Calico BGP 功能 BGP Peer Calico 中通过定义 BGP Peer 对象,来建立 BGP 连接。 true asNumber Calico node 默认的节点 AS。 其中,为了使 confd 支持 Calico 后端存储,在原生的 confd 上,添加了类型为 Calico 的 backend,主要逻辑是 watch 后端 BGPPeer、BGPConfiguration 二是对于属于 Calico IPPool 的路由,根据 Calico IPPool 设置的模式(VXLAN 或 IPIP),来判断是否需要写入 kernel 路由表。
什么是 Calico ? Calico 组件概述 ? Felix:calico的核心组件,运行在每个节点上。 Orchestrator plugin:协调器插件负责允许kubernetes或OpenStack等原生云平台方便管理Calico,可以通过各自的API来配置Calico网络实现无缝集成。 在calico中可以通过Global Peer实现RR模式。 Calico BGP 概述 ? BGP 是怎么工作的? 这个flannel是不支持的,calico支持,所以做多租户网络方面的控制ACL,那么要选择 calico。 2、追求网络性能?
触发准入 Webhook PodMutatingHandler 处理请求,检查是否为 VMI 资源 根据操作类型调用相应的处理函数 查询对应的 PersistentPodState 对象 如果存在,添加 Calico
name: calico-node namespace: kube-system --- # Source: calico/templates/calico-node.yaml # This manifest name: var-run-calico readOnly: false - mountPath: /var/lib/calico name: var-lib-calico readOnly: false - name: var-run-calico hostPath: path: /var/run/calico - name: var-lib-calico hostPath: path: /var/lib : k8s-app: calico-kube-controllers --- # Source: calico/templates/calico-etcd-secrets.yaml --- # Source : calico/templates/calico-typha.yaml --- # Source: calico/templates/configure-canal.yaml Jetbrains全家桶
我们部署了一个 3 节点的 Kubernetes 集群,使用的是 Calico 网络插件,版本信息如下:Kubernetes: v1.27.4Calico: v3.15.1CNI: v0.8.6OS: 22.04 LTSKernel: 6.5.0-21-genericcontainerd: 1.7.12-0ubuntu2~22.04.1当前集群工作正常,我们尝试新增一个相同版本信息的节点,但是发现新节点的 Calico Node 无法启动, 使用 kubectl describe pod calico-node-xxxxx -n kube-system 查看 Pod 的状态,发现存活探针失败,导致 Pod 不断重启, 期间尝试了重置节点,重新部署 Calico Node,但是问题依然存在。这样断断续续排查了一周,问题还是没有解决。 看来这个模块并不是必须的,那这个信息也不是导致 Calico Node 无法启动的原因了。
原文链接:https://fuckcloudnative.io/posts/monitoring-calico-with-prometheus-operator/ Calico 中最核心的组件就是 Felix 由此可见,对于我们的监控来说,监控 Calico 的核心便是监控 Felix,Felix 就相当于 Calico 的大脑。 本文将学习如何使用 Prometheus-Operator 来监控 Calico。 本文使用的 Calico 版本是 v3.15.0,其他版本类似。 先用以下命令打开 DaemonSet calico-node 的配置: $ kubectl -n kube-system edit ds calico-node 然后在线修改,在 spec.template.sepc.containers
-i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config 部署calico 网络插件 选择网络插件:https://kubernetes.io/docs/concepts/cluster-administration/addons/ calico网络插件:https://docs.projectcalico.org /v3.9/getting-started/kubernetes/ calico,同样在master节点上操作 # 在k8s中安装calico kubectl apply -f https:/ /docs.projectcalico.org/v3.9/manifests/calico.yaml # 确认一下calico是否安装成功 kubectl get pods --all-namespaces
本文将介绍如何在Kubernetes集群中安装和配置Calico网络插件。 二、安装Calico下载Calico安装文件首先需要从Tigera官方网站下载最新版本的Calico安装文件。 安装Calico安装Calico非常简单,只需要使用kubectl命令将calico.yaml文件应用到Kubernetes集群中即可:$ kubectl apply -f calico.yaml这将自动在 三、使用Calico安装和配置Calico后,可以使用以下命令检查Calico的状态:$ calicoctl node status此命令将列出Kubernetes集群中所有节点的状态。 此外,可以使用以下命令查看Calico网络中的所有端点:$ calicoctl get endpoints此命令将列出Calico网络中的所有端点,包括它们的名称、IP地址和状态等。
之前详细介绍了calico的ipip、vxlan、bgp模式, 但是所有的k8s节点都是同网段的, 本篇使用ensp和workstation在自己家里就可以模拟测试跨网段k8s集群calico方案的纯bgp 192.168.219.20 k8s-node4 Ready <none> 20h v1.20.0 192.168.219.40 calico 配置bgp 配置bgp需要使用calicoctl工具, 自己准备好, 配置bgp主要分为以下步骤 确认calico部署是纯BGP模式 关闭BGP默认的full mesh模式 修改指定主机k8s-node3 的如下两个配置为Never - name: CALICO_IPV4POOL_IPIP value: "Never" - name: CALICO_IPV4POOL_VXLAN value : "Never" calico的bgp模式默认是full mesh的, 将其关闭 calicoctl get bgpconfiguration default -o yaml apiVersion
目录 目录 calico 名词解释 组网原理 BGP与AS BGP Speaker 全互联模式(node-to-node mesh) BGP Speaker RR模式 calico网络的部署 calico calico的每个node上会设置大量(海量)的iptables规则、路由,运维、排障难度大。 calico的原理决定了它不可能支持VPC,容器只能从calico设置的网段中获取ip。 : $rpm -ql calico-felix /etc/calico/felix.cfg.example /etc/logrotate.d/calico-felix /usr/bin/calico-felix /bin/calico-gen-bird6-mesh-conf.sh /usr/share/calico/bird/calico-bird-peer.conf.template /usr/share/calico /bird/calico-bird.conf.template /usr/share/calico/bird/calico-bird6-peer.conf.template /usr/share/calico
CalicoCtl:Calico命令行管理工具。 2.3 Calico步骤过程 在Kubernetes中部署Calico的主要步骤如下: 修改Kubernetes服务的启动参数,并重启服务。 创建Calico服务,主要包括calico-node和calico policy controller。 calico-node服务的主要参数如下。 CALICO_IPV4POOL_CIDR:Calico IPAM的IP地址池,Pod的IP地址将从该池中进行分配。 10-calico.conf:符合CNI规范的网络配置,其中type=calico表示该插件的二进制文件名为calico。 calico-kubeconfig:Calico所需的kubeconfig文件。 calico-tls目录:以TLS方式连接etcd的相关文件。