首页 > 其他分享 >Cilium DSR 特性(转载)

Cilium DSR 特性(转载)

时间:2024-07-12 10:41:10浏览次数:11  
标签:set 节点 -- DSR dsr cilium 172.18 转载 Cilium

Cilium DSR(转载)

一、环境信息

主机 IP
ubuntu 10.0.0.234
软件 版本
docker 26.1.4
helm v3.15.0-rc.2
kind 0.18.0
kubernetes 1.23.4
ubuntu os Ubuntu 22.04.6 LTS
kernel 5.15.0-106 内核升级文档

使用 5.11.5 内核版本的 20.04 版本,发起 curl 请求无法代理到 pod 上去 curl: (7) Failed to connect to 172.18.0.2 port 32000: Connection refused,换成了 22.04 默认的 5.15 内核版本,可能是 dsr 对内核有要求

二、Cilium DSR 模式架构对比

传统模式下:

  • 外部流量通过 NodePort、ExternalIPs 或 LoadBalancer 访问 Kubernetes 服务,当backend pod运行在与请求发送到的节点不同的节点上时,Kubernetes 工作节点可能会将请求重定向到远程节点。

  • 请求将经过 SNAT处理,这也会导致后端不会看到客户端的源 IP 地址。此外,后端的回程报文将通过初始节点(在该节点执行反向 SNAT 转换)再发送回客户端,这会引入额外的网络开销和延迟。

img


Cilium Direct server return(DSR)模式:

  • 虽然Kubernetes 提供了 externalTrafficPolicy=Local,如果接收请求的节点不运行任何后端pod,它会通过删除对服务的请求来保留客户端源 IP 地址(访问失败)。然而,这也会使负载均衡的实现变得更加复杂,并可能导致负载均衡失效。
  • 为了解决上述问题从cilium 1.7开始,借助ebpf实现了direct server return,从而加速了南北向流量的通信效率(在向客户端回包时避免额外的一跳),同时也增加了保持客户端源IP特性。

img

三、Cilium DSR 模式的约束

  • Cilium DSR 不支持在VXLAN模式下运行,只能在native routing模式下运行。UDP报文没有SYN包。对于 TCP 服务,Cilium 仅对 SYN 数据包的服务 IP/端口进行编码

  • 由于underlay 网路结构可能会删除 cilium特定的ip包的扩展头信息,因此在某些公共云提供商环境中使用 DSR 模式可能不起作用。

  • 在某些实施源/目标 IP 地址检查(例如 AWS)的公共云提供商环境中,必须禁用该检查才能使 DSR 模式正常工作

四、Cilium DSR 模式环境搭建

kind 配置文件信息

root@kind:~# cat install.sh

#!/bin/bash
date
set -v

# 1.prep noCNI env
cat <<EOF | kind create cluster --name=cilium-dsr --image=kindest/node:v1.23.4 --config=-
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
networking:
  # kind 默认使用 rancher cni,cni 我们需要自己创建
  disableDefaultCNI: true
  # kind 安装 k8s 集群需要禁用 kube-proxy 安装,是 cilium 代替 kube-proxy 功能
  kubeProxyMode: "none"
nodes:
  - role: control-plane
  - role: worker
  - role: worker

containerdConfigPatches:
- |-
  [plugins."io.containerd.grpc.v1.cri".registry.mirrors."harbor.evescn.com"]
    endpoint = ["https://harbor.evescn.com"]
EOF

# 2.remove taints
controller_node_ip=`kubectl get node -o wide --no-headers | grep -E "control-plane|bpf1" | awk -F " " '{print $6}'`
# kubectl taint nodes $(kubectl get nodes -o name | grep control-plane) node-role.kubernetes.io/master:NoSchedule-
kubectl get nodes -o wide

# 3.install cni
helm repo add cilium https://helm.cilium.io > /dev/null 2>&1
helm repo update > /dev/null 2>&1

helm install cilium cilium/cilium \
  --set k8sServiceHost=$controller_node_ip \
  --set k8sServicePort=6443 \
  --version 1.13.0-rc5 \
  --namespace kube-system \
  --set debug.enabled=true \
  --set debug.verbose=datapath \
  --set monitorAggregation=none \
  --set ipam.mode=cluster-pool \
  --set cluster.name=cilium-dsr \
  --set kubeProxyReplacement=strict \
  --set tunnel=disabled \
  --set autoDirectNodeRoutes=true \
  --set ipv4NativeRoutingCIDR="10.0.0.0/8" \
  --set bpf.masquerade=true \
  --set installNoConntrackIptablesRules=true \
  --set loadBalancer.mode=dsr

# 4.install necessary tools
for i in $(docker ps -a --format "table {{.Names}}" | grep cilium) 
do
    echo $i
    docker cp /usr/bin/ping $i:/usr/bin/ping
    docker exec -it $i bash -c "sed -i -e 's/jp.archive.ubuntu.com\|archive.ubuntu.com\|security.ubuntu.com/old-releases.ubuntu.com/g' /etc/apt/sources.list"
    docker exec -it $i bash -c "apt-get -y update >/dev/null && apt-get -y install net-tools tcpdump lrzsz bridge-utils >/dev/null 2>&1"
done

--set 参数解释

  1. --set kubeProxyReplacement=strict

    • 含义: 启用 kube-proxy 替代功能,并以严格模式运行。
    • 用途: Cilium 将完全替代 kube-proxy 实现服务负载均衡,提供更高效的流量转发和网络策略管理。
  2. --set tunnel=disabled

    • 含义: 禁用隧道模式。
    • 用途: 禁用后,Cilium 将不使用 vxlan 技术,直接在主机之间路由数据包,即 direct-routing 模式。
  3. --set autoDirectNodeRoutes=true

    • 含义: 启用自动直接节点路由。
    • 用途: 使 Cilium 自动设置直接节点路由,优化网络流量。
  4. --set ipv4NativeRoutingCIDR="10.0.0.0/8"

    • 含义: 指定用于 IPv4 本地路由的 CIDR 范围,这里是 10.0.0.0/8
    • 用途: 配置 Cilium 使其知道哪些 IP 地址范围应该通过本地路由进行处理,不做 snat , Cilium 默认会对所用地址做 snat。
  5. --set bpf.masquerade

    • 含义: 启用 eBPF 功能。
    • 用途: 使用 eBPF 实现数据路由,提供更高效和灵活的网络地址转换功能。
  6. --set installNoConntrackIptablesRules=true:

    • 安装无连接跟踪的 iptables 规则,这样可以减少 iptables 规则集中的连接跟踪负担。
  7. --set loadBalancer.mode=dsr:

    • 设置负载均衡器(Load Balancer)的模式为 DSR(Direct Server Return),这是一种负载均衡技术,允许负载均衡器将数据包直接发送回源服务器,而不是经过负载均衡器本身。
  • 安装 k8s 集群和 cilium 服务
root@kind:~# ./install.sh

Creating cluster "cilium-dsr" ...
 ✓ Ensuring node image (kindest/node:v1.23.4) 

标签:set,节点,--,DSR,dsr,cilium,172.18,转载,Cilium
From: https://www.cnblogs.com/evescn/p/18297815

相关文章

  • 查看SQLServer最耗资源时间的SQL语句(转载)
    sqlserver中,如果想知道有哪些语句是执行效率不高的,应该如何查看呢?下面就将为您介绍sqlserver中如何查看执行效率不高的语句,供您参考。 1.找出执行时间最长的10条SQL(适用于SQLSERVER2005及其以上版本)Sql代码SELECTtop10(total_elapsed_time/execution_count)......
  • Cilium Socket LB 特性
    CiliumSocketLB一、环境信息主机IPubuntu172.16.94.141软件版本docker26.1.4helmv3.15.0-rc.2kind0.18.0kubernetes1.23.4ubuntuosUbuntu20.04.6LTSkernel5.11.5内核升级文档二、CiliumSocketLB模式认知负载均衡的实......
  • 【转载】如何完整删除Windows.old(详细教程)
    原文链接:https://blog.csdn.net/bluewn/article/details/104325594当你升级或重新安装Windows时,你的旧文件可能会被放在C:驱动器上的一个文件夹中,这个文件夹的标签是Windows.old。这对于检索旧文件非常有用,但它会占用计算机上的一大块空间。你不能像删除大多数文件夹那样删除文......
  • 【转载】App Inventor 开发BLE应用
    1.文章1:搭建环境的介绍:【深海王国】小学生都能做的APP?AppInventor、BLE蓝牙、Arduino联合开发你的第一个手机远程控制程序(1)链接:https://blog.csdn.net/D13162580021/article/details/139026624?spm=1001.2014.3001.5502 2.文章2:BLE基本知识的介绍:【深海王国】小学生都能做......
  • 【转载】WSL没有eth0 ip问题的共鸣
    看到flyqihua的文章讲了eth0没有ip,深有同感,所以转载文章,以作纪念今天重新安装了wslubuntu系统(不管是哪个版本,我都试过),但是使用ipa的时候就是看不见ip,甚至使用servicenetworkstop,都直接报告没有network服务,折腾了3个小时,最后发现是之前使用过留下的痕迹,在当前用户目录下有个.......
  • msaddsr.dll文件丢失导致程序无法运行问题
    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个msaddsr.dll文件(挑选合适的版本文件)把它放......
  • 转载:写给你的金融时间序列分析:回归篇
    转载:写给你的金融时间序列分析:回归篇写给你的金融时间序列分析:回归篇-微信公众平台https://mp.weixin.qq.com/s/WDcAYD3gAqKBKoW0LsLg8g时间序列回归分析并非是简单地将两个序列进行回归处理,而是一个需要精心设计和仔细考量的过程。2024-06-2816:30:44​​作者:......
  • 编译安装Kubernetes 1.29 高可用集群(6)--Cilium网络组件和CoreDNS配置
    1.部署Cilium网络组件1.1在k8s-master节点上,下载安装helmwgethttps://mirrors.huaweicloud.com/helm/v3.15.2/helm-v3.15.2-linux-amd64.tar.gztar-zxvfhelm-v3.15.2-linux-amd64.tar.gzcplinux-amd64/helm/usr/bin/#helmversionversion.BuildInfo{Version:"v3.1......
  • 【转载】SCI审稿过程中的几种状态
    原文地址:http://cjsphd.blog.163.com/blog/static/44718111201191175154300/审稿中涉及到的人:EIC-EditorinChief主编,此人很重要,有稿件最终决定权。ADM-(可能是)Administrator应该是协助主编日常工作的。AE-AssociatedEditor副编辑(就是文章发表后在首页第一栏下方的c......
  • 【转载】告别“低能量”的自己,从“创业狗”变身成“创业疯狗”!
    原作者:互联网怪盗团链接:https://www.woshipm.com/chuangye/6076224.html来源:人人都是产品经理创业是一场九死一生的游戏,你遇到的很多挫折与失败,本质上都拜心魔所赐。学习如何调动自己身心状态,甚至比学习经营管理更重要!最近创业的感受是,我们一定要向顶级运动员学习。运动员的......