kube-proxy如何保证规则的一致性

本文是关于Kubernetes service解析的第5章 深入理解Kubernetes service - 你真的理解service吗? 深入理解Kubernetes service - EndpointSlices做了什么? 深入理解Kubernetes service - kube-proxy架构分析 深入理解Kubernetes service - 如何扩展现有的kube-proxy架构 kube-proxy如何保证规则的一致性 所有关于Kubernetes service 部分代码上传至仓库 github.com/cylonchau/kube-haproxy 前景 这里谈 kube-proxy 如何保证规则的一致性以及提升 kube-proxy 性能点的地方,这也是 kubernetes 使用稳定性的一部分。 kube-proxy 如何做到的CRUD kube-proxy 实际上与其他内置 controller 架构是相同的,实际上也属于一个 controller ,但它属于一个 service, endpoints 的可读可写的控制器,node的读控制器。对于CRUD方面,kube-proxy,在设计上分为 增/改 两方面。正如下面代码所示 pkg/proxy/ipvs/proxier.go go 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 func (proxier *Proxier) OnServiceAdd(service *v1.Service) { proxier.OnServiceUpdate(nil, service) } // OnServiceUpdate is called whenever modification of an existing service object is observed....

 ·  · 

扫盲Kubernetes负载均衡 - 从Ingress聊到LB

概述 在之前有一个系列提到了扩展proxier,但可能细心的同学注意到,作为一个外部的LB,市场上存在一些开源的为kubernetes集群提供的LB,这不是舍近求远吗?而 Google工程师 Adam Dunstan 的 文章 [1] 对比了这些LB的区别(中文翻译备份 [2] ),例如: MetalLB:最流行的 负载均衡控制器 PureLB:新产品 (文章作者 Adam Dunstan 参与了 PureLB的开发工作) OpenELB:相对较新的产品,最初该LB仅关注路由方向 文章提出了一个LB实现的基本目标为:必要的简单网络组件,与可扩展的集群操作 启动受控的集群service/应用的外部访问 外部资源的预配置 易于整合自动化的工作流程(CI/CD) 那么这些LB与 kube-proxy 甚至于 IPVS/IPTables 有什么区别呢? 这些LB的核心是为集群service提供一个外部IP,而service功能本身还是由 kube-proxy,IPVS 提供,在这点 MetalLB 介绍中提到了这个问题 In layer 2 mode, all traffic for a service IP goes to one node. From there, kube-proxy spreads the traffic to all the service’s pods. [3] After the packets arrive at the node, kube-proxy is responsible for the final hop of traffic routing, to get the packets to one specific pod in the service....

 ·  · 

深入理解Kubernetes service - EndpointSlices做了什么?

本文是关于Kubernetes service解析的第2章 深入理解Kubernetes service - 你真的理解service吗? 深入理解Kubernetes service - EndpointSlices做了什么? 深入理解Kubernetes service - kube-proxy架构分析 深入理解Kubernetes service - 如何扩展现有的kube-proxy架构 kube-proxy如何保证规则的一致性 所有关于Kubernetes service 部分代码上传至仓库 github.com/cylonchau/kube-haproxy Endpoint Endpoints 就是 service 中后端的server,通常来说 endpoint 与 service是关联的,例如下面的一个endpoints 资源。 yaml 1 2 3 4 5 6 7 8 9 10 11 12 13 apiVersion: v1 kind: Endpoints metadata: name: nginx subsets: - addresses: - ip: 172.17.0.2 - ip: 172.17.0.3 ports: - port: 80 name: "111" # 多个端口需要用name - port: 88 name: "222" 而 Endpoints 资源是由控制平面的 Endpoints controller 进行管理的,主要用于将外部server引入至集群内时使用的,例如Kube-apiserver 在集群外的地址,以及external service所需要创建的。...

 ·  · 

红米手机安装 Pixel Experience

前言 MIUI13 石锤了内置反诈APP后,我的是MIUI12, 接到公安的私人电话,系统直接弹出国家反诈的弹窗,关键我是印度版的Rom,一身冷汗,估计当局审查是通过系统组件更新了,直接装Pixel Experience,以后换设备永远不换最新的,让网友们踩坑吧 注:隐私是一种权利,电信诈骗请问 骗子怎么知道我的金融信息,怎么知道我的出入境信息。上海公安10亿信息泄露是怎么情况,当公权力无法保证用户隐私时,请不要实名制,参考韩国。隐私权参考欧洲 操作 进入fastboot(power button + volume button up),然后使用数据线连接至PC(windows),然后下载MiFlash 首次弹出时需要安装驱动,以便PC可以识别到手机 给手机安装TWRP [1],通过搜索找到你的手机型号 例如 Redmi Note5。(可以去小米ROM网上对照下你的手机代号时什么例如 Note7 Pro 代号为 紫罗兰 violet) 在下载时TWRP网站上会提示你先安装 Play Stroe(这是包含了adb fastboot等工具的工具包,有的话可以不装) 安装步骤可以参考 [2] 选择 Wipe – Advance Wipe – 选上 System, Data, Dalvik, Cache 四个擦除 下载 firmware 与 PixelExperience 去 https://download.pixelexperience.org/ 下载 PixelExperience 找到自己的手机型号,参考1 去 https://xiaomifirmwareupdater.com/firmware/ 下载 fireware 找到自己的手机型号,参考1 注:建议直接搜代号如violet,搜型号太多不好找 向手机复制 firmware [3] 和固件 fw_violet_miui_VIOLET_9.9.3_79d3ccd33b_9.0.zip PixelExperience_violet-10.0-20191021-1744-BETA-OFFICIAL.zip 复制命令参考 [10] 按先后顺序安装后,重启就安装好google pixel experience了 enjoy 🤞...

 ·  · 

深入理解Kubernetes service - 如何扩展现有的kube-proxy架构?

本文是关于Kubernetes service解析的第4章 深入理解Kubernetes service - 你真的理解service吗? 深入理解Kubernetes service - EndpointSlices做了什么? 深入理解Kubernetes service - kube-proxy架构分析 深入理解Kubernetes service - 如何扩展现有的kube-proxy架构 kube-proxy如何保证规则的一致性 所有关于Kubernetes service 部分代码上传至仓库 github.com/cylonchau/kube-haproxy Overview 在前两部分中,学习了一些 service,于kube-proxy在设计架构,但存在扩展问题将引入了一些问题: 为什么需要了解这部分内容呢? 与传统架构有什么区别呢? 于eBPF 的 cilium又有什么区别呢? 既然eBPF可以做到,那为什么要这部分内容呢? 接下来的内容将围绕这四个问题展开来讲,而不是代码的讲解,代码可以看置顶 IPVS与iptables在kubernetes中应用时的问题 对于在使用了kubernetes用户以及了解 kube-proxy 架构后,知道当集群规模过大时,service必将增多,而一个service未必是一条iptables/ipvs规则,对于kubernetes这种分布式架构来说,集群规模越大,集群状态就越不可控,尤其时kube-proxy。 为什么单指kube-proxy呢?想想可以知道,pod的故障 或 node 的故障对于kubernetes集群来说却不是致命的,因为 这些资源集群中存在 避免方案,例如Pod的驱逐。而kube-proxy或iptables/IPVS问题将导致服务的不可控 『抖动』例如规则生成的快慢和Pod就绪的快慢不一致,部分节点不存在 service 此时服务必然抖动。 再例如 iptables/IPVS 排查的难度对于普通运维工程师或开发工程师的技术水平有很高的要求,网上随处可见分析该类问题的帖子: kube-proxy源码分析与问题定位 案例分析:怎么解决海量IPVS规则带来的网络延时抖动问题? ipvs 连接复用引发的系列问题 Investigating Causes of Jitter in Container Networking ContainerNative network LoadBalancer IPVS jitter 对于上述问题,相信遇到了很难定位处理,虽然现在已fixed,并有eBPF技术的加入减少了此类问题的发生,但是eBPF实际同理于IPVS 都是需要对Linux内核有一定了解后才可以,这也就是为什么需要了解这部分 如果需要自定义proxier为什么会解决这个问题 这里就是放大到kubernetes意外的传统架构中,当直接部署于Linux系统上使用nginx等传统LB时就很少有人提到这些问题了,而这些问题存在一个关键字「Container」;而引发这个问题的则是 service。去除 service 的功能,传统架构于Kubernetes架构部署的应用则是相同的,只是区分了名称空间。...

 ·  ·