Cilium 1.20 配置参数详解

Cilium 1.20 配置参数详解:三层配置体系(helm values → cilium-config ConfigMap → cilium config view 运行时值)的生效链路,按集群身份/数据面路由/IPAM/kube-proxy 替代/网络策略/Hubble/Envoy L7 与 DNS/eBPF 映射八组详解核心参数并附实测值,含 bpf.policyMapMax 修改→验证→回滚的完整实测闭环与键名映射排障实录。

CiliumKubernetes网络配置云原生网络优化k8s2026/10/24

Cilium 1.20 配置参数详解

目标:讲清 Cilium 1.20 的三层配置体系(helm values → cilium-config ConfigMap → 运行时生效配置),按主题详解核心参数并以实测环境真实值佐证,最后给出「改参数 → 验证生效 → 回滚」的完整实测闭环。全部键名与取值均取自本系列实测环境(k3s v1.36.5 单节点 + Cilium 1.20.4,安装与验证过程见《Cilium 1.20 部署指南:在 k3s 上安装与验证》)。

一、三层配置体系

Cilium 的配置链路分三层,理解层级关系是改对参数的前提:

helm values(安装/升级时传入,配置的"源头")
        │  helm 渲染
        ▼
ConfigMap cilium-config(kube-system,Agent 启动时读取的键值文件)
        │  Agent 启动加载
        ▼
cilium config view(Agent 内存中的实际生效值,排障第一入口)

三条实践规则:

  • 改参数只改 values(源头):helm upgrade --set ... 后 helm 会重新渲染 ConfigMap 并滚动重启 Agent,新值才真正生效;
  • 直接手改 ConfigMap 不可靠:Agent 只在启动时读取,改完还得重启 Pod,且下一次 helm 操作会把手改内容整个覆盖回去;
  • 验证只认 cilium config view:它显示 Agent 实际加载的值,是唯一可信的"生效证据"。

二、三个查看命令(实测回显)

2.1 helm values:安装时传了什么

export KUBECONFIG=/etc/rancher/k3s/server/k3s.yaml
helm get values cilium -n kube-system

实测输出(USER-SUPPLIED VALUES 即安装/升级时显式设置的键,与《Cilium 1.20 部署指南:在 k3s 上安装与验证》5.1 的 --set 清单一一对应):

USER-SUPPLIED VALUES:
cluster:
  name: default
hubble:
  relay:
    enabled: true
ipam:
  operator:
    clusterPoolIPv4PodCIDRList: 10.200.0.0/16
k8sServiceHost: 10.89.69.10
k8sServicePort: 6443
kubeProxyReplacement: true
operator:
  replicas: 1
routingMode: tunnel
tunnelProtocol: vxlan

💡 注意:helm get values 只显示显式设置的键。想看 chart 全部键与默认值,用 helm show values cilium/cilium --version 1.20.4(1.20.4 chart 约 7000 行,建议配合 grep 查询单个键)。

2.2 ConfigMap cilium-config:Agent 读什么

kubectl -n kube-system get cm cilium-config -o yaml

实测节选(结构与 2.3 完全一致,键为 kebab-case、值全为字符串):

apiVersion: v1
data:
  agent-not-ready-taint-key: node.cilium.io/agent-not-ready
  auto-direct-node-routes: "false"
  bpf-lb-map-max: "65536"
  bpf-map-dynamic-size-ratio: "0.0025"
  bpf-policy-map-max: "16384"
  bpf-root: /sys/fs/bpf
  cgroup-root: /run/cilium/cgroupv2
  cluster-name: default
  cluster-pool-ipv4-cidr: 10.200.0.0/16
  cluster-pool-ipv4-mask-size: "24"
  debug: "false"
  enable-hubble: "true"
  enable-ipv4: "true"
  enable-ipv6: "false"
  enable-l7-proxy: "true"
  enable-policy: default
  hubble-listen-address: :4244
  ipam: cluster-pool
  kube-proxy-replacement: "true"
  routing-mode: tunnel
  tunnel-protocol: vxlan
kind: ConfigMap
metadata:
  name: cilium-config
  namespace: kube-system

2.3 cilium config view:实际生效的是什么

cilium config view

本环境实测输出共 161 个键。以下按主题摘录相关键值(均为逐行照抄,分组组织见第三节详解):

cluster-name                                      default
cluster-id                                        0
ipam                                              cluster-pool
cluster-pool-ipv4-cidr                            10.200.0.0/16
cluster-pool-ipv4-mask-size                       24
routing-mode                                      tunnel
tunnel-protocol                                   vxlan
datapath-mode                                     veth
enable-tcx                                        true
bpf-root                                          /sys/fs/bpf
cgroup-root                                       /run/cilium/cgroupv2
kube-proxy-replacement                            true
bpf-lb-map-max                                    65536
enable-policy                                     default
enable-k8s-networkpolicy                          true
enable-l7-proxy                                   true
enable-hubble                                     true
hubble-listen-address                             :4244
bpf-policy-map-max                                16384
bpf-map-dynamic-size-ratio                        0.0025
debug                                             false

⚠️ cilium config view 同样依赖 KUBECONFIG 环境变量,未导出时会连不上集群。

三、核心参数分组详解

以下键名均为 cilium config view 的运行时键(kebab-case);「对应 values 键」为 helm chart 的键(camelCase 嵌套),仅在本系列实测确认处标注。

3.1 集群身份

运行时键实测值说明
cluster-namedefault集群名,ClusterMesh 多集群时必须全局唯一(values 键 cluster.name)
cluster-id0集群编号,0 表示未启用 ClusterMesh(单集群默认)
max-connected-clusters255ClusterMesh 最大互联集群数上限
identity-allocation-modecrd安全身份的分配与存储模式(crd 存于 K8s CRD,与 kvstoremesh 区分)
identity-gc-interval15m0s身份垃圾回收周期
synchronize-k8s-nodestrueAgent 与 K8s 节点状态保持同步

3.2 数据面与路由

运行时键实测值说明
routing-modetunnel跨节点组网模式:tunnel(隧道)或 native(原生路由)(values 键 routingMode,实测确认)
tunnel-protocolvxlan隧道协议,可选 vxlan / geneve(values 键 tunnelProtocol,实测确认)
datapath-modeveth本地数据面形态:veth(Pod veth 对)
enable-tcxtrue使用 TCX 挂载 eBPF 程序(内核 6.6+ 的改进挂载点)
auto-direct-node-routesfalse是否自动向路由表注入节点间直连路由(native 模式常用)
bpf-root/sys/fs/bpfeBPF 文件系统挂载点
cgroup-root/run/cilium/cgroupv2cgroup v2 挂载点(socket 级程序挂载用)
enable-ipv4 / enable-ipv6true / false双栈开关,本环境仅 IPv4
enable-ipv4-masqueradetrue出节点流量做 SNAT 伪装

💡 技术拓展:跨节点组网的 tunnel 与 native 两路线对比——

模式原理适用
tunnel(VXLAN/Geneve)节点间打隧道封装 Pod 流量不要求底层网络可路由 Pod 网段,通用性最好
native(原生路由)底层网络直接路由 Pod 网段(配合 BGP 或静态路由)少一层封装性能更好,需网络团队配合

本系列实测环境节点在独立网段、底层无 Pod 网段路由能力,采用默认 tunnel + vxlan。

3.3 IPAM 地址分配

运行时键实测值说明
ipamcluster-pool地址管理模式:cluster-pool(Cilium 自管地址池)/ kubernetes / eni 等
cluster-pool-ipv4-cidr10.200.0.0/16集群 Pod 总网段(values 键 ipam.operator.clusterPoolIPv4PodCIDRList,实测确认)
cluster-pool-ipv4-mask-size24节点分片掩码,每节点从总池切一个 /24
ipam-cilium-node-update-rate15sCiliumNode 对象的同步周期
k8s-require-ipv4-pod-cidrfalse是否强制要求 K8s 节点提供 podCIDR

节点分片与端点分配可通过 CRD 验证(实测回显见《Cilium 1.20 部署指南:在 k3s 上安装与验证》6.5 节:CiliumNode 持有 /24 分片,CiliumEndpoint 展示每个 Pod 的实配 IP)。

3.4 kube-proxy 替代与负载均衡

运行时键实测值说明
kube-proxy-replacementtrueeBPF 全面接管 kube-proxy(values 键 kubeProxyReplacement,实测确认)
bpf-lb-map-max65536Service/后端映射的 eBPF 表容量上限
bpf-lb-external-clusteripfalse是否允许集群外部访问 ClusterIP
node-port-bind-protectiontrue保护 NodePort 端口段不被其他进程占用
enable-auto-protect-node-port-rangetrue自动保护 NodePort 范围配置
default-lb-service-ipamlbipamLoadBalancer Service IP 的分配方式(lbipam 由 LB-IPAM 分配)
enable-lb-ipamtrue启用 LB-IPAM(为 LoadBalancer Service 分配 IP)
service-no-backend-responserejectService 无后端时的响应方式(reject/drop)
enable-service-topologyfalse服务拓扑感知路由

3.5 网络策略

运行时键实测值说明
enable-policydefault策略执行模式:default(被策略选中的端点执行)/ always / never(values 键 policyEnforcementMode,实测确认)
enable-k8s-networkpolicytrue执行标准 K8s NetworkPolicy(networking.k8s.io/v1)
enable-non-default-deny-policiestrue支持非默认 deny 型策略(allow 列表式)
enable-l7-proxytrueL7 层策略经 Envoy 代理执行
policy-deny-responsenonedeny 时的响应包策略(none=静默丢弃)
enable-policy-secrets-synctrue策略引用的 TLS Secret 同步
policy-secrets-namespacecilium-secrets策略 Secret 的专用命名空间
enable-endpoint-lockdown-on-policy-overflowfalse策略映射溢出时是否锁死端点(安全加固项)

3.6 Hubble 可观测

运行时键实测值说明
enable-hubbletrue启用 Hubble(本环境 values 键 hubble.relay.enabled=true 部署 Relay,实测确认)
hubble-listen-address:4244本机 Hubble gRPC 监听地址
hubble-disable-tlsfalseRelay 访问本机 Hubble 时启用 mTLS
hubble-tls-cert-file / key-file / client-ca-files/var/lib/cilium/tls/hubble/...mTLS 证书三件套路径
hubble-network-policy-correlation-enabledtrue流日志关联命中的 NetworkPolicy
enable-metricstrue输出 Prometheus 指标
monitor-aggregationmedium流事件聚合级别:none/low/medium/max(values 键 bpf.monitorAggregation,实测确认)
monitor-aggregation-flagsall聚合维度(按 TCP 标志位等)
monitor-aggregation-interval5s聚合时间窗
envoy-access-log-enabledtrueEnvoy 访问日志(L7 流量记录)

💡 说明:monitor-aggregation 越高,流事件越少、Agent 内存开销越小;做精细流量分析时用 cilium config 配合 hubble observe 查看详情(命令实战见《Cilium 1.20 CLI 命令详解:cilium 与 hubble》)。

3.7 Envoy/L7 代理与 DNS 策略

运行时键实测值说明
external-envoy-proxytrueEnvoy 以独立 DaemonSet 部署(cilium-envoy)
proxy-cluster-max-connections1024Envoy 集群最大连接数
proxy-connect-timeout2代理上游连接超时(秒)
proxy-idle-timeout-seconds60空闲连接超时(秒)
proxy-use-original-source-addresstrue代理保留客户端原始源地址
dnsproxy-enable-transparent-modetrueDNS 代理透明模式(FQDN 策略拦截 DNS)
tofqdns-endpoint-max-ip-per-hostname1000FQDN 策略下每个域名缓存的 IP 上限
tofqdns-proxy-response-max-delay100msDNS 代理响应最大延迟
tofqdns-dns-reject-response-coderefusedFQDN 策略拒绝时返回的 DNS 响应码

3.8 eBPF 映射与性能

运行时键实测值说明
bpf-map-dynamic-size-ratio0.0025动态 map 内存比例(占系统内存的比例)
bpf-policy-map-max16384策略映射表上限(本系列实测修改过该值,见第四节)
bpf-policy-stats-map-max65536策略统计表上限
bpf-lb-map-max65536服务负载均衡表上限
preallocate-bpf-mapsfalse是否预分配 map(true 启动更快、内存占用更高)
bpf-distributed-lrufalse分布式 LRU(大规模节点可开)
enable-ipv4-big-tcpfalseIPv4 BIG TCP(大帧特性,100G 级网络才需要)
unmanaged-pod-watcher-interval15s未托管 Pod 的检测周期

四、修改参数实测闭环(改 → 验 → 回滚)

4.1 键名映射规则与排障实录

helm values 键与运行时键不是同一套命名:values 是 camelCase 嵌套结构,渲染后变成 ConfigMap 的 kebab-case 扁平键。先用 helm show values 确认目标键的准确路径再改。

本系列实测踩过的坑:把运行时键名直接当 values 键传——

# ❌ 错误示范:顶层 kebab 键不是 chart 认识的 values 键
helm upgrade cilium cilium/cilium -n kube-system --reuse-values \
  --set bpf-policy-map-max=32768 --version 1.20.4

执行后 helm get values 能看到值写进了 release,但 chart 模板不渲染未知键,cilium config view 中 bpf-policy-map-max 仍是 16384,即改了等于没改。正确键路径为 bpf.policyMapMax(bpf: 组下的 policyMapMax,chart 默认值 16384)。

4.2 实测:调大策略映射上限到 32768

export KUBECONFIG=/etc/rancher/k3s/server/k3s.yaml
helm upgrade cilium cilium/cilium -n kube-system \
  --reuse-values --set bpf.policyMapMax=32768 --version 1.20.4 --wait

--wait 等待滚动更新完成;随后等待 Agent 全部就绪并验证生效值:

cilium status --wait
cilium config view | grep '^bpf-policy-map-max'

实测输出:

bpf-policy-map-max                                32768

同时确认 helm get values cilium -n kube-system 中出现:

bpf:
  policyMapMax: 32768

⚠️ 涉及 Agent 参数的修改都会触发 cilium DaemonSet 滚动重启(节点上的 eBPF 程序重载),期间新建 Pod 会短暂 Pending,生产环境请在维护窗口操作并先用 cilium status --wait 确认滚动完成。

4.3 实测:回滚到默认值 16384

helm upgrade cilium cilium/cilium -n kube-system \
  --reuse-values --set bpf.policyMapMax=16384 --version 1.20.4 --wait
cilium status --wait
cilium config view | grep '^bpf-policy-map-max'

实测输出:

bpf-policy-map-max                                16384

4.4 cilium CLI 的等价方式

cilium upgrade 同样支持 --set(底层就是 helm upgrade),例如:

cilium upgrade --version 1.20.4 --set bpf.policyMapMax=32768

适用性建议:一次性小改动用 helm upgrade --set(与本系列实测一致);长期配置建议固化到 values 文件(-f cilium-values.yaml)纳入版本管理,避免 --reuse-values 带来的隐式继承。

五、常见配置场景速查

场景values 键(helm)生效验证
更换 Pod 网段ipam.operator.clusterPoolIPv4PodCIDRListcilium config view | grep cluster-pool-ipv4-cidr
换隧道协议为 GenevetunnelProtocol: genevecilium config view | grep tunnel-protocol
切换原生路由routingMode: native + autoDirectNodeRoutes: truecilium config view | grep -E 'routing-mode|auto-direct'
关闭 Hubblehubble.relay.enabled=false + hubble.enabled=falsecilium status 中 Hubble Relay 消失
调策略映射上限bpf.policyMapMaxcilium config view | grep bpf-policy-map-max
调流事件聚合bpf.monitorAggregation: lowcilium config view | grep monitor-aggregation
打开调试日志debug.enabled: truecilium config view | grep '^debug'

(表中命令均为本系列实测命令形态;改后必滚动重启 Agent,验证前先 cilium status --wait。)

六、常见问题

6.1 为什么 cilium config view 的值和 helm values 对不上

两个原因:一是键名映射没对上(4.1 的排障实录,未知键被静默忽略);二是 values 改了但 Agent 还没滚动重启,cilium config view 显示的仍是旧值——用 kubectl -n kube-system rollout status ds/cilium 看滚动进度,完成后旧值才会刷新。

6.2 直接改 ConfigMap 行不行

临时排障可以(改完 kubectl -n kube-system rollout restart ds/cilium 重启 Agent 生效),但下次任何 helm 操作都会覆盖手改内容,且配置漂移无迹可循。正确做法一律走 helm values。

6.3 config view 里有些键是空的(如 devices)

空值表示该项使用自动探测或未启用:devices 为空时 Agent 自动探测承载流量的网卡;kube-proxy-replacement-healthz-bind-address 为空表示未开启健康检查端点。这类键一般不需要显式设置。

6.4 改了参数 Pod 全部 Pending

Agent 滚动重启期间 CNI 未就绪,新 Pod 无法分配网络。等待滚动完成即可自愈;长时间未恢复按《Cilium 1.20 部署指南:在 k3s 上安装与验证》常见问题节排查 Agent 日志。

七、参考链接

本系列导航