两个openstack网络互通_Kubernetes 高性能网络组件 Calico 入门教程

本文介绍了 Calico,一种在 Kubernetes 中以高性能和灵活性著称的网络解决方案。通过BGP协议,Calico实现在不同节点间的容器网络互联互通,无需NAT、隧道,提高网络效率。同时,Calico还提供了丰富的网络策略和路由反射器模式,以适应大规模集群。详细阐述了Calico的部署、管理工具以及不同的工作模式,包括IPIP模式,并强调了网络策略的应用。
摘要由CSDN通过智能技术生成

1、Calico概述

Calico 是 Kubernetes 生态系统中另一种流行的网络选择。虽然 Flannel 被公认为是最简单的选择,但 Calico 以其性能、灵活性而闻名。Calico 的功能更为全面,不仅提供主机和pod之间的网络连接,还涉及网络安全和管理。Calico CNI插件在 CNI 框架内封装了Calico的功能。

Calico 是一个基于BGP的纯三层的网络方案,与 OpenStack、Kubernetes、AWS、GCE 等云平台都能够良好地集成。Calico 在每个计算节点都利用 Linux Kernel 实现了一个高效的虚拟路由器 vRouter 来负责数据转发。每个 vRouter 都通过 BGP1 协议把在本节点上运行的容器的路由信息向整个 Calico 网络广播,并自动设置到达其他节点的路由转发规则。Calico 保证所有容器之间的数据流量都是通过IP路由的方式完成互联互通的。Calico 节点组网时可以直接利用数据中心的网络结构( L2 或者 L3),不需要额外的 NAT、隧道或者 Overlay Network,没有额外的封包解包,能够节约 CPU 运算,提高网络效率。

83f3fadcabbd663ec9a07836a13d3649.png

Calico 在小规模集群中可以直接互联,在大规模集群中可以通过额外的 BGP route reflector 来完成。

d14a59473492007414071207840e5019.png

此外,Calico 基于 Iptables 还提供了丰富的网络策略,实现了 Kubernetes 的 Network Policy 策略,提供容器间网络可达性限制的功能。

2、Calico 架构及 BGP 实现

BGP 是互联网上一个核心的去中心化自治路由协议,它通过维护IP路由表或“前缀”表来实现自治系统AS之间的可达性,属于矢量路由协议。不过,考虑到并非所有的网络都能支持 BGP,以及 Calico 控制平面的设计要求物理网络必须是二层网络,以确保 vRouter 间均直接可达,路由不能够将物理设备当作下一跳等原因,为了支持三层网络,Calico 还推出了 IP-in-IP 叠加的模型,它也使用 Overlay 的方式来传输数据。IPIP 的包头非常小,而且也是内置在内核中,因此理论上它的速度要比 VxLAN 快一点 ,但安全性更差。Calico 3.x 的默认配置使用的是IPIP类型的传输方案而非 BGP。

Calico 的系统架构如图所示:

183d3450950572968e8e313d5bfdb899.png

Calico 主要由 Felix、Orchestrator Plugin、etcd、BIRD 和 BGP Router Reflector 等组件组成。

  • Felix: Calico Agent,运行于每个节点。
  • Orchestrator Plugi:编排系统(如 Kubernetes 、 OpenStack 等)以将 Calico 整合进系统中的插件,例如 Kubernetes 的 CNI。
  • etcd:持久存储Calico数据的存储管理系统。
  • BIRD:用于分发路由信息的BGP客户端。
  • BGP Route Reflector: BGP 路由反射器,可选组件,用于较大规模的网络场景。

3、Calico部署

在 Kubernetes 中部署 Calico 的主要步骤如下:

  • 修改 Kubernetes 服务的启动参数,并重启服务设置 Master 上 kube-apiserver 服务的启动参数:–allowprivileged=true(因为 calico-node 需要以特权模式运行在各 Node 上)。设置各 Node 上 kubelet 服务的启动参数:–networkplugin=cni(使用 CNI 网络插件)
  • 创建 Calico 服务,主要包括 calico-node 和 calico policy controller。需要创建的资源对象如下创建 ConfigMap calico-config,包含 Calico 所需的配置参数创建 Secret calico-etcd-secrets,用于使用 TLS 方式连接 etcd。在每个 Node 上都运行 calico/node 容器,部署为 DaemonSet在每个 Node 上都安装 Calico(由 install-cni 容器完成)部署一个名为 calico/kube-policy-controller 的 Deployment,以对接 Kubernetes 集群中为 Pod 设置的 Network Policy

具体部署的步骤如下:

下载 yaml

# curl https://docs.projectcalico.org/v3.11/manifests/calico-etcd.yaml -o calico-etcd.yaml

下载完后修改配置项

  • 配置连接 etcd 地址,如果使用 https,还需要配置证书。(ConfigMap,Secret)
# cat /opt/etcd/ssl/ca.pem | base64 -w 0LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURlakNDQW1LZ0F3SUJBZ0lVRHQrZ21iYnhzWmoxRGNrbGl3K240MkI5YW5Nd0RRWUpLb1pJaHZjTkFRRUwKQlFBd1F6RUxNQWtHQTFVRUJoTUNRMDR4RURBT0JnTlZCQWdUQjBKbGFXcHBibWN4RURBT0JnTlZCQWNUQjBKbAphV3BwYm1jeEVEQU9CZ05WQkFNVEIyVjBZMlFnUTBFd0hoY05NVGt4TWpBeE1UQXdNREF3V2hjTk1qUXhNVEk1Ck1UQXdNREF3V2pCRE1Rc3dDUVlEVlFRR0V3SkRUakVRTUE0R0ExVUVDQk1IUW1WcGFtbHVaekVRTUE0R0ExVUUKQnhNSFFtVnBhbWx1WnpFUU1BNEdBMVVFQXhNSFpYUmpaQ0JEUVRDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRApnZ0VQQURDQ0FRb0NnZ0VCQUtEaGFsNHFaVG5DUE0ra3hvN3pYT2ZRZEFheGo2R3JVSWFwOGd4MTR4dFhRcnhrCmR0ZmVvUXh0UG5EbDdVdG1ZUkUza2xlYXdDOVhxM0hPZ3J1YkRuQ2ZMRnJZV05DUjFkeG1KZkNFdXU0YmZKeE4KVHNETVF1aUlxcnZ2aVN3QnQ3ZHUzczVTbEJUc2NOV0Y4TWNBMkNLTkVRbzR2Snp5RFZXRTlGTm1kdC8wOEV3UwpmZVNPRmpRV3BWWnprQW1Fc0VRaldtYUVHZjcyUXZvbmRNM2Raejl5M2x0UTgrWnJxOGdaZHRBeWpXQmdrZHB1ClVXZ2NaUTBZWmQ2Q2p4YWUwVzBqVkt5RER4bGlSQ3pLcUFiaUNucW9XYW1DVDR3RUdNU2o0Q0JiYTkwVXc3cTgKajVyekFIVVdMK0dnM2dzdndQcXFnL2JmMTR2TzQ2clRkR1g0Q2hzQ0F3RUFBYU5tTUdRd0RnWURWUjBQQVFILwpCQVFEQWdFR01CSUdBMVVkRXdFQi93UUlNQVlCQWY4Q0FRSXdIUVlEVlIwT0JCWUVGRFJTakhxMm0wVWVFM0JmCks2bDZJUUpPU2Vzck1COEdBMVVkSXdRWU1CYUFGRFJTakhxMm0wVWVFM0JmSzZsNklRSk9TZXNyTUEwR0NTcUcKU0liM0RRRUJDd1VBQTRJQkFRQUsyZXhBY2VhUndIRU9rQXkxbUsyWlhad1Q1ZC9jRXFFMmZCTmROTXpFeFJSbApnZDV0aGwvYlBKWHRSeWt0aEFUdVB2dzBjWVFPM1gwK09QUGJkOHl6dzRsZk5Ka1FBaUlvRUJUZEQvZWdmODFPCmxZOCtrRFhxZ1FZdFZLQm9HSGt
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值