背景
笔者接到上级任务,需要根据用户特征做全链路的灰度发布,经过讨论采用istio作为技术方案,istio上手极为简单,
在部署好istio后,只需要对namespace加一个标签istio-injection=enabled,即可将此namespace下的pod纳入istio服务网关,
从而实现流量转移,镜像等功能。笔者不禁好奇,加了这个标签后istio做了啥。
istio-injection=enabled背后的原理
先说结论
istio通过注入sidecar(istio-prxoy)到容器里,因为与处于同一pod的应用同用一个network namspace,从而可以实现对应用进出口流量进行劫持。
“为啥处于同一个 network namspace,就可以实现流量劫持?”,感兴趣可以参考我往期文章《用nsenter排查容器网络问题及原理》
分步剖析
理解istio的sidecar模式
sidecar模式:设计的核心思想在于控制和逻辑分离。我们只需要专注地做好和业务逻辑相关的代码,然后由sidecar来实现这些与业务逻辑没有关系的控制功能,比如监视、日志记录、限流、熔断等。
对istio而言,istio-proxy组件就是sidecar,跟业务容器伴生,非侵入式地将业务容器纳入服务网格中。
istio-proxy的原理
istio-proxy容器内部运行着 pilot-agent 与 envo