想象你住在一个飞速扩张的城市里。最初只是一个小镇,大家步行串门,路况一目了然(单体应用)。后来城市发展为几十个功能区:住宅区、商业区、医院、学校……(微服务化)。跨区交通成了大麻烦:道路拥堵、司机不认路、车辆毫无身份标识。每个功能区只好自己修路、自己设收费亭,结果各修各的路,立交桥缠成乱麻。 服务网格就是在此时登场的“城市智能交通管控系统”。它在每个功能区门口装上统一的电子收费亭(Sidecar 代理),车辆进出时自动完成验票、限流、登记;城市中心建起交通指挥中心(控制面),统一制定放行规则。Istio 像一套功能完整的大型指挥中心,负载均衡、熔断、加密、监控全都能通过“规则文件”配置,但组件庞杂、学习成本高;Linkerd 则像一个轻量便携的路边执勤亭,核心功能到位、装上就能跑,资源占用小。两者殊途同归:让业务代码不关心交通控制,专心处理业务。
掌握服务网格原理,能让你在构建分布式 AI 服务时,科学规划服务间通信与安全策略,从容做出架构选型与故障排查,是 AI 系统从原型走向高并发生产的必备技能。
可视化演示
展示Sidecar代理拦截服务间调用、金丝雀发布按权重分流流量,以及mTLS双向加密握手的过程,可切换三种模式观察。
本节配有交互动效(进入视口后自动加载,约 3KB)。
Sidecar拦截 服务A调用B时先经A的Sidecar,再转发到B的Sidecar Sidecar按控制面下发规则做路由、熔断、重试 A → SidecarA → SidecarB → B 通信治理逻辑从应用代码中剥离,透明注入。
服务网格概念
回到城市的比喻:当功能区增加到几十个,每两个区域之间都需要通路,道路数量随区域数爆炸式增长。微服务也面临同样的困境——服务数量从 5 个变成 50 个,需要维护的网络连接数不是线性增长,而是平方级增长。每个服务都要自己处理重试、超时、限流、鉴权,代码被“网络琐事”塞满,业务逻辑反而成了配角。
服务网格的解法是“把道路管理收归中央”。它不再让每个服务自己修路,而是在每个服务旁边部署一个 Sidecar 代理——相当于在每栋楼门口安一个标准收费亭。服务之间的请求必须经过收费亭进出,但业务代码完全感知不到这些变化。这就是“透明代理”:业务服务以为自己在直接对话,实际上是收费亭在替双方完成寻路、限流、登记。
要理解这个体系,需要区分两个平面:数据面由所有 Sidecar 代理组成,负责搬运真正的业务流量;控制面则像城市交通指挥中心,只下发“哪条路放行、哪条路限流”的规则,不碰具体车辆。两个平面各司其职,是服务网格架构的核心骨架。
服务网格的价值在于:它把“修路”的重担从 N 个业务服务身上抽走,统一交给专业的“交通管理部门”。正如城市不需要每个小区自己修立交桥,微服务也不需要每个服务自己实现一套网络治理代码——这就是为什么现代微服务架构几乎绕不开服务网格。
- 识别服务数量N 代表微服务的总个数,比如 10 个服务。
- 计算每个服务的潜在对端每个服务最多与其余 N-1 个服务通信。
- 求有向连接对数N 乘以 N-1 得到有向连接总数,即 A 调 B 与 B 调 A 分别计数。
- 去除重复计数除以 2 后得到无向连接对数,即两两组合数量。
Istio架构解析
如果说服务网格是城市智能交通系统,Istio 就是其中最“重装备”的一套方案。它由 Google、IBM 和 Lyft 联合发起,被誉为“服务网格的集大成者”。Istio 最大的特色是用 Envoy 作为数据面的核心代理。Envoy 原本是 Lyft 为高性能微服务通信开发的 C++ 代理,支持 HTTP/2、gRPC、TCP 等丰富协议,且具备极强的可扩展性——你可以通过过滤器链给请求做任意“增值服务”。
Istio 的控制面以 istiod 为核心组件,它把多个功能整合在一起:Pilot 负责把流量管理规则转化为 Envoy 能理解的配置,Citadel 负责证书签发与身份管理,Telemetry 负责指标采集。运维人员通过 VirtualService 和 DestinationRule 这类“交通规则文件”声明流量如何路由、如何重试、如何熔断,istiod 再将这些高级规则翻译成 Envoy 底层的 API。这个抽象层级是 Istio 强大的根源。
Istio 的“重型装备”意味着它能应对复杂场景:多集群网格、VM 与容器混合部署、细粒度授权策略等。对企业而言,选择 Istio 就像为城市订购一套顶级智能交通系统——功能全面、扩展性强,但需要专门的团队来学习与运维。如果团队还没有足够的专业人手,这套系统可能反而会成为城市的负担。
- 单个版本权重wᵢ 代表第 i 个服务版本获得的流量权重值,如给新版本设 10。
- 所有版本权重和分母将 n 个版本的权重全部相加,得到总权重池,如旧版 90 加新版 10 得 100。
- 计算占比用单个权重除以总权重,得到该版本应分得的流量比例。
Linkerd架构说明
与 Istio 的“重型指挥中心”不同,Linkerd 更像一个“轻骑兵”。它由 Buoyant 公司维护,设计哲学是“少即是多”。Linkerd 2.x 版本用 Rust 编写了一个微型数据面代理 linkerd2-proxy,整个代理体积只有几十 MB,比 Envoy 轻量得多。对 CPU 和内存的占用通常只有 Istio 的几分之一,这让它在资源敏感的生产环境中很有吸引力。
Linkerd 的控制面也走极简路线:核心是 control-plane 中的 Destination 服务,它负责把服务名解析为实际的 Pod 地址,并向代理下发路由规则。没有复杂的 VirtualService/DestinationRule 概念,用户只需要通过 ServiceProfile 和匿名授权策略等少数几个资源来描述流量规则。这种“小而美”的设计让 Linkerd 的安装只需要一条命令,升级也基本无感。
Linkerd 的极简主义并非缺陷,而是理性取舍:它把精力聚焦在“最常用的那 20% 功能”——可靠的路由、自动 mTLS、可观测性。对大多数业务团队而言,这 20% 已经覆盖了日常 80% 的痛点。城市管理不需要在每个路口都装最贵的智能信号灯,简洁有效的方案往往更能长期稳定运行。
- 峰值 CPU 值CPU_max 是代理在压力测试中达到的 CPU 上限,通常以核数为单位。
- 峰值请求速率RPS_max 是代理能支撑的最大每秒请求数,代表吞吐能力。
- 求单位成本两者相除得到每个请求分摊的 CPU 开销,这是跨网格方案比较资源效率的常用指标。
流量治理实践
有了服务网格,流量治理就像交通指挥中心拿到了全部路口的控制权。最典型的实践是灰度发布(金丝雀发布):先让新版本接收 5%-10% 的线上流量,同时监控错误率和延迟;如果一切正常,逐步把权重提高到 100%;如果出问题,一键把流量切回旧版本。在传统架构中,这种发布方式需要修改负载均衡配置或反复重启服务,而服务网格只需要改一条流量规则。
除了灰度发布,服务网格还内置了熔断器(Circuit Breaker)、超时重试、流量镜像(Traffic Mirroring)等治理能力。熔断机制类似电路中的保险丝:当某个服务连续失败超过阈值,代理会在一定时间内直接拒绝对该服务的请求,避免故障像多米诺骨牌一样传导。流量镜像则像“影子交通”——把线上请求复制一份送到新版本,不影响真实用户,却能提前发现新版本的逻辑问题。
灰度发布不是简单的“切流量”,而是“用数据说话”的发布过程。配合监控面板,团队可以实时观察新旧版本的 p99 延迟、错误率、业务指标差异,把发布风险从“赌运气”变成“看数据”。这也是服务网格给分布式系统带来的最大确定性:一切流量行为皆可度量、可控制、可回退。
- 新版本权重w_new 是为新版本设置的流量权重,灰度初期通常设较小值如 5。
- 新旧权重之和分母汇总旧版本与新版本的全部权重,表示完整流量池。
- 计算金丝雀占比相除得到新版本接收的流量比例,例如 5/(95+5)=5%。
安全加密机制
现代微服务的安全底线是 mTLS(双向传输层安全)。传统 HTTPS 只验证服务器的身份,客户端不验证;而 mTLS 要求通信双方都出示证书,就像城市里每辆车都要有牌照,且每个功能区的门禁必须互相验证对方的牌照后才放行。服务网格天然适合实现 mTLS:Sidecar 代理拦截了所有进出流量,可以在这一层自动完成证书的签发、验证与加密,业务服务完全不需要感知。
Istio 和 Linkerd 都有完善的 mTLS 支持。Istio 通过 Citadel 组件为每个服务签发 SPIFFE 格式的身份证书,结合 AuthorizationPolicy 实现细粒度的“谁可以访问谁”的授权策略。Linkerd 则把 mTLS 默认开启,不需要额外配置,代理启动时自动向控制面申请证书,并在后台定期轮换。这种透明加密体验,让安全从“事后补救”变成了“默认行为”。
安全机制的价值在于“防患于未然”。mTLS 保证了即使攻击者截获流量,也无法解密内容;即使攻击者伪装成某个服务,也无法通过证书校验。服务网格的意义在于把这些复杂的密码学过程封装成了“自动挡”——团队不需要自己实现证书管理,只需要声明“我要加密”,剩下的交给网格。
- 网络往返时延RTT 是客户端和服务端之间一次消息往返的耗时,受物理距离与网络质量影响。
- 双向认证的消息交换乘 2 表示客户端和服务端互相交换证书与随机数,至少需要两轮往返。
- 签名计算时间T_sign 是发送方生成数字签名消耗的 CPU 时间。
- 验签计算时间T_verify 是接收方验证签名是否合法的时间。
数据面性能对比
选择服务网格时,数据面的性能是绕不开的议题。毕竟每一次服务调用都要多经过两层代理,就像每辆车都要经过两个收费亭。Istio 的 Envoy 代理功能强大,但也因此带来了更高的 CPU 和内存开销。在高 QPS 场景下,Envoy 的 p99 延迟可能增加 2-5 毫秒;而 Linkerd 的 Rust 微代理以其极低的资源占用著称,延迟开销通常控制在 1 毫秒以内。
除了延迟,资源占用也是重要考量。一个 Envoy 代理在空闲时可能占用 100MB+ 内存,而 linkerd2-proxy 通常在 20MB 左右——对于大规模集群,每个 Pod 多几十 MB 内存会放大为可观的成本。协议支持方面,Istio 凭借 Envoy 的丰富过滤器链,对 HTTP/2、gRPC、WebSocket、MongoDB 等协议都有深度支持;Linkerd 则更专注于 HTTP 协议,对非 HTTP 流量支持相对有限。
性能对比不能只看数字,还要看团队的实际场景:如果服务以高并发小请求为主,Linkerd 的低延迟优势更突出;如果业务依赖 gRPC 等高级协议和丰富的可观测性,Istio 的全面性更值得投资。收费亭虽然增加了通行时间,但如果能换来秩序和安全,这点延迟在多数业务场景下是完全可接受的。
- 单个代理延迟L_proxy 是数据包经过一个 Sidecar 代理所需的时间,包括协议解析与转发。
- 上下行四个环节乘 2 是因为请求要经过发起方代理和接收方代理,两次代理转发。
- 排队效应增量ΔL_queue 是流量拥挤时代理背压或线程池排队导致的额外等待时间。
控制面设计对比
数据面负责“干活”,控制面负责“发号施令”。Istio 的控制面是一个功能全面的“超级指挥中心”:istiod 整合了 Pilot、Citadel、Telemetry 等多个模块,支持多集群管理、跨网络服务发现、策略下发、证书轮换等能力。强大功能的代价是复杂的架构和陡峭的学习曲线,一个新用户往往需要数周才能熟练编写 VirtualService 规则。
Linkerd 的控制面则是“简约哨所”:核心组件少、概念少、配置少。它采用“默认安全、默认工作”的设计哲学,安装后几乎开箱即用。用户不需要理解复杂的路由优先级和故障注入语法,只需要偶尔修改 ServiceProfile 或策略对象。这种简约设计极大降低了运维负担,也让链路排查变得更加简单——毕竟概念越少,出错的概率越低。
控制面的设计哲学,本质上是“多与少”的权衡。Istio 把决策权交给使用者,赋予最大的灵活性;Linkerd 把复杂度内化在实现中,提供最小的心智负担。城市管理同样如此:有些城市需要复杂的多级指挥体系来应对超大交通流,而有些小城一个高效的路口执勤亭就足够聪明。选择的关键在于明确自己的运维能力和真实需求。
- 代理数量N_proxies 是当前网格中所有 Sidecar 代理的总数,代理越多下发越慢。
- 单份配置大小S_config 是每条配置规则的字节数,规则越复杂体积越大。
- 分发带宽B_channel 是控制面与数据面之间的通信管道容量。
- 求总耗时用总字节数除以带宽得到最短下发时间,实际的传播还需加上各代理的处理开销。
生产落地决策
当团队决定在生产环境引入服务网格,选型只是第一步。真正的挑战在于落地路径。一个稳妥的迁移策略是“先非核心业务试点,再逐步扩大范围”:从一个低风险服务开始,接入 Sidecar,灰度验证性能和稳定性;确认无误后,再逐步覆盖核心链路。直接全量切换无异于把所有鸡蛋放进一个新篮子里,风险极高。
故障排查也是生产落地的重要一环。服务网格增加了链路环节,问题排查会比以前复杂:连接失败时,需要判断是业务代码的问题、Sidecar 的问题,还是网络插件的问题。这要求团队具备分层的排查思路:先看代理日志,再看控制面事件,最后回溯业务指标。Istio 生态提供了 Kiali、Grafana 等可视化工具,Linkerd 则提供了命令行的 linkerd viz dashboard 来快速定位问题。
从生产案例复盘来看,成功引入服务网格的团队往往有一个共同特点:不是为了“赶时髦”而上网格,而是从真实痛点出发——发布频繁出问题、安全审计要求 mTLS、团队疲于维护通信代码。当痛点足够明确,服务网格的投入才会转化为真实的业务价值。否则,网格本身可能变成一个需要被“治理”的新问题。
- 节约的运维成本G_saved 是引入网格后减少的故障处理、人工配置、停机损失等可量化收益。
- 投入的总成本C_invest 包括网格软件运行资源、团队学习培训、迁移改造等全部投入。
- 计算净收益与回报率分子计算净收益,除以投入成本得到 ROI 比率,大于 0 代表投资有回报。
AI 应用场景
电商大促的微服务灰度发布
阶段:模型/服务上线部署与流量治理
解决的问题:电商平台在双 11 大促前频繁更新推荐服务,传统发布需要停机或全量上线,新版本模型一旦存在 bug 会影响全部用户。服务网格通过流量权重动态调整,将新版本 AI 服务先接收 5% 流量,实时对比新旧版本的推荐点击率,确认无异常后再逐步放量。如果推荐质量波动,运维一键将流量切回旧版本。
具体案例:某头部电商平台在大促前使用 Istio 对推荐系统做金丝雀发布。团队将新旧两版推荐模型部署为两个 Deployment,通过 VirtualService 将 5% 的边缘流量导入新模型,监控 p99 延迟和 CTR 指标。24 小时后指标稳定,逐步将权重提升至 100%,整个过程业务无感知。
金融系统的零信任安全加固
阶段:分布式系统安全防护
解决的问题:金融场景对数据安全要求极高,服务间调用必须逐跳加密且双向身份认证。传统方案需要在每个服务里嵌入证书管理 SDK,改造成本巨大。服务网格在 Sidecar 层自动启用 mTLS,配合授权策略实现“默认拒绝、按需放行”,让存量微服务无需改代码即可完成安全升级。
具体案例:某股份制银行在其信贷风控系统中引入 Linkerd,利用其自动 mTLS 特性在 200 多个存量服务上无侵入开启了双向加密。同时通过 ServiceProfile 策略,只允许风控核心节点的内部服务互相访问,有效防止了横向越权攻击。
多团队微服务的可观测性统一
阶段:分布式追踪与性能监控
解决的问题:AI 应用往往由多个团队协作开发,服务调用链横跨多处资源池。服务网格的数据面统一采集请求指标、延迟、错误率,还支持分布式追踪注入,让不同团队共享同一套监控面板,定位跨团队问题不再需要“扯皮”开会。
具体案例:一家自动驾驶公司使用 Istio 统一管理其大数据平台与模型推理服务之间的流量,通过 Kiali 可视化服务拓扑,快速定位了一个导致推理延迟飙升的异常调用链——最终发现是一个团队在未通知的情况下修改了模型服务端口。
Python 演示
import random class WeightedRouter: """金丝雀发布流量路由器""" def __init__(self, versions): self.versions = versions def route(self): """按权重返回目标版本名""" total = sum(v['weight'] for v in self.versions) r = random.uniform(0, total) for v in self.versions: r -= v['weight'] if r <= 0: return v['name'] return self.versions[-1]['name'] def simulate(num_requests=10000): router = WeightedRouter([ {'name': 'v1-old', 'weight': 90}, {'name': 'v2-canary', 'weight': 10}, ]) stats = {'v1-old': 0, 'v2-canary': 0} for _ in range(num_requests): version = router.route() stats[version] += 1 for k, v in stats.items(): print(f"{k}: {v} 次 ({v / num_requests * 100:.1f}%)") if __name__ == '__main__': simulate()
total = sum(v['weight'] for v in self.versions)先把所有版本的权重相加,得到总权重池。r -= v['weight']从随机数中依次减去各版本权重,减到负数时即命中该版本。if r <= 0: return v['name']命中当前版本后立即返回,确保请求只发往一个目标。for _ in range(num_requests):循环发起大量模拟请求,观察统计结果逼近预设权重。router = WeightedRouter([...])定义新旧版本的权重配置,等价于服务网格中的流量规则文件。
常见误区
误区Kubernetes 已经支持 Service、Ingress 和服务发现,是不是就够用了?服务网格是不是 K8s 默认就有的功能?
正解Kubernetes 自带的 Service 只提供基础的负载均衡与 DNS 解析,Ingress 主要面向外部流量接入。服务网格是独立于 K8s 的一层基础设施,需要额外安装部署。它做的是“服务间通信的深度治理”,包括灰度路由、熔断、mTLS 等高级能力,这些是 K8s 原语无法直接提供的。可以理解为:K8s 是修路+基础路牌的部门,而服务网格是智能交通指挥中心。
为何常见:K8s 已经抽象了网络模型,初学者很容易把“名字解析+转发”误认为就是完整的流量治理。
误区Istio 功能更多、生态更强,所以任何场景都应该优先选择 Istio,Linkerd 只是“入门玩具”。
正解Istio 功能丰富的同时,也带来了更高的资源占用和更陡峭的学习曲线。对于中小型团队或单一集群轻负载场景,Linkerd 的极简设计和极低资源开销往往是更理性的选择。工具没有绝对优劣,只有匹配度。选型应该以团队能力、业务规模、运维预算为核心变量,而不是直接拿功能清单做对比。
为何常见:人们在比较技术方案时,容易把可量化的“功能数量”当作最重要的指标,忽略了运维成本这一隐性变量。
误区Sidecar 只是“旁路拦截”,不会影响真实链路,部署后性能应该和以前一模一样。
正解Sidecar 在网络链路上处于“必经之路”的位置,所有进出流量都会经过代理转发,必然带来额外的 CPU、内存消耗和毫秒级延迟。虽然现代代理的性能已经很优秀,但高 QPS 场景下的延迟与资源开销必须提前压测评估。服务网格的收益是治理能力和透明化,代价是新增的代理节点——两者需要权衡,而不是只谈收益不谈成本。
为何常见:“透明代理”中的“透明”容易让人误以为“零影响”,实际透明指的是业务代码无感知,而非物理零开销。
误区部署了服务网格,所有服务间的流量就会自动完成 mTLS 加密,无需任何配置。
正解Istio 支持"Auto mTLS"但默认需要启用 PeerAuthentication 策略才会真正开启;Linkerd 自动 mTLS 更接近默认行为,但也需要服务使用代理注入。要让所有流量加密,还需确保网格内所有命名空间的 Pod 都注入了 Sidecar。安全不是一个开关,而是一个需要验证的全链路策略。只装网格不配策略,流量依然可能是明文。
为何常见:厂商文档强调“一键开启”,用户容易忽略“一键”背后的前置条件与适用范围。
误区控制面是网格的“大脑”,一旦挂了,所有 Sidecar 都会停止转发,整个系统宕机。
正解数据面代理在启动后会把配置缓存到本地,即使控制面短暂不可用,代理也会继续按最后一次有效配置转发流量。控制面“智障”不等于数据面“罢工”,两条链路是分离的。当然,如果此时需要动态调整路由或签发新证书,功能会受限——但已有流量的稳定性通常能维持。架构设计者需要关注的不是“会不会挂”,而是“挂了之后能撑多久”。
为何常见:人们容易把系统类比为“大脑”与“身体”的关系,忽略了分布式系统设计中的解耦与容错原则。
面试题
Q1. 服务网格体系包含哪两个核心平面?
- A.数据面与控制面← 正确答案
- B.控制面与业务面
- C.数据面与 API 面
- D.网络面与存储面
答案:A。数据面由所有 Sidecar 代理组成,负责转发业务流量;控制面负责下发规则与策略。类比城市交通,控制面是指挥中心,数据面是各路口收费亭。
Q2. 服务网格要解决微服务场景中最核心的问题是什么?
- A.服务间通信治理← 正确答案
- B.容器镜像管理
- C.数据库读写性能
- D.前端页面渲染速度
答案:A。微服务数量增长后,服务间通信面临连接爆炸、治理复杂、安全缺失等痛点。服务网格正是通过 Sidecar 代理解耦通信逻辑,实现流量治理与安全策略的透明注入。
Q3. 金丝雀发布中 v1 权重为 90、v2 权重为 10,流量分配结果是?
- A.全部流量进入 v1
- B.10% 流量进入 v2← 正确答案
- C.流量在两个版本间轮询
- D.仅当 v1 异常时切换 v2
答案:B。根据权重分配公式,v2 占比为 10/(90+10)=10%。等价于城市交通中 10% 的车辆被引导到新道路。
Q4. Linkerd 相比 Istio 的优势有哪些?
- A.更低资源占用率← 正确答案
- B.更少运维复杂度← 正确答案
- C.更全流量管理功能
- D.支持自动双向认证
答案:AB。Linkerd 的 Rust 微代理资源占用远低于 Envoy,架构极简、学习成本低。功能全面性和协议支持深度仍是 Istio 的优势,而自动 mTLS 两者都具备,不构成 Linkerd 的独特优势。
Q5. 在 mTLS 的缩写中,第二个 T 表示什么?
- A.传输层安全协议← 正确答案
- B.令牌签名算法
- C.流量转发规则
- D.时间戳验证机制
答案:A。mTLS 全称 Mutual Transport Layer Security,即双向传输层安全。与普通 TLS 只验证服务器身份不同,mTLS 要求通信双方都出示证书完成双向认证。
Q6. Istio 流量治理支持的核心能力有哪些?
- A.金丝雀灰度发布← 正确答案
- B.熔断与超时重试← 正确答案
- C.流量镜像切换← 正确答案
- D.数据库连接调优
答案:ABC。Istio 通过 VirtualService 与 DestinationRule 实现灰度发布、熔断、超时重试和流量镜像等治理手段。数据库连接调优属于业务层或数据库代理的职责,不在 Istio 流量治理范围内。
Q7. Sidecar 代理能够透明拦截服务通信的关键机制是什么?
- A.修改业务进程调用链
- B.iptables 流量重定向← 正确答案
- C.DNS 注入虚假记录
- D.编译期字节码增强
答案:B。Sidecar 透明代理通常通过 Kubernetes 的 iptables 规则或 CNI 插件,将进出业务容器的流量重定向到代理端口,业务进程无感知。这相当于在道路上安装隐蔽式电子收费门,司机不觉得多了道关卡。
Q8. 生产环境做服务网格选型时应考虑哪些因素?
- A.团队运维能力和技术储备← 正确答案
- B.数据面性能和资源开销← 正确答案
- C.控制面特性和生态成熟度← 正确答案
- D.是否兼容所有编程语言
答案:ABC。选型需要综合评估团队是否养得起复杂控制面、数据面在目标 QPS 下的性能开销、功能与生态是否匹配业务。没有网格能“兼容所有语言”,跨语言依赖 Proxy 的通用协议能力而非语言适配。
Q9. 控制面短暂宕机期间,数据面代理会如何表现?
- A.立即停止所有流量转发
- B.按最后配置继续转发← 正确答案
- C.自动切换到备用集群
- D.随机丢弃部分网络请求
答案:B。数据面代理在启动后会缓存控制面下发的最后一份有效配置,控制面故障时代理仍能按缓存规则继续转发。但如果需要动态调整路由或刷新证书,功能会受限。这正是分布式系统“解耦”设计的意义。
Q10. 在 Kubernetes 中,Sidecar 代理通常以什么方式注入?
- A.独立部署在单独命名空间
- B.业务 Pod 内增加容器← 正确答案
- C.替换原有业务容器镜像
- D.通过 DaemonSet 全局安装
答案:B。服务网格注入器(如 Istio 的 webhook)会在 Pod 创建时自动添加一个 Sidecar 容器,与业务容器共享网络命名空间。这样代理可以拦截该 Pod 的全部进出流量,而无需改动业务代码。