# xDS
Sermant框架的xDS服务使微服务可以在Kubenetes场景下接入Istio。Sermant基于xDS协议和Istio的控制平面直接进行通信,获取服务发现、路由、负载均衡等配置信息,从而可以替代Envoy作为Istio的数据平面完成服务治理能力。xDS插件插件整合了xDS协议的流量管理、安全特性等,使得用户可以在不使用Envoy的方式和Istio控制平面进行通信,并实现基于xDS协议的服务治理。 具体的xDS功能在Sermant框架中的支持和介绍请参考基于Sermant+Istio的无代理服务网格。本文将介绍xDS插件的使用。
# 基于xDS协议的路由
xDS插件基于Sermant框架层的xDS服务获取服务的路由配置、服务实例和负载均衡配置实现基于xDS协议的路由(下文简称xDS路由)。用户可以通过Istio的DestinationRule (opens new window)和VirtualService (opens new window)下发路由配置。目前支持通过请求header和路径进行流量路由,支持HttpClient、HttpAsyncClient、OkHttp、HttpURLConnection和Spring Cloud框架。
# xDS路由使用
使用xDS插件的路由功能需在Kubenetes环境部署Istio (opens new window),同时在xDS插件的config/config.yaml
配置文件中开启xDS功能开关:
xds.traffic.management.config:
enable: true
使用xDS路由能力的微服务在创建Pods时无需挂载Envoy代理容器
http客户端调用上游服务的URL格式需要为http://${serviceName}.${hostSuffix}/{path}
,其中${serviceName}为调用上游服务的服务名,${hostSuffix}为Kubernetes的域名后缀。Istio下发路由配置模版请参考基于xDS服务的路由能力一节,xDS路由使用示例请参考基于xds服务的路由示例一节。
# xDS路由支持框架版本和限制
框架 | 支持版本 |
---|---|
SpringCloud | Edgware.SR2 - 2021.0.0 |
HttpClient | 4.x |
HttpAsyncClient | 4.x |
OkHttp | 2.2.x - 4.x |
HttpURLConnection | 1.8 |
# 基于xDS协议的流控
xDS插件基于Sermant框架层的xDS服务获取服务的流控配置实现基于xDS协议的流控(下文简称xDS流控)。用户可以通过Istio的DestinationRule (opens new window)、VirtualService (opens new window)和EnvoyFilter (opens new window)下发流控配置。目前支持重试、错误注入、限流和熔断四种能力,支持HttpClient、OkHttp、HttpURLConnection三种框架。
# xDS流控使用
使用xDS流控需在Kubenetes环境部署Istio (opens new window),同时在xDS插件的config/config.yaml
配置文件中开启xDS功能开关(如需启用基于匹配响应状态码和响应头名称的重试功能,需要在xDS插件的config/config.yaml
配置文件中配置状态码和响应头,并在VirtualService (opens new window)的spec.retries.retryOn中添加重试条件retriable-status-codes和retriable-headers):
xds.traffic.management.config:
enable: true
x-sermant-retriable-status-codes:
- 503
x-sermant-retriable-header-names:
- x-local-rate-limit
使用xDS流控能力的微服务在创建Pods时无需挂载Envoy代理容器
http客户端调用上游服务的URL格式需要为http://${serviceName}.${hostSuffix}/{path}
,其中${serviceName}为调用上游服务的服务名,${hostSuffix}为Kubernetes的域名后缀。Istio下发流控配置模版请参考基于xds服务的流控能力一节,xDS流控使用示例请参考基于xds服务的流控示例一节。
# xDS流控支持框架版本和限制
框架 | 支持版本 |
---|---|
HttpClient | 4.x |
OkHttp | 2.2.x - 4.x |
HttpURLConnection | 1.8 |
# 基于xDS协议的安全
Sermant框架层基于xDS协议实现了安全配置的获取能力,xDS插件调用xDS安全服务接口获取Kubenetes Service的安全配置。Istio的安全配置包括身份和证书管理、对等认证、安全认证、授权。Istio可以通过PeerAuthentication (opens new window)、RequestAuthentication (opens new window)、AuthorizationPolicy (opens new window)来下发以上规则。
# xDS安全使用
使用xDS安全需在Kubenetes环境部署Istio (opens new window),同时在xDS插件的config/config.yaml
配置文件中开启xDS功能开关:
xds.traffic.management.config:
enable: true
使用xDS安全能力的微服务在创建Pods时无需挂载Envoy代理容器
http客户端调用上游服务的URL格式需要为http://${serviceName}.${hostSuffix}/{path}
,其中${serviceName}为调用上游服务的服务名,${hostSuffix}为Kubernetes的域名后缀。Istio下发安全配置模版请参考基于xDS服务的安全能力一节。
# xDS安全支持框架版本和限制
请求认证和授权策略不受客户端限制,对等认证支持客户端如下。
框架 | 支持版本 |
---|---|
HttpClient(对等认证) | 4.x |
OkHttp(对等认证) | 2.2.x - 4.x |