[TOC]
# 封装
当未提供配置时,Cilium 会自动在此模式下运行,因为它是对底层网络基础设施要求最低的模式。
在此模式下,所有集群节点使用基于 UDP 的封装协议 VXLAN 或 Geneve 形成隧道网格。 Cilium 节点之间的所有流量都被封装。
## 对网络的要求
- 封装依赖于正常的节点到节点连接。 这意味着如果 Cilium 节点已经可以相互到达,则所有路由要求都已满足。
- 底层网络和防火墙必须允许封装数据包:
| 封装方式 | 端口范围/协议 |
| :-: | :-: |
| VXLAN (Default) | 8472/UDP |
| Geneve | 6081/UDP |
## 该模型的优点
- 简单
连接集群节点的网络不需要了解 PodCIDR。 集群节点可以产生多个路由或链路层域。 只要集群节点可以使用 IP/UDP 相互访问,底层网络的拓扑结构就无关紧要。
- 寻址空间
由于不依赖于任何底层网络限制,可用的寻址空间可能会更大,并且如果相应配置了 PodCIDR 大小,则允许每个节点运行任意数量的 pod。
- 自动配置
当与 Kubernetes 等编排系统一起运行时,集群中所有节点的列表(包括其关联的分配前缀节点)将自动可供每个代理使用。 加入集群的新节点将自动合并到网格中。
- 身份上下文
封装协议允许随网络数据包一起携带元数据。 Cilium 利用此功能来传输元数据,例如源安全身份。 身份传输是一种优化,旨在避免在远程节点上进行一次身份查找。
## 该模型的缺点
- MTU 开销
由于添加了封装标头,有效负载可用的有效 MTU 低于本机路由(VXLAN 每个网络数据包 50 字节)。 这会导致特定网络连接的最大吞吐量降低。 通过启用巨型帧(每 1500 字节 50 字节的开销 vs 每 9000 字节 50 字节的开销)可以在很大程度上缓解这一问题。
# 主机路由
本地路由数据路径使用 `tunnel: disabled` 启用并启用本机数据包转发模式。本地数据包转发模式利用 Cilium 运行的网络的路由功能,而不是执行封装。网络性能基本与主机相差不远。
![](https://docs.cilium.io/en/stable/_images/native_routing.png)
在本机路由模式下,Cilium 会将所有未发送至另一个本地端点的数据包委托给 Linux 内核的路由子系统。 这意味着数据包将被路由,就像本地进程发出数据包一样。 因此,连接集群节点的网络必须能够路由 PodCIDR。
配置本机路由时,Cilium 会自动在 Linux 内核中启用 IP 转发。
## 对网络的要求
- 为了运行本机路由模式,连接运行 Cilium 的主机的网络必须能够使用为 Pod 或其他工作负载提供的地址转发 IP 流量。
- 节点上的 Linux 内核必须知道如何转发运行 Cilium 的所有节点的 pod 数据包或其他工作负载。 这可以通过两种方式实现:
1. 节点本身不知道如何路由所有 pod IP,但网络上存在一个知道如何到达所有其他 pod 的路由器。在这种情况下,Linux 节点配置为包含指向此类路由器的默认路由。该模型用于云提供商网络集成。
2. 每个单独的节点都知道所有其他节点的所有 Pod IP,并且路由被插入到 Linux 内核路由表中来表示这一点。如果所有节点共享一个 L2 网络,则可以通过启用 `auto-direct-node-routes: true` 选项来解决此问题。否则,必须运行额外的系统组件(例如 BGP 守护程序)来分发路由。请参阅 使用 kube-router 运行 BGP 指南,了解如何使用 kube-router 项目实现此目的。
>[info] 测试主机是否为二层网络可达:
> 1. 当在执行ping主机时,两台主机是否都有学习到对方mac地址 `arp -a`
> 2. 使用 `arping` 命令探测
## 配置
必须设置以下配置选项以在本地路由模式下运行数据路径:
- tunnel: disabled:启用本机路由模式。
- ipv4-native-routing-cidr: x.x.x.x/y:设置可以执行本机路由的 CIDR。
# 确认当前模式
```shell
# 查看网络route模式
crictl logs `crictl ps --name cilium-agent -q` 2>&1 | egrep "native-routing|tunnel|auto-direct"
```
# 修改路由模式
从封装改成主机路由模式
```shell
# 获取当前版本号
cilium_version=$(helm -n kube-system ls | awk '/cilium/ {print $NF}')
echo $cilium_version
# 备份上一次安装的参数
helm -n kube-system get values cilium > cilium_custom.yaml
sed -i '1d' cilium_custom.yaml
# 添加参数
cat <<EOF | tee -a cilium_custom.yaml >> /dev/null
# 禁止设置隧道
tunnel: disabled
# 设置可执行本地路由的CIDR
ipv4NativeRoutingCIDR: 10.0.0.0/16
# 所有k8s节点在二层网络,则使用该参数。
autoDirectNodeRoutes: true
EOF
# 修改参数
helm -n kube-system upgrade cilium cilium/cilium --version $cilium_version -f cilium_custom.yaml
# 重启cilium
kubectl -n kube-system rollout restart daemonset cilium
kubectl -n kube-system rollout status daemonset cilium
# 验证
crictl logs `crictl ps --name cilium-agent -q` 2>&1 | egrep "native-routing|tunnel|auto-direct"
```
- 前言
- 架构
- 部署
- kubeadm部署
- kubeadm扩容节点
- 二进制安装基础组件
- 添加master节点
- 添加工作节点
- 选装插件安装
- Kubernetes使用
- k8s与dockerfile启动参数
- hostPort与hostNetwork异同
- 应用上下线最佳实践
- 进入容器命名空间
- 主机与pod之间拷贝
- events排序问题
- k8s会话保持
- 容器root特权
- CNI插件
- calico
- calicoctl安装
- calico网络通信
- calico更改pod地址范围
- 新增节点网卡名不一致
- 修改calico模式
- calico数据存储迁移
- 启用 kubectl 来管理 Calico
- calico卸载
- cilium
- cilium架构
- cilium/hubble安装
- cilium网络路由
- IP地址管理(IPAM)
- Cilium替换KubeProxy
- NodePort运行DSR模式
- IP地址伪装
- ingress使用
- nginx-ingress
- ingress安装
- ingress高可用
- helm方式安装
- 基本使用
- Rewrite配置
- tls安全路由
- ingress发布管理
- 代理k8s集群外的web应用
- ingress自定义日志
- ingress记录真实IP地址
- 自定义参数
- traefik-ingress
- traefik名词概念
- traefik安装
- traefik初次使用
- traefik路由(IngressRoute)
- traefik中间件(middlewares)
- traefik记录真实IP地址
- cert-manager
- 安装教程
- 颁布者CA
- 创建证书
- 外部存储
- 对接NFS
- 对接ceph-rbd
- 对接cephfs
- 监控平台
- Prometheus
- Prometheus安装
- grafana安装
- Prometheus配置文件
- node_exporter安装
- kube-state-metrics安装
- Prometheus黑盒监控
- Prometheus告警
- grafana仪表盘设置
- 常用监控配置文件
- thanos
- Prometheus
- Sidecar组件
- Store Gateway组件
- Querier组件
- Compactor组件
- Prometheus监控项
- grafana
- Querier对接grafana
- alertmanager
- Prometheus对接alertmanager
- 日志中心
- filebeat安装
- kafka安装
- logstash安装
- elasticsearch安装
- elasticsearch索引生命周期管理
- kibana安装
- event事件收集
- 资源预留
- 节点资源预留
- imagefs与nodefs验证
- 资源预留 vs 驱逐 vs OOM
- scheduler调度原理
- Helm
- Helm安装
- Helm基本使用
- 安全
- apiserver审计日志
- RBAC鉴权
- namespace资源限制
- 加密Secret数据
- 服务网格
- 备份恢复
- Velero安装
- 备份与恢复
- 常用维护操作
- container runtime
- 拉取私有仓库镜像配置
- 拉取公网镜像加速配置
- runtime网络代理
- overlay2目录占用过大
- 更改Docker的数据目录
- Harbor
- 重置Harbor密码
- 问题处理
- 关闭或开启Harbor的认证
- 固定harbor的IP地址范围
- ETCD
- ETCD扩缩容
- ETCD常用命令
- ETCD数据空间压缩清理
- ingress
- ingress-nginx header配置
- kubernetes
- 验证yaml合法性
- 切换KubeProxy模式
- 容器解析域名
- 删除节点
- 修改镜像仓库
- 修改node名称
- 升级k8s集群
- 切换容器运行时
- apiserver接口
- 其他
- 升级内核
- k8s组件性能分析
- ETCD
- calico
- calico健康检查失败
- Harbor
- harbor同步失败
- Kubernetes
- 资源Terminating状态
- 启动容器报错