提供服务发现和服务治理相能力,包括服务统一管理、查看服务详情、服务监控、日志、智能路由、服务治理(超时重试、限流、熔断)、灰度发布等功能。
1、服务详情
服务详情页面分两部分,上方显示详细信息,下方显示实例列表。
- 容器部署的服务,点击服务名称进入服务详情页面,展示如下,服务详情、资源监控、实时日志、网关路由等。
- 传统主机部署的服务,暂不支持资源监控、实时日志、sidecar启动顺序,其它支持。
- 跨集群实例列表:同名服务部署在同一个项目、不同集群时,都接入网格后,认为是同一个服务,设置的治理策略生效于此服务的所有实例中。服务跨集群部署和治理操作步骤如下:
- 同一项目授权不同集群,例集群A\B。某provider服务部署在集群A/B。网格服务管控页面切换项目&集群A,将此服务接入网格;切换到项目&集群B,也将此服务接入网格。
- 然后为此服务设置治理策略,在集群A中创建的策略,切换到集群B,也可查看,反之亦然。
3、资源监控、实时日志
略,和容器服务内功能一致入口
4、各协议支持治理策略说明
策略类型 | 策略规则 | HTTP | TCP | gRPC | Dubbo2 |
---|---|---|---|---|---|
服务通信 | 各服务间正常通信 | 支持 | 支持 | 支持 | 支持 |
网关路由 | 支持集群外部访问,版本路由等 | 支持 | 支持 | 支持 | |
负载均衡 | 随机、轮询、会话保持 | 支持 | 支持 | 支持 | |
灰度发布 | 版本维度设置,策略支持权重、内容 | 支持 | 支持 | ||
熔断 | 端口维度设置,策略支持:连续失败次数 | 支持 | 支持 | ||
降级 | 手动降级,熔断服务所有实例 | 支持 | 支持 | ||
限流 | 端口维度设置,可匹配url进行限流 | 支持 | 支持 | ||
超时重试 | 超时时间、重试次数、单次超时时间、自定义重试条件 | 支持 | 支持 | ||
连接池 | 支持应用在TCP级别和HTTP级别 | 支持 | 支持 | 支持 | |
mTLS | 开启加密通信 | 支持 | 支持 | 支持 | |
访问控制 | 设置访问黑白名单 | 支持 | 支持 | ||
故障注入 | 中断、延时故障 | 支持 | 支持 |
5、各治理策略生效规则--重要!
各治理策略生效规则:
- mTLS,当服务B开启后,会在服务B(envoy)的inBound以及服务A(envoy)的outbound生效
- 限流、访问控制,当服务B设置后,会在服务B(envoy)的inBound生效
- 熔断、降级、超时重试、灰度发布、故障模拟,当服务B设置后,会在服务A(envoy)的outBound生效,但是熔断、降级、灰度发布对网格网关ingress gateway的outBound不生效
- 网关路由,当服务B设置后,会在网格网关ingress gateway的outBound生效
- 连接池,当服务B设置后,会在服务B(envoy)的inBound以及服务A(envoy)的outbound生效,具体如下:
- 在服务B的inBound生效的参数:maxConnections/http2MaxRequests/maxRequestsPerConnection/connectTimeout
- 在服务A的outbound生效的参数:http2MaxRequests/maxRequestsPerConnection/idleTimeout/tcpKeepalive
重要说明
- 如果策略在主调服务A的outBound生效,则须将主调服务A也加入网格并在分组下发管理功能中下发服务B的治理策略,否则这些策略不生效;反之如果在被调服务inBound生效,则不需要。
6、负载均衡
负载均衡配置,即在服务的实例之间支持不同的分配调度算法,包括随机、轮询、会话保持(粘性)处理,以适应服务实例调度的不同场景。
关于会话保持(Soft session affinity)模式分配后端实例:
- 服务根据HTTP Header内容、HTTP Cookie内容或源IP获取哈希进行不同需求场景的粘性会话保持;
- 某一目标的会话保持,会因为负载均衡池中的节点数量的变化而被重置。
- 用户进入[服务网格/网格服务管控]页面。找到对应的服务,点击服务名称,进入服务详情页面。
- 切换至“服务治理”页签,单击“编辑”按钮,如下图所示。
- 配置对应的负载均衡算法,配置完成后,单击[确定]按钮,负载均衡算法配置完成。
7、灰度发布
重要说明
灰度发布策略仅在集群内、服务间访问生效;
如果需要对外部访问时(即通过域名访问)生效,则需要配置14、网关路由的路由条件。
灰度发布是迭代的软件产品在生产环境安全上线的一种重要手段。服务网格支持按权重或按内容的灰度发布策略,以满足金丝雀发布、蓝绿发布、A/B测试等场景。
- 金丝雀发布:用来实现业务从老版本到新版本的平滑过渡,避免升级过程中出现的问题对用户造成影响。
- 蓝绿发布:最常见的一种0宕机部署的方式,是一种以可预测的方式发布应用的技术,目的是减少发布过程中服务停止的时间。蓝绿部署原理上很简单,就是通过冗余来解决问题。蓝绿部署的时候,并不停止掉老版本,而是直接部署一套新版本,等新版本运行起来后,再将流量切换到新版本上。但是蓝绿部署要求在升级过程中,同时运行两套程序,对计算资源的要求就是日常所需的二倍。
金丝雀发布流程说明
将目标服务的老版本v1接入网格:在网格服务管控页面,找到目标服务,点击“接入网格”,仅勾选老版本对应的工作负载,定义版本号,例v1,点击确定,接入网格成功。
在容器服务下操作目标服务,选中“增加灰度版本”部署新版本v2,默认不会启动(避免未设置灰度策略时,流量直接流向新版本)。
设置所有流量均流入老版本v1:进入服务网格-网格服务管控-选中该服务-灰度发布页签,添加灰度版本,勾选上述v1版本,添加成功。设置灰度策略,例按权重,流量匹配规则不设置,转发到version=v1,权重100%。
在容器服务下启动新版本v2(如果步骤2在步骤3后,则在此直接启动新版本v2即可)。
将新版本v2接入网格:同步骤1,接入时自动重启服务。
调整灰度策略:例按权重,流量匹配规则不设置,转发到version=v1,权重80%;version=v2,权重20%;其他场景可参考下面的“设置灰度策略”。
观测灰度监控:若正常,逐步调大流量比例到新版本v2,当满足一定条件时,可将流量100%到新版本v2。
下线老版本v1:在容器服务按需停止或删除老版本v1。
结束灰度:点击“结束灰度”按钮,确定后,会自动清空此服务在网格中的所有灰度和故障模拟策略,流量将按负载均衡算法分配到所有实例上。
蓝绿发布流程说明
只有步骤6、7、8和金丝雀发布流程不一致:
- 调整灰度策略:例按权重,流量匹配规则不设置,转发到version=v2,权重100%。
- 观测灰度监控:
- 若出现异常,调整灰度策略version=v1,权重100%。用户自行在容器服务下停止或删除新版本v2。
- 一段时间后,确定新版本v2可以正常工作,用户自行在容器服务下停止或删除老版本v1。
设置灰度策略
- 流量匹配规则:可选择“同时满足所有规则”或“满足任一规则”。支持按header、parameter、uri进行匹配,匹配方式支持前缀匹配、完全匹配、正则匹配,可添加多条规则。
- 转发到目的地,也支持添加多个。选择版本、设置权重比例,每个灰度条件中的权重之和是100%。
各灰度条件之间匹配的优先级与配置页面展示排列顺序一致,从上向下匹配,匹配中了则停止匹配,否则继续向下匹配;若全都匹配不上则返回503。
说明
gRPC协议的服务不支持灰度条件parameter。
gRPC协议的服务设置为uri时,需服务名加上方法名:如/helloworld.Greeter/SayHello。
查看灰度监控
设置灰度策略后,可通过灰度监控,观测流量走向,协助用户进行策略的调整。弹出面板中分集群展示流量情况,包括实时流量比、请求RPS曲线图(分版本统计展示)、平均响应时间ms曲线图(分版本统计展示)。
服务灰度配置场景介绍
对常见的灰度场景设置进行介绍,以便引导用户快速学习和使用。
场景1:按版本权重进行流量分配。例全部流量30%流向版本v1,70%流向版本v2。
场景2:按版本内容进行流量分配。例基于header usr前缀匹配100的请求流向版本v1,usr 前缀匹配200的请求流向v2。
场景3:满足条件的流量流向版本v1,其余流量流向v2。
灰度策略与故障模拟的关系
编辑灰度策略时,需校验此服务是否设置了故障模拟规则,是,则会删除故障模拟策略。
8、连接池
连接池目的是断开超过阈值的连接和请求,保护目标服务。连接池设置应用于上游服务的每个实例,可以应用在TCP级别和HTTP级别。 操作步骤如下所示:
- 进入[服务网格/网格服务管控]页面。找到对应的服务,点击服务名称,进入服务详情页面。
- 切换至“服务治理”页签,进入连接池列表页面。
- 列表展示已默认创建的连接池规则,用户可点击“编辑”按钮进行修改,各字段含义和作用可点击页面小问号获得:
9、超时重试
由于网络中断、网络延迟增加或服务端负载过高导致的调用超时,合理配置超时重试机制成为重要的一环。但并不是所有场景均支持此机制,不幂等的写操作就不建议配置超时重试,例如提交订单,如果失败后不检查直接重试可能造成重复提交,数据不一致等问题。
- 自定义配置超时,表示多次重试的总超时时间,超过后不再发起重试直接返回错误,0代表不设置
- 自定义配置重试,0代表不设置;触发重试条件包括:服务端5xx错误等;单次重试超时;连接失败
- 此处超时重试是服务维度,仅网格内服务相互调用生效
- 重试条件支持单选或多选
- HTTP协议适用:
- gateway-error:与5xx类似,只针对502,503,504状态码有效。
- reset:服务没有任何响应(例超时、断开)则进行重试。
- 5xx:服务返回500-599状态码则进行重试。5xx包含以上四种类型的触发条件。
- retriable-4xx:应用返回4xx状态码时进行重试,目前仅支持409。
- gRPC协议适用:
- cancelled:如果后端gRPC服务的响应头部中的gRPC状态码为cancelled,将尝试对该请求进行重试。
- deadline-exceeded:如果后端gRPC服务的响应头部中的gRPC状态码为deadline-exceeded,将尝试对该请求进行重试。
- internal:如果后端gRPC服务的响应头部中的gRPC状态码为internal,将尝试对该请求进行重试。
- resource-exhausted:如果后端gRPC服务的响应头部中的gRPC状态码为resource-exhausted,将尝试对该请求进行重试。
- unavailable:如果后端gRPC服务的响应头部中的gRPC状态码为unavailable,将尝试对该请求进行重试。
- HTTP协议适用:
说明
当重试条件包含5xx时,会影响熔断策略。例如熔断设置连续3次失败即熔断(熔断条件默认是5xx),当一次请求返回5xx时,会触发重试,如重试次数2次,即出现一次错误请求即会触发熔断,是因为失败重试了2次,共3次。用户需合理设置熔断、超时重试策略等。
10、限流规则
当流量超过了服务能够支撑的范围时,拒绝服务访问,以确保服务在可以承载的容量内稳定运行。
操作步骤如下所示。
- 进入[服务网格/网格服务管控]页面。找到对应的服务,点击服务名称,进入服务详情页面,进入“服务治理”页签。
- 切换至“限流规则”页签,进入限流规则列表页面,点击“添加限流规则”。
- 填写限流规则名称、限流端口、是否匹配Url、限流阈值。
- 限流规则名称:3~60位小写字母、数字、中划线组成,以小写字母开头,小写字母或者数字结尾。
- 限流端口:单选某一端口。
- 匹配Url:默认不勾选。
- 不勾选时,设置单位时间的限流阈值。例每秒 10次/实例。单位时间可选每秒、每分钟、每小时
- 勾选后,url维度设置单位时间的限流阈值,url默认是前缀匹配
- 参数配置完成后,保存成功,列表中展示新添加的限流规则
- 在限流规则列表页面找到需要启用/停用的限流规则,点击操作项的启用/停用,完成操作。
示例:为服务springboot-demo的8080端口设置限流规则每分钟 3次/实例,并启用此规则。循环调用5次,如下图,3次成功,2次已限流(local_rate_limited)。
说明
- 同一端口的限流规则同时仅能有一个生效;不同端口的限流规则可同时生效。
- gRPC服务设置匹配url时,需服务名加上方法名:如/helloworld.Greeter/SayHello。
11、熔断规则
目的:当A服务模块中的某块程序出现故障后,为了不影响其他客户端的请求而做出的及时回应。微服务应用中通常会存在多层服务调用,基础服务的故障可能导致级联故障,将不可用放大,拖垮整个系统,通过熔断机制解决这种服务提供者不可用导致服务调用者不可用的问题。
处理过程:熔断在服务请求处理满足触发条件时产生作用。进入熔断状态后,被请求的服务已经无法处理请求,在第一时间截断请求直接返回错误给调用者。在熔断的持续时间内不再响应请求,时间过后,会再次尝试请求,如果服务未恢复正常,会继续熔断状态,若恢复正常可正常请求访问。
操作步骤如下所示:
- 进入[服务网格/网格服务管控]页面。找到对应的服务,点击服务名称,进入服务详情页面,进入“服务治理”页签切换至“熔断规则”页签,进入熔断规则列表页面。
- 单击[添加熔断规则]按钮,弹出熔断规则配置弹框,配置对应的参数,如下图所示。
- 选择熔断端口,当服务有多个端口时,支持按端口分别设置熔断规则。
- 支持连续失败次数策略,即实例被调用连续失败N次,则熔断该实例。
- 连续失败次数:N次/实例。
- 最大熔断实例比:计算向上取整,如果10个实例,设置为22%则最多熔断3个实例
- 熔断基准时间窗:单位s。熔断触发后,熔断时间的设置,超过熔断时间,自动放开接收请求,开启新的熔断统计。
- 熔断时间内,HTTP协议,默认返回 Code:503,Body:no healthy upstream;gRPC协议,返回code = Unavailable desc=no healthy upstream。
- 点击“确定”后,弹框消失,规则创建成功。规则创建即生效。
示例:springboot-demo服务仅有一个实例,设置连续失败3次,即熔断该实例。for i in $(seq 5) ; do curl springboot-demo:8080/sayHello?msg=500 ;echo; done查看熔断效果(no_healthy_upstream),如下图。
说明
- 如果连续触发熔断,熔断的时长会以熔断基准时间窗(baseEjectionTime) * 熔断次数计算。最大熔断时间(maxEjectionTime)默认300s,超过后,就不再增加。后续实例恢复正常后,熔断时长也会根据一定策略减少。
- 如果baseEjectionTime 设置的大于300s,应该就一直按这个时间熔断。
12、手动降级
在高并发或者大促阶段,用户可手动降级非核心服务,将更多网络或基础资源分给核心服务使用。开启降级后,即对所有服务调用者,立即熔断当前服务的所有实例。
操作步骤如下所示:
- 进入[服务网格/网格服务管控]页面。找到对应的服务,点击服务名称,进入服务详情页面,进入“服务治理”页签。
- 切换至“降级规则”页签,点击开关,二次弹窗确认后,对此服务开启降级。开启后,即对所有服务调用者,立即熔断当前服务的所有实例。
- 自动降级即熔断规则,请到“熔断规则”中进行设置。
13、故障模拟
通过服务网格的故障模拟功能,可以对所有接入应用系统和服务进行故障模拟测试。
操作步骤如下所示:
- 进入[服务网格/网格服务管控]页面。找到对应的服务,点击服务名称,进入服务详情页面,进入“故障模拟”页签。
- 单击[编辑]按钮,勾选“启用”,进入故障模拟配置页面。
- 配置故障模拟具体的参数:
- 故障模拟规则-模拟手段-延时时长:即配置延时时长,单位是秒。
- 故障模拟规则-模拟手段-返回特定错误码:若为中断故障策略,即配置的是返回的固定错误码。
- HTTP协议,支持200~599
- gRPC协议,支持16种返回code:CANCELLED,UNKNOWN,INVALID_ARGUMENT,DEADLINE_EXCEEDED,NOT_FOUND,ALREADY_EXISTS,PERMISSION_DENIED,RESOURCE_EXHAUSTED,FAILED_PRECONDITION,ABORTED,OUT_OF_RANGE,UNIMPLEMENTED,INTERNAL,UNAVAILABLE,DATA_LOSS,UNAUTHENTICATED
- 请求生效比例:请求生效故障模拟的百分比,默认100%。
- 点击[确认]按钮,完成创建,在故障模拟页面可见创建的故障模拟规则。
说明:目标服务支持HTTP、gRPC协议服务,仅网格内服务相互调用生效。
14、网关路由--如需HTTPS访问请联系平台管理员
路由规则支持外部通过域名到服务的访问,并将南北调用流量按照业务需求分配到不同服务或不同服务版本。
创建路由规则
操作步骤如下所示:
- 进入[服务网格/网格服务管控]页面,选择目标服务,进入其详情页面,点击“网关路由”页签
- 点击“添加路由”,进入路由规则配置页面,输入路由名称(必填)、描述、选择网格网关、选择访问协议、域名、路由条件等。
- 路由名称:3~60位小写字母、数字或中划线组成,以字母开头,字母或者数字结尾。
- 网格网关:即网格的入口网关。当网关状态为部署中、删除中、异常时,网关置灰不可选择。此时联系管理员检查网关信息。
- 访问协议:支持HTTP、HTTPS(如需HTTPS,请联系平台管理员)、TCP三种
- 域名:输入合法域名,支持英文字母、数字、中划线-和.,可添加多个
- 路由条件:根据选择的服务协议类型,展示不同的路由条件。HTTP/HTTPS协议支持按header、uri、parameter规则进行匹配,匹配方式支持前缀匹配、完全匹配、正则匹配
- TCP协议支持端口映射匹配规则;用户可以根据实际业务需要配置多条路由条件。
- 路由规则配置完成后,单击[确定]按钮,路由规则添加成功。
说明
- 目前同一服务仅支持在同一个网格网关暴露一个TCP协议的端口。
- 访问协议是HTTPS时,相同的网格网关和域名,只能关联一个证书。
- 访问协议是TCP时,相同的网关、域名和映射端口,只能关联一个证书。
- 访问协议是TCP时,相同的网关,映射端口不能重复。
- 若为传统主机服务,路由条件的转发端口版本为所有版本。
15、安全访问控制--如需开启请联系平台管理员
开启/关闭mTLS认证
- 默认项目内服务是关闭mTLS认证的,需要开启的服务可开启此认证。
- 所有网格服务mTLS支持开启/关闭。开启mTLS,服务仅会通过基于TLS建立的安全信道通信
- 当网格内跨集群调用时,被调服务需开启mTLS认证,方可调用成功。
- 传统主机部署的服务连接集群内容器部署的服务,要求集群内的被请求的服务必须开启mTLS,否则Istio不会给传统主机下发eds信息。反之,无限制。
访问控制
访问控制仅支持HTTP协议服务,用户可根据服务类型及业务需要进行配置。
操作步骤如下所示:
进入[服务网格/网格服务管控]页面。找到对应的服务,点击服务名称,进入服务详情页面的“安全访问控制”页签。
单击[添加访问控制]按钮,进入访问控制策略配置页面,如下图所示。对应的配置说明可参考下文。
访问控制规则名称:用于标识一个访问控制规则,支持小写字母、数字、“-”、“.”,长度不超过64个字符。以字母或数字开头或结尾。
访问控制类型:支持两种策略:DENY(黑名单)、ALLOW(白名单)。
- 服务仅配置“黑名单”就只拒绝符合要求的请求,其他都允许调用。
- 服务仅配置“白名单”就只接受符合要求的请求,其他都拒绝调用。
- 服务两者都配置,就先检查黑名单,再检查白名单,最后拒绝调用。
- 服务配置多个相同访问控制类型(例黑名单)的规则时,为或的关系。
请求来源可以不添加;请求目标也可以不添加,但两者至少添加一个。请求来源可添加多条,每条填写命名空间、服务账号
- 命名空间:填写请求来源所属的命名空间名称,仅支持输入一个。此命名空间需要开启服务网格,策略才能生效!
- 服务账号:填写请求来源所属的命名空间内的服务账号,支持填写单个或多个,多个用英文逗号隔开。不填写时默认“所有服务账号”
- 当设置请求来源时,需确保主调服务和被调服务都接入网格,策略才生效!
请求目标Paths、Host、Port、Method、Header匹配规则之间是且的关系;每个规则中多项内容是或的关系,例如Method等于[“GET”,“POST”],请求匹配Get或Post都允许或拒绝。
Paths、Host、Header的value匹配规则如下:
- 完全匹配,例“abc”仅匹配abc。
- 前缀匹配,例“abc*",可匹配"abc"或“abcd”。*
- 后缀匹配,例“*abc”,可匹配“abc”或“xabc”。
- Host、Method、Path、Header必须仅与HTTP一起使用。
- 端口必须在[0~65535]范围内。
- Method支持GET、POST、PUT、HEAD、DELETE、OPTIONS。
- host:支持数字、小写字母、“.”、“-”随意组合,开头结尾支持**。*
- path:支持“a-z”、“A-Z”、“0-9”、“.”、“-”、“”、“~”、“!”、“$”、“&”、“'”、“(”、“)”、“*”、“+”、“,”、“;”、“=”、“:”、“@”、“/”。
- header中的key:支持数字、字母、特殊符号“.”,"-",“”。
对于gRPC协议服务,有以下限制
- method仅支持post
- Host,填写时需加上端口,例www.abc.com:8082
在一个访问控制规则中,请求目标中的规则最多添加两次,分别是等于或者不等于。如果有两条后,再次添加,不可选择此规则。Header可以设置多条。同一个key最多也只能有两条等于,不等于,其value值多个用英文逗号隔开。
- 配置完成后,单击[确认添加]按钮,访问控制配置成功。