K8S原理剖析:Service原理剖析和实践

在线体验各类最新模型,更有模型 免费Token 额度领取!
立即体验
简介: K8S原理剖析:Service原理剖析和实践


大纲

  • Kubernetes的Service机制
  • Iptables实现Service负载均衡
  • 当前Iptables实现存在的问题
  • IPVS实现Service负载均衡
  • Iptables VS. IPVS


Kubernetes的Service机制

但,简单的生活总是暂时的:

  • - 多个后端实例,如何做到负载均衡?
  • - 如何保持会话亲和性?
  • - 容器迁移, IP发生变化如何访问?
  • - 健康检查怎么做?
  • - 怎么通过域名访问?


Iptables实现Service负载均衡

用户空间应用程序,通过配置Netfilter规则表( Xtables )来构建linux内核防火墙。


Iptables实现流量转发与负载均衡

Iptables如何做流量转发?

  • DNAT实现IP地址和端口映射
  • iptables -t nat -A PREROUTING -d 1.2.3.4/32 --dport 80 -j DNAT --to-destination 10.20.30.40:8080

Iptables如何做负载均衡?

  • statistic模块为每个后端设置权重
  • iptables -t nat -A PREROUTING -d 1.2.3.4 --dport 80 -m statistic --mode random --probability .25 -j DNAT --to-destination 10.20.30.40:8080

Iptables如何做会话保持?

  • recent模块设置会话保持时间
  • iptables -t nat –A FOO -m recent --rcheck --seconds 3600 --reap --name BAR -j BAR


当前Iptables实现存在的问题

Iptables做负载均衡的问题

规则线性匹配时延

  • - KUBE-SERVICES链挂了一长串KUBE-SVC-*链;访问每个service,要遍历每条链直到匹配,时间复杂度O(N)

 

规则更新时延

  • - 非增量式

可扩展性

  • - 当系统存在大量iptables规则链时,增加/删除规则会出现kernel lock
  • kernel lock: Another app is currently holding the xtables lock. Perhaps you want to use the -w option?

 

可用性

  • - 后端实例扩容,服务会话保持时间更新等都会导致连接断开


更新Iptables规则的时延

时延出现在哪?

  • - 非增量式,即使加上—no-flush(iptables-restore)选项
  • - Kube-proxy定期同步iptables状态:
  • * 拷贝所有规则: iptables-save
  • * 在内存中更新规则
  • * 在内核中修改规则: iptables-restore
  • * 规则更新期间存在kernel lock

5K service( 40K 规则),增加一条iptables规则,耗时11min

20K service( 160K 规则),增加一条iptables规则,耗时5h


K8S Scalability

  • 5K Nodes, 100K Pod
  • 1K Services ??


IPVS实现Service负载均衡

什么是IPVS( IP Virtual Server)

Linux内核实现的L4 LB, LVS负载均衡的实现

基于netfilter, hash table

支持TCP, UDP, SCTP协议, IPV4, IPV6

支持多种负载均衡策略

  • - rr, wrr, lc, wlc, sh, dh, lblc…

支持会话保持

  • - persistent connection调度算法


IPVS三种转发模式

支持三种LB模式: Direct Routing(DR), Tunneling, NAT

  • - DR模式工作在L2,最快,但不支持端口映射
  • - Tunneling模式用IP包封装IP包,也称IPIP模式,不支持端口映射
  • - DR和Tunneling模式,回程报文不会经过IPVS Director
  • - NAT模式支持端口映射,回程报文经过IPVS Director
  • * 内核原生版本只做DNAT,不做SNAT


IPVS工作流


IPVS做L4转发

1. 绑定VIP

  • - dummy网卡
  • # ip link add dev dummy0 type dummy
  • # ip addr add 192.168.2.2/32 dev dummy0
  • - 本地路由表
  • # ip route add to local 192.168.2.2/32 dev eth0 proto kernel
  • - 网卡别名
  • # ifconfig eth0:1 192.168.2.2 netmask 255.255.255.255 up

2. 创建IPVS Virtual Server

  • # ipvsadm -A -t 192.168.60.200:80 -s rr -p 600

3. 创建IPVS Real Server

  • # ipvsadm -a -t 192.168.60.200:80 -r 172.17.1.2:80 –m
  • # ipvsadm -a -t 192.168.60.200:80 -r 172.17.2.3:80 –m


Kubernetes支持IPVS模式

社区1.8 Alpha特性, Owner @m1093782566

社区1.9进beta, Owner @m1093782566

社区1.11进GA,广泛使用下一步成为默认模式

支持ClusterIP, NodePort, External IP, Load Balancer…类型Service

  • – iptables模式的特性, IPVS模式都支持!

兼容Network Policy

依赖iptables做SNAT和访问控制


Iptables VS. IPVS

Iptables VS. IPVS 规则刷新时延

Service基数 1 5000 20000
Rules基数 8 40000 160000
增加1条Iptables规则 50 us 11 min 5 hours
增加1条IPVS规则 30 us 50 us 70 us

观察结果:

  • 增加一条Iptables的时延,随着规则数的增加“指数”上升
  • 增加一条IPVS的时延,规则基数对其几乎没影响


Iptables VS. IPVS 网络带宽

Service基数 1 5000 20000
Rules基数 8 40000 160000
增加1条Iptables规则 50 us 11 min 5 hours
增加1条IPVS规则 30 us 50 us 70 us

观察结果:

  • 增加一条Iptables的时延,随着规则数的增加“指数”上升
  • 增加一条IPVS的时延,规则基数对其几乎没影响


Iptables VS. IPVS 资源消耗

消耗资源 Service数量 IPVS Iptables
内存 1000 386 MB 1.1 G
5000 N/A 1.9 G
10000 542 MB 2.3 G
15000 N/A OOM
50000 1272 MB OOM
CPU 1000 0% N/A
5000 50% - 85%
10000 50%-100%
15000 N/A
50000 N/A


Iptables VS. IPVS TPS与时延

Iptables

  • 灵活,功能强大
  • 在prerouting, postrouting, forward, input, output不同阶段都能对包进行操作

IPVS

  • 更好的性能(hash vs. chain)
  • 更多的负载均衡算法
  • - rr, wrr, lc, wlc, ip hash…
  • 连接保持
  • - IPVS service更新期间,保持连接不断开
  • 预先加载内核模
  • - nf_conntrack_ipv4, ip_vs, ip_vs_rr, ip_vs_wrr, ipvs_sh…
  • # echo 1 > /proc/sys/net/ipv4/vs/conntrack


为什么还需要Iptables

因为我们访问了一层Service IP!

Node IP -> Service IP( Gateway) -> C

客户端:( Node IP, Service IP), 期望:( Service IP, Node IP)

但实际,经过IPVS一层转发,包地址变成了( Node IP, C)

服务端发出:( C, Node IP)  这个包的源/目的地址与客户端期望的不一样! 故将被丢弃

因此,需要一次SNAT( masquerade)!!

( Node IP, Service IP) -> ( IPVS director IP, C)

这也是为什么IPVS NAT模式要求回程报文必须经过director!

提问:为什么Container A -> Cluster IP -> Container B?


IPSet - 把O(N)的iptables规则降为O(1)

但,不想要太多iptables…

ipset create KUBE-LOOP-BACK hash:ip,port,ip

ipset add KUBE-LOOP-BACK 192.168.1.1,udp:53,192.168.1.1

ipset add KUBE-LOOP-BACK 192.168.1.2,tcp:80,192.168.1.2

iptables -t nat -A POSTROUTING -m set --match-set KUBE-LOOP-BACK dst,dst,src -j MASQUERADEOUTING O(1)

ipset支持“增量”式增/删/改,而非iptables式全量更新

 


相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker和Kubernetes入门
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术成为企业提升敏捷性和效率的关键。本篇文章将引导读者了解如何利用Docker进行容器化打包及部署,以及Kubernetes集群管理的基础操作,帮助初学者快速入门云原生的世界。通过实际案例分析,我们将深入探讨这些技术在现代IT架构中的应用与影响。
768 2
|
Kubernetes 持续交付 开发者
探索并实践Kubernetes集群管理与自动化部署
探索并实践Kubernetes集群管理与自动化部署
591 93
|
存储 负载均衡 测试技术
ACK Gateway with Inference Extension:优化多机分布式大模型推理服务实践
本文介绍了如何利用阿里云容器服务ACK推出的ACK Gateway with Inference Extension组件,在Kubernetes环境中为多机分布式部署的LLM推理服务提供智能路由和负载均衡能力。文章以部署和优化QwQ-32B模型为例,详细展示了从环境准备到性能测试的完整实践过程。
|
存储 人工智能 Kubernetes
ACK Gateway with AI Extension:面向Kubernetes大模型推理的智能路由实践
本文介绍了如何利用阿里云容器服务ACK推出的ACK Gateway with AI Extension组件,在Kubernetes环境中为大语言模型(LLM)推理服务提供智能路由和负载均衡能力。文章以部署和优化QwQ-32B模型为例,详细展示了从环境准备到性能测试的完整实践过程。
|
存储 人工智能 物联网
ACK Gateway with AI Extension:大模型推理的模型灰度实践
本文介绍了如何使用 ACK Gateway with AI Extension 组件在云原生环境中实现大语言模型(LLM)推理服务的灰度发布和流量分发。该组件专为 LLM 推理场景设计,支持四层/七层流量路由,并提供基于模型服务器负载感知的智能负载均衡能力。通过自定义资源(CRD),如 InferencePool 和 InferenceModel,可以灵活配置推理服务的流量策略,包括模型灰度发布和流量镜像。
|
Kubernetes 监控 Serverless
基于阿里云Serverless Kubernetes(ASK)的无服务器架构设计与实践
无服务器架构(Serverless Architecture)在云原生技术中备受关注,开发者只需专注于业务逻辑,无需管理服务器。阿里云Serverless Kubernetes(ASK)是基于Kubernetes的托管服务,提供极致弹性和按需付费能力。本文深入探讨如何使用ASK设计和实现无服务器架构,涵盖事件驱动、自动扩展、无状态设计、监控与日志及成本优化等方面,并通过图片处理服务案例展示具体实践,帮助构建高效可靠的无服务器应用。
|
监控 Kubernetes Cloud Native
基于阿里云容器服务Kubernetes版(ACK)的微服务架构设计与实践
本文介绍了如何基于阿里云容器服务Kubernetes版(ACK)设计和实现微服务架构。首先概述了微服务架构的优势与挑战,如模块化、可扩展性及技术多样性。接着详细描述了ACK的核心功能,包括集群管理、应用管理、网络与安全、监控与日志等。在设计基于ACK的微服务架构时,需考虑服务拆分、通信、发现与负载均衡、配置管理、监控与日志以及CI/CD等方面。通过一个电商应用案例,展示了用户服务、商品服务、订单服务和支付服务的具体部署步骤。最后总结了ACK为微服务架构提供的强大支持,帮助应对各种挑战,构建高效可靠的云原生应用。
|
人工智能 运维 监控
阿里云ACK容器服务生产级可观测体系建设实践
本文整理自2024云栖大会冯诗淳(花名:行疾)的演讲,介绍了阿里云容器服务团队在生产级可观测体系建设方面的实践。冯诗淳详细阐述了容器化架构带来的挑战及解决方案,强调了可观测性对于构建稳健运维体系的重要性。文中提到,阿里云作为亚洲唯一蝉联全球领导者的容器管理平台,其可观测能力在多项关键评测中表现优异,支持AI、容器网络、存储等多个场景的高级容器可观测能力。此外,还介绍了阿里云容器服务在多云管理、成本优化等方面的最新进展,以及即将推出的ACK AI助手2.0,旨在通过智能引擎和专家诊断经验,简化异常数据查找,缩短故障响应时间。
阿里云ACK容器服务生产级可观测体系建设实践
|
运维 Kubernetes 调度
阿里云容器服务 ACK One 分布式云容器企业落地实践
阿里云容器服务ACK提供强大的产品能力,支持弹性、调度、可观测、成本治理和安全合规。针对拥有IDC或三方资源的企业,ACK One分布式云容器平台能够有效解决资源管理、多云多集群管理及边缘计算等挑战,实现云上云下统一管理,提升业务效率与稳定性。
|
监控 Cloud Native Java
基于阿里云容器服务(ACK)的微服务架构设计与实践
本文介绍如何利用阿里云容器服务Kubernetes版(ACK)构建高可用、可扩展的微服务架构。通过电商平台案例,展示基于Java(Spring Boot)、Docker、Nacos等技术的开发、容器化、部署流程,涵盖服务注册、API网关、监控日志及性能优化实践,帮助企业实现云原生转型。

推荐镜像

更多