eBPF Dataplane

Calico eBPF 的限制条件

  • eBPF 模式仅支持 x86-64,目前官方没有为其他平台构建 eBPF 程序,同时也没有进行过相关测试。
  • eBPF 模式不支持 IPv6、floating IPs、SCTP 等功能。
  • eBPF 模式下需要启动 IP autodetecttion

开启 eBPF Dataplane 的步骤非常简单,如果用户通过 Mainfest 方式部署 Calico 则包括以下几步:

  • 配置 CNI 和 calico-config 直连 APIServer 地址(通过向 calico-node 的三个容器内注入环境变量:KUBERNETES_SERVICE_HOST/KUBERNETES_SERVICE_PORT )
  • calico-node 容器内注入以下环境变量
1
2
3
4
5
6
7
8
9
 # 配置开启 ebpf
 - name: FELIX_BPFENABLED
   value: "true"
 # 配置安装 ebpf 的网络接口
 - name: FELIX_BPFDATAIFACEPATTERN
   value: "^(bond0|vxlan.*$)"
# 开启 BPFLOGLEVEL 日志
 - name: FELIX_BPFLOGLEVEL
   value: Debug

IP autodetection

calico/node 容器支持自动发现每个节点路由的 IP 地址,可以通过指定环境变量 IP_AUTODETECTION_METHOD 配置 calico/node 选择 IP 的策略。

  • first-found:默认方式,枚举所有 IP 地址,选择第一个格式/类型正确的 IP
  • kubernetes-internal-ip:使用 Kubernetes Node 的 Status.Addresses
  • can-reach=DESTINATION:使用能够访问特定地址的首个 IP ,如 can-reach=8.8.8.8
  • interface=INTERFACE-REGEX:基于表达式匹配,如 interface=eth.*
  • skip-interface=INTERFACE-REGEX:基于表达式过滤,如 skip-interface=eth.*
  • cidr=CIDR:基于 ip 所属的网段匹配

Policy for hosts

参考:Policy for hosts

参考

Calico ebpf Data Plane Deep Dive

Felix 服务的配置文件