k8s

cilium部署

axing
2025-12-23 / 0 评论 / 2 阅读 / 正在检测是否收录...

一、cilium介绍

Cilium 本质上是一个 Kubernetes 的网络与安全组件(通常以 CNI 插件的身份安装),它用 eBPF 在 Linux 内核里实现:Pod/Service 的转发、网络策略(NetworkPolicy)、可观测性(流量可视化/追踪)、负载均衡,甚至部分服务网格能力。

可以把它理解成:“把 Kubernetes 网络、负载均衡和安全策略,尽量下沉到内核里做”,相比传统 iptables 方案更高性能、更可观测、策略能力更强。

二、cilium是什么

在 K8s 里,想让 Pod 能互通、能访问 Service、能做 NetworkPolicy,需要一个网络方案。Cilium 通常承担这些职责:
  1. CNI(容器网络接口):给 Pod 分配 IP、配置路由/隧道/网卡,把 Pod 接入集群网络
  2. Service 负载均衡实现:让访问 ClusterIP/NodePort/LoadBalancer 服务能正确转发到后端 Pod
  3. 网络安全策略:实现 Kubernetes NetworkPolicy,甚至更强的 L3/L4/L7(HTTP/gRPC/DNS)策略
  4. 网络可观测性:看到“谁在跟谁说话、延迟多少、丢包在哪里、命中了哪些策略”
  5. (可选)替代 kube-proxy:用 eBPF 实现 Service 转发(kube-proxy replacement)

三、cilium有什么用(解决了哪些痛点)

A. 更快、更稳的转发与负载均衡
传统 kube-proxy 依赖 iptables/ipvs,规则多了会膨胀、调试困难。Cilium 用 eBPF 做转发和 LB:
  1. 内核态快速转发(少走用户态/少遍历规则)
  2. 大规模 Service/Endpoint 场景下更稳定
  3. 更容易观测“为什么这次转发去了哪个后端、命中什么规则”

B. 更强的安全能力(不仅是“允许/拒绝”)
K8s 原生 NetworkPolicy 更多是 L3/L4(IP/端口)。Cilium 能做到更细:
  1. 按 Pod 标签、命名空间、服务账户 做策略(身份感更强)
  2. L7 策略(可选,通常依赖 Envoy):
  3. 允许某些 HTTP Path / Method
  4. gRPC 服务/方法级别控制
  5. DNS 解析策略(允许访问哪些域名)

C. 可观测性(排障神器)
Cilium 自带/配套 Hubble(可选)可以做到:
  1. 实时看流量(flow logs):谁访问了谁、是允许还是被拒绝、RTT、丢包
  2. 快速定位:是 DNS 问题?策略拦了?还是 Service LB 选后端异常?

D. 可选的高级能力(看你是否启用)
不同环境会选用其中一部分能力:
  1. 透明加密(节点间/Pod 间加密)
  2. BGP/路由通告(部分场景下替代或配合传统 LB)
  3. Gateway API / Ingress(通过 cilium-envoy)
  4. 多集群互联(ClusterMesh)

三、cilium是怎么工作的(核心:eBPF 数据面)

关键点:eBPF
eBPF 是 Linux 内核机制,允许把程序挂到内核的网络钩子上(如 tc、XDP、cgroup),从而:
  1. 在包进入/离开网卡、进入容器、进入 socket 前后做处理
  2. 实现 NAT、负载均衡、策略过滤、可观测统计
  3. 尽量减少 iptables 链式规则带来的复杂性

Cilium 常见组件(你 kubectl get pod -n kube-system 看到的那些)
  1. cilium (DaemonSet):每个节点一个 agent,负责该节点上的转发/策略/eBPF 程序装载
  2. cilium-operator (Deployment):做控制面工作(例如管理 IPAM、节点资源、状态同步等)
  3. cilium-envoy (DaemonSet,可选):用于 L7 能力/Gateway/Ingress 等(不是所有场景都必须)

四、IPAM 是什么

IPAM = IP Address Management,就是“Pod 的 IP 从哪里来、怎么分配、怎么回收”。
Cilium 支持多种 IPAM 模式(不同环境选不同方式),常见两类理解:
  1. kubernetes 模式:Pod IP 通常来自每个节点的 PodCIDR(例如你看到的 10.244.x.x)
  2. cluster-pool / 等模式:由 Cilium 自己维护一个地址池分配(适合一些特定架构或需要 Cilium 管理地址的场景)

遇到的现象(Helm 改了 ipam.mode=kubernetes 但不重启不生效)很符合实际(后面案例会详解):
ConfigMap 改了 ≠ agent 自动 reload,Cilium agent 还是用旧配置跑着,所以要 rollout restart 让它重新读取配置并重新装载相关 datapath

五、什么时候适合用 Cilium

很适合这些场景:
  1. 集群规模比较大、Service/Endpoint 多,追求性能和稳定性
  2. 对 NetworkPolicy 有较强需求,想要更细粒度的安全控制
  3. 经常排查网络问题,希望“看得见流量”
  4. 想减少 kube-proxy/iptables 的复杂度

不一定要上满功能(比如 L7、Gateway、加密、BGP),很多团队只用它当高性能 CNI + NetworkPolicy + 可观测性,就已经很值了。
只要你的业务是多副本/有滚动策略,通常只是“抖一下”,不会全断;单副本服务会有短暂不可用,这是任何 CNI 迁移都绕不开的。
0

评论 (0)

取消