系统限制

1.系统软件版本

  • Linux kernel >= 4.9.17
  • clang+LLVM >= 10.0
  • iproute2 with eBPF templating patches
  • Key-Value store etcd >= 3.1.0 or consul >= 0.6.4

上述限制,后三点只在本地部署Cilium时有要求。

245 以上的 systemd 版本,会导致Pod到节点之外IPV4流量异常,官方文档提供了以下解决方案:

1
2
echo 'net.ipv4.conf.lxc*.rp_filter = 0' > /etc/sysctl.d/99-override_cilium_rp_filter.conf
systemctl restart systemd-sysctl

参考ISSUE:https://github.com/cilium/cilium/issues/10645

由于部分用户手工编译的内核可能关闭某些eBPF功能,影响cilium功能的使用,可以参考以下页面了解Cilium需要内核限制以及版本要求:

内核配置:https://docs.cilium.io/en/stable/operations/system_requirements/#linux-kernel

高级功能的内核版本要求:https://docs.cilium.io/en/stable/operations/system_requirements/#required-kernel-versions-for-advanced-features

2.防火墙限制

参考:https://docs.cilium.io/en/stable/operations/system_requirements/#firewall-rules

Helm安装

Cilium 部署完成后,包括以下组件:

  • Cilium Agent:通过DS方式部署在所有节点,并通过监听编排服务的event管理Linux内核中的eBPF程序。Cilium Agent 会动态生成BPF代码,并使用LLVM进行编译,最后使用eBPF loader将代码加载到内核。
  • Cilium Cli:每个Agent容器内都集成了Cilium工具,该工具用于调试或者获取当前节点上Cilium以及BPF的一些信息。(PS:直接将二进制文件CP到宿主机也可以运行)
  • Operator:虽然Operator故障不会影响已有网络的可用性,但是会导致IPAM不可用,以及Agent重启。
  • CNI Plugin
  • Hubble
    • Server:嵌入到Cilium Agent服务中,用来收集流量信息
    • Relay:Hubble Server的中继服务,通过gRPC连接每个Hubble Server
    • Hubble Cli
    • Graphical UI

1.部署Cilium

使用Helm安装cilium版本,以下命令cilium完全替换kube-proxy:

1
2
3
4
5
6
helm repo add cilium https://helm.cilium.io/ 
helm upgrade --install cilium cilium/cilium --version=1.10.4 -n kube-system \
--set k8sServiceHost=lb.kubesphere.local \
--set k8sServicePort=6443 \
--set kubeProxyReplacement=strict \
--set ipam.operator.clusterPoolIPv4PodCIDR: "30.0.0.0/8"

部署完成后,cilium-operator会重启所有非Host网络的POD,如果需要避免主机上的POD被重启,可以添加到指定节点 node.cilium.io/agent-not-ready

Cilium 除了Helm安装之外还提供了命令行工具cilium-cli

部署完成后可以使用cilium-cli执行以下命令验证集群联通性:

1
cilium connectivity test

2.部署Hubble

1
2
3
4
5
helm upgrade cilium cilium/cilium --version 1.10.4 \
   --namespace kube-system \
   --reuse-values \
   --set hubble.relay.enabled=true \
   --set hubble.ui.enabled=true

hubble 同样提供了命令行工具hubble,通过命令行工具可以范围hubble的API

1
2
3
4
5
6
# 映射hubble的端口到本地
cilium hubble port-forward
# hubble 服务状态
hubble status
# Dump当前连接信息
hubble observe

3. 部署DSR模式

部署 DSR 模式时需要关闭 tunnel,参考部署方式如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
kubeConfigPath: "/etc/kubernetes/admin.conf"
k8sServiceHost: "127.0.0.1"
k8sServicePort: 6443
kubeProxyReplacement: strict
ipam:
  operator:
    clusterPoolIPv4PodCIDR: "172.31.254.0/23"
    clusterPoolIPv4PodCIDRList: []
    clusterPoolIPv4MaskSize: 26
# Client Source IP Preservation
tunnel: disabled
autoDirectNodeRoutes: true
ipv4NativeRoutingCIDR: ""
loadBalancer:
  mode: dsr