《云原生网络数据面可观测性最佳实践》——二、全景剖析阿里云容器网络数据链路——6. ASM Istio 模式架构设计(上)

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: 《云原生网络数据面可观测性最佳实践》——二、全景剖析阿里云容器网络数据链路——6. ASM Istio 模式架构设计(上)

近几年,企业基础设施云原生化的趋势越来越强烈,从最开始的IaaS化到现在的微服务化,客户的颗粒度精细化和可观测性的需求更加强烈。容器网络为了满足客户更高性能和更高的密度,也一直在高速的发展和演进中,这必然对客户对云原生网络的可观测性带来了极高的门槛和挑战。

 

为了提高云原生网络的可观测性,同时便于客户和前后线同学增加对业务链路的可读性,ACK产研和AES联合共建,合作开发ack net-exporter和云原生网络数据面可观测性系列,帮助客户和前后线同学了解云原生网络架构体系,简化对云原生网络的可观测性的门槛,优化客户运维和售后同学处理疑难问题的体验,提高云原生网络的链路的稳定性。image.png

图: 服务网格示例

image.png

图 Istio数据面示意图

 

Kubernetes的横空出现打破了底层服务器、底层网络等计算资源的界限,给业务的灵活部署、快速恢复、弹性伸缩,资源效率最大化带来了无限可能。

 

但是业务场景的‘贪婪’是无限的,随着微服务趋势大肆发展,业务上对于同一个service,不同版本和流量控制有着更精细化的颗粒度的需求,最好能实现Pod维度的流量控制,可观测性等等。这些在kubernetes上是无法实现的:

 

从流量角度,k8s最小控制维度是service其他比如金丝雀 等发布,借助各种ingress controller或者其他组件实现,并且这些也无法实现Pod之间流量和连接状态可观测性

k8s给服务微型化,小型化创造了条件如果前后端服务存在调用关心,他们如果使用共享通信库,则会在开发阶段就要求所有微服务使用相同逻辑语言和堆栈,这从某种程度上又大大限制微服务独立化,无法实现完全‘漠不关心’

将原来集成在同一个ECS上服务拆分成不同模块,这些模块之间调用涉及跨ECS等,那么必然需要在代码开发阶段需要考虑超时,重试,连接失败等逻辑机制,而这些与微服务最核心服务应用其实没有太大关系,但是开发工作往往耗费大量经历在逻辑设计上

 

那么,有没有办法实现上述和微服务的业务完全隔离呢?Istio的出现给这个带来了相对完美的解决方案,让应用这和开发者更加关注业务本身的开发迭代。Istio利用了k8s的Pod概念,会根据使用者的配置,在每个被注入的Pod部署时,自动注入istio-proxy 容器和initial 容器。

 

Initial容器的目的是通过修改Pod 单独网络命名空间的iptables规则,让需要代理的流量进入到istio-proxy 监听的端口,istio-proxy 监听出入 两个端口,根据网格配置,来实现对出入流量的代理实现和干预。而被同一个istio注入的载体,都被视为同一个服务网格之内,他们之间的调用已经脱离了service的层面,会命中相关的istio cluster配置的endpoint,这样我们就可以实现Pod维度的流量管理、观测性、安全性等配置。

 

1) Pod注入

ASM默认提供了一个Webhook控制器,可以将Sidecar代理自动添加到可用的Pod中。通过下面的命令可以看到ASM注入的集群有个 istio-sidecar-injector-1-15-3的mutatingwebhookconfiguration,查看webhook内容,可以看到其中一条就是有 istio-inject: enabled 标签的namespace  里的pod创建时候会自动注入。

image.pngimage.png

除了命名空间维度,还有Pod维度,其他注解方式等多种维度实现K8s集群是否被加入到Istio服务网格中。为了充分利用服务网格的所有特性,服务网格中ACK集群的应用Pod必须包含一个Sidecar代理。除了手动注入方式外,通常建议启用自动注入的方式来简化部署,ASM已经实现了注入配置的可视化操作,具体请见多种方式灵活开启自动注入

image.png

 

2) Pod流量转发

通过describe被注入的Pod,可以发现Pod中除了设置好的业务container,还多出两个容器:istio-proxy和init container:istio-init。这两个容器的镜像是一样的,只是运行的命令的不一样,这样的好处是只需要拉取一份镜像,节省了拉取镜像的时间。

image.png

 

3) Init Container

Init container 利用的是k8s的特性,一种具有特权的特殊容器,在Pod内的应用容器启动之前运行。Init 容器可以包括一些应用镜像中不存在的实用工具和安装脚本。每个Pod中可以包含多个容器和多个Init 容器。他与普通容器很像,但是有自己独特点:

 

多个init 容器是串行运行的。也就是说多个init 容器会依序运行,等上一个init 容器运行完毕结束后,才会开始运行下一个容器

只有等到所有init 容器全部运行结束退出后,业务容器才开始启动,在这之前,pod不会处于ready

如果Pod的Init 容器失败,kubelet 根据pod设置restartPolicy 进行相应action

 

既然现在了解了Init container的作用,那我们来看一下istio-init在启动的过程中做了哪些事情,可以通过下面的命令:

kubectl logs -n istio-inject productpage-v1-797d845774-dndmk -c istio-init

image.png

image.png

可以看到istio-init在启动过程中进行了一连串的iptables规则的生成和配置,比如出方向转发到15001端口;入方向转发到15006端口;访问15008端口,直接return不进行流量劫持等等。

 

那有什么办法可以自定义配置么?查看pod的信息可以看到相关配置的启动参数,也就通过相关规则实现了出入流量重定向到设置的端口。

image.png

 

-p: 所有出方向的流量被iptables重定向到15001端口

-z: 所有入方向的流量被iptables重定向到15006端口

-u: 用于排除用户ID为1337,可以视为envoy应用本身使用UID 1337

-m: 流量重定向模式,“REDIRECT” 或 “TPROXY”

-i: 重定向出方向的地址范围,“*” 表示重定向所有出站流量。

-x: 指将从重定向出方向中排除的IP 地址范围

-b: 重定向入站端口列表

-d: 重定向入站端口中排除的端口列表

 

我们从Pod的视角去观察,将Pod视为一个整体,里面有istio-proxy容器和业务容器APP container

入方向流量转发

image.png

 

根据上文的iptables 规则,我们可以归纳出被入方向代理转发的端口,比如80等,在Pod的网络命名空间netfilter模块经过流程是Client -> RREROUTING -> ISTIO_INBOUND -> ISTIO_IN_REDIRECT -> INPUT -> Envoy 15006(Inbound)-> OUTPUT -> ISTIO_OUTPUT -> POSTROUTING -> APP。这样就实现了入方向流量先被转发到sidecar容器后,在转发到业务容器的监听端口。其中在步骤5和6 之间,流量会按照设置好的istio规则进行处理。

 

出方向流量转发

image.png

 

根据上文的iptables 规则,我们可以归纳出被入方向代理转发的端口,比如80等,在Pod的网络命名空间netfilter模块经过流程是APP > OUTPUT -> ISTIO_OUTPUT -> ISTIO_REDIRECT -> Envoy 15001(Outbound)-> OUTPUT -> ISTIO_OUTPUT -> POSTROUTING -> DST。这样就实现了出方向流量先被转发到sidecar容器后,在转发到目的监听端口。其中在步骤d和e 之间,流量会按照设置好的istio规则进行处理。

入方向流量免转发

image.png

 

对于入方向的某些端口或者自定义端口,我们不需要它经过sidecar容器,iptables规则会设置将符合条件的入方向流量避免转发到15006端口,直接转发到业务容器监听端口 RREROUTING -> ISTIO_INBOUND -> INPUT -> APP。

 出方向流量免转发

image.png

 

对于出方向的某些端口或者自定义端口,我们不需要它经过sidecar容器,iptables规则会设置将符合条件的入方向流量避免转发到15001端口,直接离开Pod的网络命名空间 APP -> OUTPUT -> ISTIO_OUTPUT -> POSTROUTING -> DST。


更多精彩内容,欢迎观看:

《云原生网络数据面可观测性最佳实践》——二、全景剖析阿里云容器网络数据链路——6. ASM Istio 模式架构设计(中):https://developer.aliyun.com/article/1221373?spm=a2c6h.13148508.setting.16.15f94f0eCydDfj


相关文章
|
3月前
|
Cloud Native 安全 网络安全
云计算与网络安全:技术融合与挑战云原生技术在现代软件开发中的应用
【8月更文挑战第28天】在数字时代的浪潮中,云计算和网络安全成为信息技术领域的两大支柱。本文将探讨云计算服务的分类、特点及其面临的安全威胁,分析网络安全的基本概念、重要性以及信息安全的关键要素。同时,文章将深入讨论云计算环境下的网络安全问题,包括数据保护、访问控制和合规性挑战,并提出相应的解决策略和技术措施。最后,通过一个代码示例,展示如何在云计算环境中实现基本的数据加密,以增强信息的安全性。 【8月更文挑战第28天】 随着云计算技术的飞速发展,云原生技术已成为推动软件行业创新的关键力量。本文将深入探讨云原生的核心概念、优势以及如何在现代软件开发中有效利用云原生技术。我们将通过具体案例,展示
|
4月前
|
机器学习/深度学习 Kubernetes Cloud Native
云原生技术演进之旅:从容器到服务网格
在云计算的浪潮中,云原生技术以其独特的灵活性和可扩展性引领了新的技术革命。本文将深入探讨云原生技术的发展脉络,从容器技术的突破,到Kubernetes的集群管理,再到服务网格的微服务通信解决方案,揭示云原生如何不断适应和塑造现代应用的需求。文章将通过数据支撑和案例分析,展示云原生技术在实际应用中的优势和挑战,并预测其未来的发展趋势。
54 1
|
3月前
|
Kubernetes Cloud Native 网络安全
云原生入门指南:Kubernetes和容器化技术云计算与网络安全:技术融合的新篇章
【8月更文挑战第30天】在云计算的浪潮中,云原生技术如Kubernetes已成为现代软件部署的核心。本文将引导读者理解云原生的基本概念,探索Kubernetes如何管理容器化应用,并展示如何通过实践加深理解。
|
3月前
|
Java Android开发 Kotlin
Android项目架构设计问题之要在Glide库中加载网络图片到ImageView如何解决
Android项目架构设计问题之要在Glide库中加载网络图片到ImageView如何解决
37 0
|
3月前
|
Java Android开发 开发者
Android项目架构设计问题之使用Retrofit2作为网络库如何解决
Android项目架构设计问题之使用Retrofit2作为网络库如何解决
70 0
|
5月前
|
Kubernetes Cloud Native 开发者
阿里云网络发布 alibaba-load-balancer-controller v1.2.0:开启云原生网关开源新篇章!敬请探索!
**阿里云发布开源版ALB控制器v1.2.0,对齐商业版ALB Ingress Controller v2.10.0。新版本增强了功能特性,提升了用户体验,并提供了最佳实践。功能更新包括自定义标签、QUIC协议支持、转发规则和安全策略等。此外,还引入了ReadinessGate实现滚动升级时的平滑上线和Prestop钩子确保平滑下线。用户可从GitHub获取开源代码,通过Docker Hub拉取镜像,开始使用alibaba-load-balancer-controller v1.2.0。**
285 3
阿里云网络发布 alibaba-load-balancer-controller v1.2.0:开启云原生网关开源新篇章!敬请探索!
|
5月前
|
Kubernetes Cloud Native 开发者
阿里云网络发布云原生网关 alibaba-load-balancer-controller v1.2.0,持续拥抱开源生态
alibaba-load-balancer-controller开源版本正式推出v1.2.0,能力对齐ALB Ingress Controller商业版v2.10.0。
|
6月前
|
数据中心 网络架构 Python
【计算巢】数据中心的网络架构设计原则
【5月更文挑战第31天】探讨数据中心网络架构设计原则:稳定性是基础,需抵御各种挑战;强调扩展性,适应业务发展;追求高效,确保数据传输速度;注重灵活性,灵活应对变化。简单Python代码示例展示网络节点连接。设计时需具备长远眼光,综合考虑技术方案,以构建坚固高效的信息桥梁。同学们,要持续学习和探索,为信息世界贡献力量!
92 2
|
6月前
|
弹性计算 安全 微服务
【阿里云云原生专栏】容器网络技术前沿:阿里云Terway网络方案详解
【5月更文挑战第26天】阿里云Terway是高性能的容器网络方案,基于ECS的ENI实现,提供低延迟高吞吐的网络服务。它简化网络管理,实现安全隔离,并与阿里云服务无缝集成。Terway由CNI、Node和Controller组成,适用于微服务、混合云和多租户环境,为企业数字化转型中的复杂网络需求提供强大支持。
401 1
|
6月前
|
安全 网络协议 网络安全
网络安全笔记整理,你花了多久弄明白架构设计
网络安全笔记整理,你花了多久弄明白架构设计
下一篇
无影云桌面