2.5.2 HTTP2 多路复用 KubeGateway 默认使用 HTTP2 协议,基于 HTTP2 协议的多路复用能力,单条连接上默认支持 250 个 Stream,即单个连接上支持 250 个并发的请求,使得 upstream 单个 kube-apiserver 的 TCP 连接数可以降低两个数量级。
工商信息显示,海南爱喵游成立于2018年10月,注册资本1000万人民币,是一家游戏软件技术开发公司,旗下有子公司深圳爱喵游网络科技有限公司。明珠花钱则是一款全线上、放款快、利率低的消费信用贷款产品。
官网介绍,明珠数科专注于为航旅客群提供综合金融服务解决方案,旗下产品明珠分期,是一款全线上、免息长的消费分期产品。技术驱动的平台业务是乐信的To B技术输出的业务。官网显示,这一年集团总交易额近300亿人民币。在助贷业务上,今年三季度,乐信促成借款金额562亿元,超出此前530亿元的预期,环比增长14%,较2021年同期增长0.7%。工商信息显示,明珠数科成立于2020年12月,法定代表人为敬公斌,注册资本为20000万元人民币,经营范围包含:融资咨询服务、市场调查、航空商务服务等。
据称,乐信拥有2000多万年轻优质用户,用户成长性和信用状况良好。2013年,肖文杰创办分期乐,一度成为校园贷领域的领头羊之一,三年之内便进入D轮融资,投资方不乏京东、华晟资本、经纬中国等。在集群恢复正常后,首先放开限制允许 Node 上报心跳,然后再恢复集群的其他流量。
此外,KubeGateway 支持灵活的负载均衡策略扩展,可以快速实现 Least Request 等算法,以满足更多场景的需求。配置管理云原生化,以 K8s 的标准 API 形式管理网关配置,支持配置热更新。max requests inflight:最大请求数是比令牌桶更严格的限制方式,它限制在某个时刻能够执行的最大请求数量,通常用来限制一些更加耗时的请求,比如在大集群 list 全量 pods,这种请求会可能会持续好几分钟,而且会占用 kube-apiserver 大量的资源,只通过令牌桶的限流会放入过多的请求而造成 kube-apiserver OOM 等问题。原标题:字节跳动开源 kube-apiserver 高可用方案 KubeGateway 本文整理自 2022 年稀土开发者大会,字节跳动云原生工程师章骏分享了 Kubernetes 集群 kube-apiserver 请求的负载均衡和治理方案 KubeGateway。
团队支持业务同时覆盖在线、离线机器学习,推荐 / 广告 / 搜索等多种应用场景。因此目前 LB 的选型一般为 LVS、云厂商的 SLB 或 nginx、HAProxy 的四层负载均衡方案。
kube-apiserver 对于 Impersonate 机制支持的很完善,审计日志中也兼容了 Impersonate在 kube-apiserver 或者 ETCD 发生故障的时候,可能引起集群的雪崩。TLS 双向认证需要 LB 将请求中的 Client X509 Cert 正确传递给 kube-apiserver,但是传统的七层 LB 无法做到这一点,在转发过程中会丢失 Client X509 Cert,导致 kube-apiserver 无法认证用户。而且在代理过程中,对于客户端是完全透明的,客户端无需进行任何修改即可接入 KubeGateway。
在 KubeGateway 的帮助下,研发团队彻底解决了 kube-apiserver 流量不均衡的问题,而且极大增强了 kube-apiserver 请求的治理能力,包括请求分组、路由、限流、降级等,有效提高了集群的稳定性和可用性。2.3 用户认证 为了能够正确地代理 kube-apiserver 的七层流量,让请求经过代理后的在 upstream kube-apiserver 能被正确地进行认证授权,KubeGateway 需要将请求中的用户信息透传给 kube-apiserver,这要求 KubeGateway 也能认证出请求中的用户信息。非资源请求,如访问 /healthz 查看 kube-apiserver 的健康情况,访问 /metrics 查看暴露的指标等。关于我们 字节基础架构编排调度团队,负责构建字节跳动内部的容器云平台,为产品线提供运行基石。
对于资源请求,可以从请求的 URL 和 Header 中解析出以下的内容: 最终一个请求可以解析出多维度的路由字段,如下图所示,这些字段将作为路由选择的依据。KubeGateway 是字节跳动针对 kube-apiserver 流量特征专门定制的七层网关,它彻底解决了 kube-apiserver 负载不均衡的问题,同时在社区范围内首次实现了对 kube-apiserver 请求的完整治理,包括请求路由、分流、限流、降级等,显著提高了 Kubernetes 集群的可用性。
kube-apiserver 本质上是一个无状态的服务器,为了实现其高可用,通常会部署多个 kube-apiserver 实例,同时引入外部负载均衡器(以下简称 LB)进行流量代理。由于 Forward 、Exec 等部分请求需要通过 HTTP 1.1 建立的链接之上使用其他的协议(比如 SPDY、WebSocket 等)来进行通信,KubeGateway 在转发这类请求时会禁止 http2,且支持 Hijacker 处理。
2. 缺乏请求治理的灵活性:4 层负载均衡在传输层工作,它只负责消息的传递,但是无法处理应用层的 HTTP 协议的信息,因此相较于 7 层负载缺乏对请求治理的灵活性和 智能性。KubeGateway 对外以 K8s 标准 API 的形式提供代理配置管理的服务,主要提供路由转发规则、上游集群 kube-apiserver 地址、集群证书信息、限流等请求治理策略等配置信息的维护变更。比如我们想要限制普通用户 list pod 的 QPS 但是又要对管控组件(如 controller-manager,scheduler)进行豁免,可以在路由匹配中区分出两种类型的用户然后为他们单独配置 FlowControl 限流规则。支持限流、降级、动态服务发现、优雅退出、upstream 异常检测等网关的通用能力。下面依次对这些步骤进行详细介绍: 2.1 请求解析 KubeGateway 可以深入理解 kube-apiserver 请求模型,从中解析出更多的信息,它将 kube-apiserver 的请求分为两种类型: 资源请求,如对 Pod 的 CRUD(增删改查)。在雪崩情况下,部分请求会返回成功,部分请求返回失败,加上客户端不断重试,容易导致集群出现非预期行为,比如 Node NotReady、 Pod 大量驱逐和删除等。
但是使用四层 LB 会引起另外的问题,具体如下: 1. 请求负载不均衡:由于 kube-apiserver 和 client 是使用 HTTP2 协议连接,HTTP2 的多个请求都会复用底层的同一个 TCP 连接并且长时间不断开。持续提高可观测性,可以在异常情况下能够快速定位到问题,辅助排障。
2.5.2 HTTP2 多路复用 KubeGateway 默认使用 HTTP2 协议,基于 HTTP2 协议的多路复用能力,单条连接上默认支持 250 个 Stream,即单个连接上支持 250 个并发的请求,使得 upstream 单个 kube-apiserver 的 TCP 连接数可以降低两个数量级。团队支持业务同时覆盖在线、离线机器学习,推荐 / 广告 / 搜索等多种应用场景。
匹配规则可以直接通过修改 KubeGateway 的配置管理服务对外暴露的 API -- UpstreamCluster 实时生效。在 Request Header 中添加以下信息: Impersonate-User: Client 用户名 Impersonate-Group: Client 用户组 Impersonate 是 kube-apiserver 对外提供的一种机制,它允许一个用户扮演成另外一个用户执行 API 请求。
四层负载均衡工作在 OSI 的第四层即传输层,使用 NAT 技术进行代理转发 七层负载均衡工作在 OSI 的第七层即应用层,一般是基于请求 URL 地址的方式进行代理转发。通过 User,UserGroup,ServiceAccount 等,我们可以匹配出 kube-controller-manager,kube-scheduler 等核心控制组件的请求。此外,KubeGateway 支持灵活的负载均衡策略扩展,可以快速实现 Least Request 等算法,以满足更多场景的需求。良好的负载均衡策略可以优化资源效率,最大化吞吐量,减少延迟和容错。
期待有更多朋友关注和加入 KubeGateway 社区,也欢迎大家在 GitHub 给我们提出各种建议。支持同时代理多个 K8s 集群的请求,不同 K8s 集群通过不同的域名或者虚拟地址(vip)进行区分。
事实上,在生产环境中,我们也曾遇到过多次由于 kube-apiserver 负载不均衡或者缺乏请求治理能力带来的事故,面对以上问题,我们针对 kube-apiserver 的流量特征自研了七层网关 KubeGateway。2.4.4 降级 KubeGateway 支持降级以应对集群管控面异常的情况。
架构设计 KubeGateway 作为七层网关接入和转发 kube-apiserver 的请求,它具有以下特点: 对于客户端完全透明,客户端无需任何改造即可以接入 KubeGateway。探索基于 KubeGateway 网关实现新型的联邦方案,通过 KubeGateway 可以将多个 K8s 集群透明地聚合成一个集群。
max requests inflight:最大请求数是比令牌桶更严格的限制方式,它限制在某个时刻能够执行的最大请求数量,通常用来限制一些更加耗时的请求,比如在大集群 list 全量 pods,这种请求会可能会持续好几分钟,而且会占用 kube-apiserver 大量的资源,只通过令牌桶的限流会放入过多的请求而造成 kube-apiserver OOM 等问题。落地效果 经过压测,KubeGateway 性能优异,经过代理后,请求延迟增加在 1ms 左右。支持灵活的路由策略,KubeGateway 根据请求信息,包括但不限于 resource/ verb/ user/ namespace/ apigroup 等进行路由。2.4.2 健康监测 KubeGateway 会定期主动地访问 kube-apiserver 的 /healthz 接口进行健康监测。
在这种情况下,开发人员可以通过 KubeGateway 进行降级操作拒掉所有流量。在使用这个机制之前,我们需要在 upstream kube-apiserver 为 KubeGateway 的客户端配置好 Impersonate 的权限,Impersonate 的请求具体的流程如下: kube-apiserver 确保 KubeGateway 具有 Impersonate 权限。
kube-apiserver 对于 Impersonate 机制支持的很完善,审计日志中也兼容了 Impersonate。最终 KubeGateway 依靠用户认证和 Impersonate 机制,完成原始用户信息的透传,解决了传统七层 LB 无法代理 kube-apiserver 请求的问题。
简历投递 :lijiazhuo@bytedance.com 解读数字化的2022:不再追求大而全的军备竞赛,用聚焦来提高转型成功率 如何更好地干掉微服务架构复杂性? 争相上市、抢夺本土市场,未来三五年数据库将迎来大洗牌 | 解读数据库的2022 颠覆开发模式的创新发布背后,我看见了云计算的下一个十年 返回搜狐,查看更多 责任编辑:。在 kube-apiserver 滚动升级或者某个实例重启时,很容易引起迟些启动的 kube-apiserver 在长时间内只有很少的请求数。