k8s环境的calico网络

k8s环境的calico网络

BGP 简介

简单说就是通过 tcp 协议, 各个节点互相交流自身的路由信息的一种方式;
又因为是基于tcp的, 所以可以很方便的跨数据中心交流;

calico 和 flannel 怎么选型

简单说就是网络环境复杂时, 使用 flannel 网络, 因为其封装的特性所以兼容性很好;
适合跨数据中心, 跨云, 跨供应商等场景使用;

如果是可控环境, 即可以很方便的对网络中各个主机单元和网络节点进行管理, 则优先考虑 calico 这种路由模式的网络插件。

calico 简介

简单说就是通过各种路由来代替覆盖网络, 减少了封装和解封装时的性能开销;
但是 calico 也是一个网络框架, 也有多种具体的实现方式;

例如: BGP 模式,IPIP 模式, eBPF 模式

默认配置安装后是采用的 ipip 模式,也是一个覆盖网络, 抓包时可以很明显的看到有两个ip层的报文;
需要修改一些配置才能使用 BGP 模式,BGP 模式时抓包看到的是 源pod和目标pod的包, 不涉及封装相关内容;

BGP 模式简介

首先发包时已经知道应该发送给哪个目标节点(MAC地址是目标节点);
然后如果网络规模很大, 可以发包给路由器,路由器知道将包给哪个正确的节点;

有多种细分模式

  1. Full-mesh 模式,即全网状连接;
    简单说就是和路由器无关; 多个物理节点之间互相沟通路由情况;

  2. bgp rr 模式;
    简单说就是选个几台主机(2个以上)来作为路由反射节点;
    其它主机链接这几个反射节点, 以交流路由信息;

  3. bgp ToR 模式;
    简单说就是节点和物理路由器建立链接, 以获取路由信息

模式选型

看具体的场景

如果就少量的几十个节点, 那么使用 Full-mesh 模式, 就可以,优点是简单, 没有单点等情况;

如果规模比较大 100+ 节点, 可以考虑 rr 反射模式, 选取离散度比较高的2-3台机器就可以;

如果节点数非常多, 可以考虑 tor 模式, 并且使用上多个 AS 来区分机房或区域;

一般情况 200 左右的节点, 可以考虑这种模式

  1. 单个机架或多个机架划分一个 AS,连接同一个 TOR 交换机
  2. tor 交换机与核心路由器, 通过 EBGP 来交换路由信息

calicoctl 工具

用户态管理工具, 主要用途, 监控, 导入导出配置

查看 node 状态

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
[root@wcn7 ~]# calicoctl node status
Calico process is running.

IPv4 BGP status
+--------------+-------------------+-------+------------+-------------+
| PEER ADDRESS |     PEER TYPE     | STATE |   SINCE    |    INFO     |
+--------------+-------------------+-------+------------+-------------+
| 10.2.1.6     | node-to-node mesh | up    | 2023-02-25 | Established |
| 10.2.1.7     | node-to-node mesh | up    | 2023-02-05 | Established |
+--------------+-------------------+-------+------------+-------------+

IPv6 BGP status
No IPv6 peers found.

注意事项

  1. 默认的地址池按 /26 的网段划分成一个 block 进行分配;
    也就是一个块只有 64 个ip地址, 如果主机上的pod数量超了, 则会再分配一个 block;

    一般来说, 我们集群是按 /16 进行规划的 pod 网络, 那么只能分配 1024 个 block;
    但 64 通常是不够的,所以要么划 /25 的 block(最大 512个block),
    要么就要容忍有些节点多, 有些节点少的情况;
    可能会出现地址分配不均匀, 总空闲地址数量很多, 但个别节点已经无ip可分配的情况;

    需要提前做好规划;

Licensed under CC BY-NC-SA 4.0
转载或引用本文时请遵守许可协议,知会作者并注明出处
不得用于商业用途!
最后更新于 2023-03-23 00:00 UTC