# 服务网格(ServiceMesh) 客户端请求网页常常会经过代理,代理请求后面的服务,后台服务返回给代理,代理再返回给客户端。这是一个典型的代理服务的情景。大概是这样: ```bash Client <-> Proxy <-> Server ``` 现代后端开发,将服务拆分成多个微服务是常见的做法。 ```bash Client <-> Interface <-> [ProxyA->ServerA] <-> [ProxyB->ServerB] Client <-> Interface <-> [ProxyB->ServerB] <-> [ProxyA->ServerA] ``` 微服务之间的互相访问,公共的代理部分可以做很多公共的控制逻辑。这部分的的代码标准化,下层到云原生的基础设施里,就形成了服务网格(ServiceMesh)。服务网格通常管理微服务之间这三个方面的功能: 1. 流量管理(Traffic management):动态服务发现、路由、流量灰度和流量分离等。 2. 安全(Security):加密传输、基于正式验证的授权、基于访问控制和网络分区的授权等。 3. 可观察性(Observability): 例如链路跟踪、日志等。 服务网格和 k8s 之间是什么关系呢?一图胜千言,在k8s的基础上,为每个pod增加一个proxy(或者叫边车,sidecar),有两个变化: 1. 原来k8s的node里的pod通过node的kube-proxy和 API Server 通信;在ServiceMesh下,每个pod直接通过装在pod上的proxy和API Server通信。 2. 原来k8s的node里的pod通过node的kube-proxy桥接通信;在ServiceMesh下,每个 pod 之间直接通过装在 pod上的proxy直接通信。 ![](https://gitcode.net/csdn/skill_tree_cloud_native/-/raw/master/data/1.云原生初阶/5.服务网格(istio)/1.ServiceMesh介绍/img/k8s_native_vs_service_mesh.png) 以下说法错误的是? ## 答案 服务网格之间的通信都要通过 API Server 转发。 ## 选项 ### A 服务网格通常解决流量管理、服务安全、服务可观察性问题。 ### B 在k8s原生组件的基础上,给每个pod安装服务网格的proxy,对这些proxy的编排调度,构成里服务网格层。 ### C 服务网格的特点是,将微服务管理功能内置到基础架构层,无需在应用层写相关代码。