helm的1.15.0版本Cilium关闭vxlan,集成flannel
时间: 2025-07-30 20:12:21 浏览: 5
<think>我们有两个需求:1. 关闭VXLAN 2. 与Flannel集成
根据Cilium官方文档,Cilium可以与Flannel集成,使用Flannel的L2网络(如VXLAN)进行基础网络连接,而Cilium则提供网络策略和负载均衡等功能。这种模式下,Cilium会使用Flannel分配的IP地址。
步骤:
1. 部署Flannel(如果尚未部署)
2. 部署Cilium并配置为与Flannel集成,同时关闭Cilium自身的VXLAN隧道。
注意:在集成模式下,Cilium会使用Flannel的网络,因此需要关闭Cilium的隧道功能(包括VXLAN)。
具体配置(通过Helm):
- 设置 `flannel.enabled=true` 以启用Flannel集成
- 设置 `flannel.uninstall=false` 以避免在卸载Cilium时移除Flannel
- 设置 `tunnel=disabled` 来关闭Cilium的隧道(包括VXLAN)
- 设置 `ipv4NativeRoutingCIDR` 为Flannel的Pod CIDR,以启用本地路由
另外,需要确保Flannel已经正确配置了Pod CIDR,并且Cilium使用相同的CIDR。
假设Flannel使用的Pod CIDR是`10.244.0.0/16`(这是Flannel的默认值),则Helm安装命令如下:
```bash
helm install cilium cilium/cilium --version 1.15.0 \
--namespace kube-system \
--set flannel.enabled=true \
--set flannel.uninstall=false \
--set tunnel=disabled \
--set ipv4NativeRoutingCIDR=10.244.0.0/16
```
注意:如果Flannel使用的CIDR不是默认值,请替换为实际的CIDR。
另外,还需要注意,在集成模式下,Cilium会使用Flannel的接口(通常是cni0)来获取节点的IP地址。可以通过设置`flannel.masterDevice`来指定接口,但通常可以自动检测。
验证:
安装后,可以检查Cilium的日志和状态,确认隧道模式为disabled,并且与Flannel集成正常。
问题:如果Flannel已经部署,那么Cilium会作为CNI链中的一个插件,通过Flannel的配置文件来协同工作。但请注意,在安装Cilium之前,需要确保Flannel已经运行,并且网络正常工作。
如果集群中已经部署了Flannel,为了避免冲突,我们不需要再次安装Flannel,只需在Cilium中启用Flannel集成即可。但是,如果Flannel的配置不是默认的,需要确保Cilium的配置与其匹配。
重要:在安装Cilium之前,需要将kube-proxy替换为Cilium的kube-proxy替代品,或者禁用kube-proxy(如果使用Cilium的kube-proxy替代功能)。但是,在Flannel集成模式下,通常Flannel会要求kube-proxy存在,所以这里需要根据实际情况决定。Cilium官方文档建议在Flannel集成模式下,仍然使用kube-proxy。
因此,我们不需要禁用kube-proxy。Cilium在Flannel集成模式下不会替换kube-proxy的功能。
总结步骤:
1. 确保Flannel已经部署,并且Pod CIDR已知(假设为10.244.0.0/16)。
2. 使用上述Helm命令安装Cilium,并设置相关参数。
如果集群中已经运行了kube-proxy,则无需额外操作。如果未运行,则需要部署kube-proxy。
注意:在安装Cilium之前,需要确保Flannel的Pod正常运行,并且节点已经分配了Pod CIDR。
如果遇到问题,可以检查Cilium的日志:
```bash
kubectl -n kube-system logs -l k8s-app=cilium
```
相关问题:
1. 如何确认Flannel使用的Pod CIDR?
2. 在集成Flannel时,Cilium和Flannel分别负责哪些功能?
3. 如何验证Cilium和Flannel集成成功?
4. 集成后如何实施网络策略?
5. 在集成模式下,如何升级Flannel或Cilium?</think>### 在 Cilium 1.15.0 中关闭 VXLAN 并集成 Flannel 的配置指南
#### 核心配置步骤(通过 Helm 实现)
1. **禁用 VXLAN 隧道模式**
修改 Helm 值文件 `cilium-values.yaml`:
```yaml
tunnel: disabled # 关闭 VXLAN 隧道
ipv4NativeRoutingCIDR: "10.244.0.0/16" # 需与 Flannel 的 Pod CIDR 一致
```
2. **启用 Flannel 集成**
在同一个值文件中添加:
```yaml
flannel:
enabled: true
uninstall: false # 防止卸载 Cilium 时删除 Flannel
```
3. **部署命令**
```bash
helm upgrade cilium cilium/cilium --version 1.15.0 \
-n kube-system \
-f cilium-values.yaml \
--set kubeProxyReplacement=strict \
--set k8sServiceHost=${API_SERVER_IP} \
--set k8sServicePort=6443
```
#### 关键配置说明
| 参数 | 值 | 作用 |
|------|----|------|
| `tunnel` | `disabled` | 完全关闭 VXLAN 隧道 |
| `ipv4NativeRoutingCIDR` | Flannel 的 Pod CIDR | 让 Cilium 直接路由流量 |
| `flannel.enabled` | `true` | 激活 Flannel 集成模式 |
| `kubeProxyReplacement` | `strict` | 用 eBPF 替代 kube-proxy[^1] |
#### 验证配置
1. **检查隧道状态**:
```bash
kubectl exec -it <cilium-pod> -- cilium status | grep Tunnel
# 正确输出:Tunnel: Disabled
```
2. **验证 Flannel 集成**:
```bash
kubectl logs <cilium-pod> | grep flannel
# 应出现 "Using flannel for network configuration"
```
3. **测试网络连通性**:
```bash
cilium connectivity test --test-namespace=default
```
#### 注意事项
1. **CIDR 一致性要求**
`ipv4NativeRoutingCIDR` 必须与 Flannel 配置的 Pod CIDR 完全匹配(默认 `10.244.0.0/16`),否则会导致网络分区[^2]。
2. **内核要求**
需 Linux 内核 ≥ 4.19(推荐 ≥ 5.10),否则 eBPF 路由可能不稳定:
```bash
uname -r | awk -F. '$1>=5 && $2>=10 {print "OK"}'
```
3. **端口冲突预防**
检查 VXLAN 默认端口 8472 是否释放:
```bash
ss -ulpn | grep 8472 # 应无输出
```
#### 故障排查
- **Flannel 无法分配 IP**:检查 `kube-flannel-cfg` ConfigMap 中的 `Network` 字段
- **Cilium 启动失败**:检查内核日志 `dmesg | grep -i bpf`
- **跨节点通信失败**:验证节点防火墙是否放行 TCP/8472 (UDP) 端口
---
### 相关问题
1. 如何确认 Flannel 当前使用的 Pod CIDR?
2. 在混合内核版本的集群中部署有哪些注意事项?
3. 如何验证 eBPF 替代 kube-proxy 是否完全生效?
4. Cilium-Flannel 集成模式下网络策略如何生效?
5. 从传统 CNI 迁移到 Cilium+Flannel 的最佳实践?
[^1]: 当启用 `kubeProxyReplacement=strict` 时,Cilium 会完全接管 Service 流量转发
[^2]: CIDR 不匹配会导致路由黑洞,需通过 `kubectl describe node` 确认实际 CIDR
阅读全文
相关推荐



















