每日一Go-69、为什么装了 Istio,却感觉什么都没发生?(Sidecar 到底干了什么)

9 阅读4分钟

我昨天在Kind里把 Istio 跑起来了。服务能访问,接口能通,QPS也没变。辣么,问题来了:我装了个啥?

如果你现在正处在这个阶段,恭喜你——你已经走到了 90% 人学 Istio 会卡住的地方

不是安装失败,而是安装成功,却毫无“体感”

今天我们就把这件事彻底讲清楚:Istio 装完后,到底发生了什么?Sidecar 在你看不见的地方干了什么?


一、先说结论:Istio 的“价值”,不是立刻可见的功能

很多人第一次装完 Istio 后的心理预期是这样的:

  • 能不能看到一个新 API?

  • 能不能自动限流?

  • 能不能有一个神奇按钮?

结果发现:

什么都没变。

这是正常的,而且是 Istio 设计上的必然结果。

原因只有一句话:

Istio 不是给“人”用的功能,而是给“流量”用的基础设施。

你不主动“指挥”流量,它就只是默默接管


二、真正的变化,其实发生在 Pod 里

我们先看一个最简单、最容易被忽略的事实。

1. 一个 Pod,已经不再是一个容器了

在没有 Istio 的世界里:

Pod

而当你给 namespace 打上这个标签:

kubectl label namespace codee-jun istio-injection=enabled

你再起一个 Pod,会变成:

Pod

你没写一行代码,却多了一个容器。

这就是所谓的 Sidecar


三、Sidecar 不是“旁边挂着”,而是“卡在中间”

很多人对 Sidecar 有个误解:

“是不是在旁边监听一下?”

不是。

它是直接插在你所有网络流量中间的。

流量路径已经变成这样:

入站流量

Client
  ↓
Envoy (Sidecar)
  ↓
Your App

你的应用 以为自己在直连对方,但实际上:

它所有 TCP / HTTP 请求,都已经被 Envoy 接管了。


四、它是怎么做到“无感拦截”的?

答案是一个你平时几乎不会主动碰的东西:

iptables

Istio 在 Pod 启动时,会通过一个 initContainer:

  • 修改网络规则

  • 把所有进出流量

  • 重定向到 Envoy 监听的端口

你可以理解为:

“从今天开始,你这个 Pod 的网络,我接管了。”

这一步完成后:

  • 你不需要改代码

  • 不需要改 SDK

  • 不需要改调用方式

流量已经被劫持成功


五、那 Envoy 到底在“偷偷干什么”?

这是今天最重要的一部分。

1. 它在帮你做「调用治理」

你在业务代码里,可能写过这些东西:

  • 超时

  • 重试

  • 熔断

  • 限流

问题是:

  • Java 写一套

  • Go 写一套

  • Node 再写一套

逻辑分散、标准不一、升级困难。

Envoy 接管后,这些能力统一变成:

  • 网络层规则

  • YAML 配置

  • 动态下发

治理能力,从代码里,被抽走了。


2.  它在自动帮你做 mTLS

很多人直到这一步才意识到:

我好像突然有“服务间加密”了?

没错。

在 Istio 默认配置下:

  • Sidecar 之间自动建立 mTLS

  • 证书自动轮转

  • 应用层完全无感

你没有:

  • 引入 TLS 库

  • 管理证书

  • 写握手代码

但你已经得到了:

零代码的服务间安全通信


3.  它在悄悄帮你采集指标和链路

你没有埋点,但却突然能看到:

  • QPS

  • 延迟

  • 错误率

  • 调用拓扑

原因只有一个:

所有流量都经过 Envoy

这意味着:

  • 指标是天然的

  • Trace 是自动的

  • 拓扑是真实的

这也是为什么:

Istio + Prometheus + Jaeger几乎是“即插即用”


六、为什么你“感觉什么都没发生”?

因为 Istio 默认是“保守模式”

它只做三件事:

  1. 接管流量

  2. 建立控制通道

  3. 收集数据

但它 不会主动改变你的业务行为

不加规则:

  • 不限流

  • 不熔断

  • 不灰度

  • 不改路由

这正是它“基础设施”的本质。


七、你可以用几个命令,亲眼确认它真的在工作

1.  看看 Sidecar 状态

istioctl proxy-status 
$ istioctl proxy-status                                                                                                                                                                           

你会看到每个 Pod 的 Envoy 是否同步成功。


2.  看看 Envoy 的真实配置

istioctl proxy-config listeners pod-name

你会第一次意识到:

原来我的 Pod 里,藏着这么多网络规则。


3.  验证 mTLS

$ istioctl proxy-config clusters golang-per-day-68-667956b8d7-h9tgr -n codee-jun -o json | grep -E "transport_socket|tls_context|ISTIO_MUTUAL"                                                    

八、一句话理解 Istio 的真正价值

很多文章会告诉你:

  • Istio 很复杂

  • Istio 很重

  • Istio 有学习成本

但真正的价值其实只有一句话:

Istio 把“微服务治理”,从应用开发问题,变成了平台能力。

你写业务代码,它负责:

  • 网络

  • 安全

  • 流量

  • 可观测性


九、写在最后:没感觉,说明你走对了

如果你装完 Istio 后的感觉是:

“好像什么都没发生”

那说明:

  • 它已经稳定接管

  • 没干扰你业务

  • 没引入风险

这是一个基础设施最好的状态。

图片


友情链接:加班费计算器(vx小程序搜索“加班计”)


*源码地址*

1、公众号“Codee君”回复“源码”获取源码

2、pan.baidu.com/s/1B6pgLWfS…


如果您喜欢这篇文章,请您(点赞、分享、亮爱心),万分感谢!