华为云用户手册

  • 配置服务网关 服务网关在微服务实践中可以做到统一接入、流量管控、安全防护、业务隔离等功能。 创建服务网关前,请提前创建好弹性负载均衡。为了更好的与服务网格配合,推荐创建并使用增强型弹性负载均衡。创建增强型弹性负载均衡时,需要注意确保所选VPC和子网与创建集群时设置的VPC和子网保持一致,详情请参见创建负载均衡器 。 登录应用服务网格控制台,在左侧导航栏中选择“服务网关”。 在右侧页面,单击“添加服务网关”,配置对外访问网络参数。 网关名称 新建服务网关的名称,由小写字母、数字、横线(-)和点(.)组成,且必须以字母或数字开头结尾,长度不能超过63个字符。 集群名称 服务网关所属的集群。 负载均衡配置 服务网关使用弹性负载均衡服务(ELB)的负载均衡器提供网络访问,支持公网和私网两种类型。 负载均衡实例需与当前集群处于相同VPC 。 监听器配置 对外协议 请根据业务的协议类型选择。 对外端口 开放在负载均衡服务地址的端口,可任意指定。 转发策略配置 域名 请填写组件对外发布域名。不配置访问地址默认为负载均衡实例IP地址。如果您开启了TLS认证,则必须填写证书内认证域名,以完成SNI域名校验。 URL匹配规则 前缀匹配:例如映射URL为/healthz,只要符合此前缀的URL均可访问。例如/healthz/v1,/healthz/v2。 完全匹配:只有完全匹配上才能生效。例如映射URL为/healthz,则必须为此URL才能访问。 URL 服务支持的映射URL,例如/example。 命名空间 服务网关所在的命名空间。 目标服务 添加网关的服务,直接在下拉框中选择。 服务访问端口 仅显示匹配对外协议的端口。 配置完成后,单击“创建”。 网关添加完成后,在左侧导航栏中单击“服务列表”,获取服务外网访问地址。 图1 访问服务
  • 如何使用Istio调用链埋点 Header信息包括如下内容,更多关于调用链的信息请参见https://istio.io/docs/tasks/telemetry/distributed-tracing/。 x-request-id x-b3-traceid x-b3-spanid x-b3-parentspanid x-b3-sampled x-b3-flags x-ot-span-context 下面以一个典型的例子来说明如何在接收和发送请求时,通过修改代码来传递调用链相关Header信息。 Python代码示例 服务接收端在处理请求时,从请求端解析相关Header。在调用后端请求时,传递Trace相关的header。 def getForwardHeaders(request): headers = {} if 'user' in session: headers['end-user'] = session['user'] incoming_headers = ['x-request-id', 'x-b3-traceid', 'x-b3-spanid', 'x-b3-parentspanid', 'x-b3-sampled', 'x-b3-flags', 'x-ot-span-context' ] return headers @ app.route('/productpage') def front(): product_id = 0# TODO: replace default value headers = getForwardHeaders(request) user = session.get('user', '') product = getProduct(product_id) detailsStatus, details = getProductDetails(product_id, headers) reviewsStatus, reviews = getProductReviews(product_id, headers) return render_template( 'productpage.html', detailsStatus = detailsStatus, reviewsStatus = reviewsStatus, product = product, details = details, reviews = reviews, user = user) Java代码示例 在java Rest接口上除了解析一般业务参数外,需要从header中解析trace相关信息。同样在调用下一个服务时传递该header信息。 @GET @Path("/reviews/{productId}") public Response bookReviewsById(@PathParam("productId") int productId, @HeaderParam("end-user") String user, @HeaderParam("x-request-id") String xreq, @HeaderParam("x-b3-traceid") String xtraceid, @HeaderParam("x-b3-spanid") String xspanid, @HeaderParam("x-b3-parentspanid") String xparentspanid, @HeaderParam("x-b3-sampled") String xsampled, @HeaderParam("x-b3-flags") String xflags, @HeaderParam("x-ot-span-context") String xotspan) { int starsReviewer1 = -1; int starsReviewer2 = -1; if (ratings_enabled) { JsonObject ratingsResponse = getRatings(Integer.toString(productId), user, xreq, xtraceid, xspanid, xparentspanid, xsampled, xflags, xotspan); if (ratingsResponse != null) { if (ratingsResponse.containsKey("ratings")) { JsonObject ratings = ratingsResponse.getJsonObject("ratings"); if (ratings.containsKey("Reviewer1")){ starsReviewer1 = ratings.getint("Reviewer1"); } if (ratings.containsKey("Reviewer2")){ starsReviewer2 = ratings.getint("Reviewer2"); } } } } String jsonResStr = getJsonResponse(Integer.toString(productId), starsReviewer1, starsReviewer2); return Response.ok().type(MediaType.APPLICATION_JSON).entity(jsonResStr).build(); } }
  • 查看流量监控情况 登录应用服务网格控制台,在左侧导航栏中选择“流量监控”。 查看整个系统的监控情况。 饼状图显示了系统处于运行中和未就绪的应用数量。 异常响应和超长RT时延按照租户内异常请求个数和单次请求耗时从高到低的排序。 查看某个组件的监控情况。 选择服务网格、集群及命名空间,单击拓扑图上的组件,进入组件监控详情页面。 流量概况:展示了应用详细的流量信息,包含请求总数、错误数、平均时延、最大时延等。 部署信息:显示了组件内的所有实例状态及信息。 调用链:通过时间维度和组件版本来查看调用情况,支持使用高级搜索中的选项,进行精准搜索。使用Isito做服务治理时,无需在微服务代码中进行调用链埋点。但微服务代码在接收和发送请求时需要传递调用链相关的Header信息,才能构造成完整的调用链路,详情请参见如何使用Istio调用链埋点。
  • 企业版网格工作原理 企业版网格是如何管理用户集群的,这要从用户集群和网格控制面的连接方式说起。企业版网格支持用户集群通过公网连接和私网连接两种方式连接网格控制面。 公网连接主要用于跨Region添加集群或对接其他云厂商的集群 通过公网连接网格控制面,用户需要为集群绑定弹性公网IP(EIP),因为网格的控制面需要访问用户集群的Kubernetes API Server服务。还需要为集群所在的VPC创建公网NAT网关,因为服务的Envoy组件需要通过NAT网关连接网格的控制面。 图3 公网连接网格控制面 私网连接用于对接华为云Region内部的集群 私网连接网格控制面则是利用VPC间的对等连接功能,打通了不同VPC之间的网络隔离。在创建网格时,要提前规划网格控制面的网段。 图4 私网连接网格控制面 下面要讲一下企业版网格的多集群治理能力。 传统的服务跨集群访问,用户需要创建NodePort或LoadBalancer服务,绑定ELB,配置转发端口,而且对每一个需要跨集群访问的服务都要执行此操作。除此之外,用户还需要维护各个服务的对外访问配置。 图5 传统跨集群访问 ASM企业版网格提供的服务跨集群访问能力,不需要用户进行复杂的配置,只需要将集群添加到网格,网格管理的所有集群的所有服务之间都是能够相互访问的,不管服务属于哪个集群。 图6 ASM跨集群访问 企业版网格所管理的用户集群,根据他们的网络类型,可以区分为扁平网络和非扁平网络,二者在使用上有一些差异,详细介绍请参见扁平网络和非扁平网络。
  • 什么是应用服务网格 应用服务网格(Application Service Mesh,简称ASM)是华为云基于开源Istio推出的服务网格平台,它深度、无缝对接了华为云的企业级Kubernetes集群服务云容器引擎(CCE),在易用性、可靠性、可视化等方面进行了一系列增强,可为客户提供开箱即用的上手体验。 ASM提供非侵入式的微服务治理解决方案,支持完整的生命周期管理和流量治理,兼容Kubernetes和Istio生态,其功能包括负载均衡、熔断、限流等多种治理能力。ASM内置金丝雀、蓝绿多种灰度发布流程,提供一站式自动化的发布管理。ASM基于无侵入的监控数据采集,提供实时流量拓扑、调用链等服务性能监控和运行诊断,构建全景的服务运行视图。 更多应用服务网格ASM介绍请参见产品介绍。 父主题: 用户指南(旧版)
  • 1.15版本特性 支持Istio 1.15.7版本 支持v1.21、v1.23、v1.25、v1.27 CCE Turbo 集群版本 支持v1.21、v1.23、v1.25、v1.27 CCE集群版本 修复了 CVE-2023-44487、CVE-2023-39325、CVE-2023-27487 等安全漏洞 详细内容请参阅:https://istio.io/latest/news/releases/1.15.x/announcing-1.15.7/ 父主题: 升级
  • 升级前检查说明 集群资源检查,检查规则如下: CPU : istiod+istio-ingressgateway+istio-egressgateway实例数 * cpu申请值。 Memory: istiod+istio-ingressgateway+istio-egressgateway实例数 * 内存申请值。 集群版本检查。 集群状态检查,集群状态不可用不能进行升级。 网格状态检查,网格状态不可用不能进行升级。 废弃CRD检查(1.8及以上的版本不涉及)。 1.3和1.6版本使用的部分CRD在1.8版本中会废弃,升级到1.8版本后将不可用,请在升级前进行处理,包括如下资源 clusterrbacconfigs、sevicerole、servicerolebinding、policy。 Istio 网关标签检查(1.8及以上的版本不涉及)。 Istio 网关标签(matchLabels)必须为 {app: istio-ingressgateway, istio: ingressgateway}。 升级前vs格式检查(1.8及以上的版本不涉及)。 1.8及以上版本网格界面仅支持显示 delegate 格式的 VirtualService,请用户根据指南1.3升级1.8 VirtualService支持Delegate切换进行修改,否则升级后将看不到创建的网关路由。注:该检查项并不会导致升级失败。 升级前网关配置检查(1.8及以上的版本不涉及)。 1.8及以上版本网关监听端口需要大于1024,若您的网关使用了小于1024以及以下的端口需要进行整改。 升级前组件亲和性检查。 金丝雀升级将在集群里新部署一套网格控制面和网关实例,升级前需要至少确保如下一个条件。 具有istio:master label的节点数量是 istiod实例数的两倍、所有可调度节点是istio-ingressgateway、istio-egressgateway 实例个数最大值的两倍。 istiod、istio-ingressgateway、istio-egressgateway pod反亲和性从【必须满足】改为【尽量满足】。 升级前插件检查(1.8及以上的版本不涉及)。 1.3和1.6网格支持的如下插件在1.8及以上版本不再支持,升级前请确保将如下插件卸载。 升级前命名空间自动注入检查。 基础版网格注入方式为命名空间注入,若您在当前已经注入pod所在的命名空间未打上注入label,则需要再升级前打上注入label。 升级前service selector检查。 升级前若业务service的参数selector中包含sidecarVersion的key,则需要在升级前去除该selector。 父主题: 金丝雀升级
  • 欢迎使用应用服务网格 应用服务网格(Application Service Mesh,简称ASM)是基于开源Istio推出的服务网格平台,它深度、无缝对接了企业级Kubernetes集群服务云容器引擎(CCE),在易用性、可靠性、可视化等方面进行了一系列增强,可为客户提供开箱即用的上手体验。 ASM提供非侵入式的微服务治理解决方案,支持完整的生命周期管理和流量治理,兼容Kubernetes和Istio生态,其功能包括负载均衡、熔断、限流等多种治理能力。ASM内置金丝雀、蓝绿等多种灰度发布流程,提供一站式自动化的发布管理。ASM基于无侵入的监控数据采集,提供实时流量拓扑、调用链等服务性能监控和运行诊断,构建全景的服务运行视图。 更多应用服务网格ASM介绍请参见产品介绍。 父主题: 用户指南(新版)
  • 边车管理 展示所有注入了边车的业务pod信息,以及每个pod的名称,CPU、内存占用率,边车版本,边车升级操作入口等信息。 您可以在“边车管理”中进行“边车升级”,详细步骤如下: 登录应用服务网格控制台,在左侧导航栏中选择“网格管理”。 单击专有网格名称进入网格管理详情。 在“边车管理”页签,单击“边车升级”,选择组件进行边车升级。 对于单实例组件,升级会触发流量短暂中断,建议扩容后再升级。 仅专有网格支持边车升级,托管网格会随着网格版本的升级自动升级边车。
  • 插件管理 插件管理可以对grafana、prometheus、kiali、tracing四个插件进行安装和卸载,这些插件可以帮助用户进行流量治理与监测。详细步骤如下: 登录应用服务网格控制台,在左侧导航栏中选择“网格管理”。 单击专有网格名称进入网格管理详情。 在“插件管理”页签,单击待安装插件下方的“安装”,跳转到安装页面。 在安装页面,选择插件要绑定的“弹性负载”,输入要分配给插件安装的“CPU配额”和“内存配额”。 当前服务网格支持“经典型负载均衡”和“增强型弹性负载均衡”,为了更好地与服务网格配合,推荐创建并使用“增强型弹性负载均衡”。 如果您的弹性负载均衡监听器配额不足将不会显示在负载均衡器列表中。 CPU配额和内存配额中的“申请”和“限制”值为必填,且不能超过节点剩余额度。 安装grafana、prometheus、kiali和tracing插件时,界面会自动过滤掉未绑定弹性IP的负载均衡器。 不支持在IE浏览器上使用kiali插件。 单击“安装”,跳转到插件管理页面,在插件卡片的左上角显示插件的安装和运行状态。如果插件长时间处于安装中状态或者安装失败状态,请删除以后重新安装。 如果无需使用该插件,单击插件卡片右上角的“删除”进行卸载。
  • 监控已启用服务网格的集群 登录应用服务网格控制台,在左侧导航栏中选择“网格管理”。 在右侧页面,单击服务网格名称。 单击专有网格名称,查看控制面所有组件和Sidecar的业务pod信息。 “控制面组件管理”页签:展示Istio控制面的所有组件,以及每个组件的运行状态,CPU、内存占用率,命名空间等信息。 “边车管理”页签:展示所有注入了边车的业务pod信息,以及每个pod的名称,CPU、内存占用率,边车版本,边车升级操作入口等信息。 “运行节点”页签:查看节点的相关信息,包括节点名称、状态、节点模式(独享)、可用区、私有IP地址、规格、可用CPU、可用内存。 “插件管理”页签:可以对grafana、prometheus、kiali、tracing四个插件进行安装和卸载,这些插件可以帮助用户进行流量治理与监测。 “运行事件”页签:记录控制面组件的kubernetes事件,帮助您快速定位Istio控制面问题。 “运行日志”页签:记录控制面组件的运行日志,帮助您快速定位Istio控制面问题。 “配置管理”页签:支持公共配置和性能调优配置,请根据实际需求选择。详情请参见配置管理。 “istioctl”页签:使用Istio命令行工具配置路由策略。详情请参见使用Istio命令行工具配置路由策略。 单击托管网格的名称,查看数据面所有组件和Sidecar的业务pod信息。 “集群管理”页签:展示已添加的到网格中的集群信息,以及添加新的集群到网格,或移除已添加的集群。 “数据面组件管理”页签:展示Istio数据面的所有组件,以及每个组件的运行状态,CPU、内存占用率,命名空间等信息。 “边车管理”页签:展示所有注入了边车的业务pod信息,以及每个pod的名称,CPU、内存占用率,sidecar版本,sidecar升级操作入口等信息。 “运行事件”页签:记录控制面组件的kubernetes事件,帮助您快速定位Istio控制面问题。 “运行日志”页签:记录控制面组件的运行日志,帮助您快速定位Istio控制面问题。 “访问控制面集群”页签:使用kubectl操作集群。详情请参见使用kubectl操作集群。
  • 运行节点 “运行节点”可以帮助您查看已创建的节点。您在当前集群中创建了节点,就可以在“运行节点”页中查看节点的相关信息,包括节点名称、状态、节点模式(独享)、可用区、私有IP地址、规格、可用CPU、可用内存。 您还可以在“运行节点”中对节点进行“扩容”,详细步骤如下: 登录应用服务网格控制台,在左侧导航栏中选择“网格管理”。 单击专有网格名称进入网格管理详情。 在“运行节点”页签,单击“操作”下的“扩容”链接跳转到弹性云服务器页面。 根据节点“名称/ID”找到对应的云服务器,单击“变更规格”,即可对节点进行扩容操作。 图2 变更规格
  • 控制面升级说明 此步骤将部署灰度版本网格控制面,所有资源都将带上版本revision标签,如负载istiod-1-13-9-r5,现有业务实例sidecar不会对接到该灰度版本,升级和回退不会对原网格业务造成影响,但是需要注意若您的版本是从非金丝雀版本升级到金丝雀版本时,升级过程中会将老版本istio-operator实例数置为0。 控制面部署完成后会自动创建实例数为1的istio-ingressgateway-{revision} 和istio-egressgateway-{revision} deployment,labels和原有网关实例相同。 若您在其他命名空间自行创建了istio-ingressgateway网关,升级过程中会自动将网关按照金丝雀的方式升级到新版本:istio-ingressgateway-{revision}-{namespace} (其中{revision} 为版本号,如1-13-9-r5,namespace为命名空间)。 注: 金丝雀版本从1.8.6-r4,1.13.9-r2, 1.15.7-r1开始支持。 父主题: 金丝雀升级
  • 网格扩容 添加节点不会增加istio控制面组件实例数,如有需要,请在节点添加完成后至控制面管理页扩容。 登录应用服务网格控制台,单击左侧导航栏的“网格管理”,在对应的服务网格中单击“网络扩容”。 在“运行节点”页签,单击“添加节点”,设置“创建节点”参数。 计费模式 包年/包月:包年包月是预付费模式,按订单的购买周期计费,适用于可预估资源使用周期的场景,价格比按需计费模式更优惠。 按需计费:按需计费是后付费模式,按资源的实际使用时长计费,可以随时开通/删除资源。 包年/包月节点创建后不能删除,如需停止使用,请到费用中心执行退订操作。 当前区域 指节点实例所在的物理位置。请就近选择靠近您业务的区域,可减少网络时延,提高访问速度;不同区域的云服务产品之间内网互不相通。 节点配置 此处为节点配额提示,如需申请更多配额,请单击申请扩大配额。 可用区&规格 指在同一区域下,电力、网络隔离的物理区域,可用区之间内网互通,不同可用区之间物理隔离。如果您需要提高工作负载的高可靠性,建议您将云服务器创建在不同的可用区。 选择所需的规格。为确保Istio控制面运行稳定,推荐您使用 8U 16G 或以上规格控制面节点,详情请参见规格推荐。 登录方式 支持密码和密钥两种方式。 选择“密码”:用户名默认为“root”,请输入登录节点的密码,并确认密码。 登录节点时需要使用该密码,请妥善管理密码,系统无法获取您设置的密码内容。 选择“密钥对”:在选项框中选择用于登录本节点的密钥对,并单击勾选确认信息。 密钥对用于远程登录节点时的身份认证。如果没有密钥对,可单击选项框右侧的“创建密钥对”来新建,创建密钥对操作步骤请参见创建密钥对。 设置完成后,单击“下一步”。确认信息无误后,单击“提交”。
  • 购买专有网格 在集群中一键启用,自动在集群中安装网格控制面,对集群内服务进行非侵入的治理、遥测和安全等管理。兼容Kubernetes和Istio生态。 登录应用服务网格控制台,在“总览”页单击“购买网格”进入购买 Istio服务网格 页面。 网格类型选择“专有网格”。 设置服务选择参数。 计费模式 支持“按需计费”和“包年/包月”模式。包年/包月模式的节点创建后不能删除,如需停止使用,请到费用中心执行退订操作。 当前区域 指节点实例所在的物理位置。请就近选择靠近您业务的区域,可减少网络时延,提高访问速度;不同区域的云服务产品之间内网互不相通。 集群 选择要启用Istio服务网格功能的集群。 版本 指定购买的Istio版本。 网格管理规模 当前服务网格支持管理的最大pod实例数量,请根据业务需求选择,如需支持5000实例以上,请联系管理员。 按需计费模式,当前可享受20实例的体验。 购买时长 仅包年/包月的计费模式可设置购买时长,按需计费模式不支持。 按需计费的托管网格当前可体验20实例。 按需计费的托管网格治理不足20实例时,按20实例数收取费用,超过20实例时,按实际实例数收取费用。 设置完成后,单击“下一步”,配置“创建节点”参数。 高可用 Istio启用后,高可用模式与普通模式不可切换,请根据实际使用情况选择。 是:高可用模式要求独享节点个数不少于2,用于Istio控制面多实例部署,多实例能大大的提高Istio控制面可靠性,推荐使用。 否:非高可用模式为单点模式,Istio控制面组件均为单实例,无法提供更高的可靠性保证。 节点配置 此处为节点配额提示,如需申请更多配额,请单击申请扩大配额。 可用区&规格 指在同一区域下,电力、网络隔离的物理区域,可用区之间内网互通,不同可用区之间物理隔离。如果您需要提高工作负载的高可靠性,建议您将云服务器创建在不同的可用区。 选择所需的规格。为确保Istio控制面运行稳定,推荐您使用 8U 16G 或以上规格控制面节点,详情请参见规格推荐。 登录方式 支持密码和密钥两种方式。 选择“密码”:用户名默认为“root”,请输入登录节点的密码,并确认密码。 登录节点时需要使用该密码,请妥善管理密码,系统无法获取您设置的密码内容。 选择“密钥对”:在选项框中选择用于登录本节点的密钥对,并单击勾选确认信息。 密钥对用于远程登录节点时的身份认证。如果没有密钥对,可单击选项框右侧的“创建密钥对”来新建,创建密钥对操作步骤请参见创建密钥对。 设置完成后,单击“下一步”。确认订单无误后,单击“提交”。 启用时间预计需要5分钟,您可以单击请求提交页面的“返回Istio管理”或“前往CCE集群管理”查看Istio运行状态。 购买后,会进行启用Istio的操作,期间会操作如下资源: 如果为高可用,则创建需要至少2个E CS 节点,作为Istio控制面运行节点。 创建一个Helm应用编排release对象,作为Istio控制面的资源 。 开通ECS节点的安全组,允许7443端口的入流量,使其支持对Pod进行自动注入。 为该集群的default的命名空间打上istio-injection=enabled标签。 查看Istio服务网格是否启用成功。 在应用服务网格控制台,单击左侧导航栏中的“网格管理”,如果网格状态为“运行中”表明启用Istio成功。 图10 Istio服务网格启用成功
  • 购买托管网格 网格控制面完全托管,全方位简化用户运维负担和资源消耗。用户只需基于网格进行服务管理即可。可以管理多云混合云场景的多集群,支持容器、虚拟机、物理机等多种基础设施的服务。 登录应用服务网格控制台,在“总览”页单击“购买网格”进入购买Istio服务网格页面。 网格类型选择“托管网格”。 设置托管网格参数。 计费模式 当前可支持包年/包月和按需计费模式。包年/包月创建后不能删除,如需停止使用,请到费用中心执行退订操作。 区域 指在同一区域下,电力、网络隔离的物理区域,可用区之间内网互通,不同可用区之间物理隔离。如果您需要提高工作负载的高可靠性,建议您将云服务器创建在不同的可用区。 版本 指定购买的Istio版本。 网格名称 新建服务网格的名称,取值必须以小写字母开头,由小写字母、数字、中划线(-)组成,且不能以中划线(-)结尾。 网格管理规模 服务网格管理的实例规模。 当前服务网格支持管理的最大pod实例数量,请根据业务需求选择,如需支持5000实例以上,请联系管理员。 网格控制面网段 此参数在网格创建后不可更改,请谨慎选择。 网格控制面网段的掩码固定为22位,推荐使用子网10.253.0.0/22、172.31.0.0/22。建议从10.2.0.0/16~10.246.0.0/16,10.248.0.0/16~10.255.0.0/16,172.17.0.0/16~172.31.0.0/16覆盖范围中选取一个掩码为22的子网,不推荐使用192.168.0.0/16、172.16.0.0/16、 10.0.0.0/16、10.1.0.0/16、10.247.0.0/16覆盖范围内的22位掩码子网,因为很容易与用户集群环境中网段冲突。 购买时长 网格购买时长,购买的时间越长越优惠。 仅包年/包月的计费模式可设置购买时长,按需计费模式不支持。 按需计费的托管网格购买成功后即开始计费。 按需计费的托管网格治理不足20实例时,按20实例数收取费用,超过20实例时,按实际实例数收取费用。 设置完成后,单击“下一步”。确认订单无误后,单击“提交”。 启用时间预计需要5分钟,您可以单击请求提交页面的“返回Istio管理”或“前往CCE集群管理”查看Istio运行状态。 购买后,会进行启用Istio的操作,期间会操作如下资源: 创建一个Helm应用编排release对象,作为Istio控制面的资源 。 开通ECS节点的安全组,允许7443端口的入流量,使其支持对Pod进行自动注入。 为该集群的default的命名空间打上inject=true标签。 查看Istio服务网格是否启用成功。 在应用服务网格控制台,单击左侧导航栏中的“网格管理”,如果网格状态为“运行中”表明启用Istio成功。 图9 Istio服务网格启用成功
  • 基础版、企业版、社区开源版本对比 大类 功能项 功能点 社区开源版本 基础版 企业版 规格 管理规模 支持最大管理实例数 - 200 5000 基础功能 服务发现和服务注册 通过服务中心集群获取服务列表、服务实例状态自动刷新、容器服务自动服务注册,业务无需实现注册逻辑、容器服务自动服务发现,业务无需实现发现订阅逻辑、服务实例副本数动态管理 √ √ √ 服务多版本 服务创建分版本管理、支持分版本进行监控 - √ √ 支持分版本进行服务负载管理 √ √ √ 服务多端口 支持管理多个端口的服务、支持管理多个端口多协议的服务 √ √ √ 灰度发布支持多端口 - √ √ 服务多形态 支持容器类型的服务后端 √ √ √ 协议及语言支持 HTTP协议灰度、治理、监控(根据协议特征不同细节不同,参照协议功能矩阵)、gRPC协议灰度、治理、监控(根据协议特征不同细节不同,参照协议功能矩阵)、开发语言无关、开发框架不限定、业务代码无侵入 √ √ √ 应用网关 支持四层协议对外访问、支持七层协议对外访问、支持入口路径映射、支持网关处TLS终止,支持配置对外证书和密钥 √ √ √ 负载均衡 支持轮询、随机、最小连接数以及一致性哈希的LB算法,可以基于特定的HTTP Header,或者基于Cookie值 √ √ √ 故障注入 支持注入指定时延或特定错误的故障,支持配置故障百分比 √ √ √ 熔断 支持配置最大请求数、每连接最大请求数、最大等待请求数、最大重试次数等七层请求管理;支持配置最大连接数、连接超时时间等四层连接管理;支持异常点检查、故障实例的自动隔离和自动恢复 √ √ √ 治理流量类型 支持对服务间内部通信流量进行治理、支持对服务外网访问流量(即Ingress流量)进行治理 √ √ √ 运行环境支持 支持容器应用治理 √ √ √ 认证 非侵入的双向TLS认证和通道加密 √ √ √ 授权 服务访问授权管理 √ √ √ 灰度发布 支持基于浏览器、操作系统、自定义HTTP Header、Cookie内容等配置灰度分流策略,支持基于URL配置灰度分流策略,支持基于请求参数、流量权重的灰度发布 √ √ √ 支持金丝雀灰度发布模板 - √ √ 支持蓝绿灰度发布模板 - √ √ 支持灰度发布过程中服务运行情况的监控以辅助灰度发布决策 - √ √ 支持灰度发布过程中服务请求情况的监控以辅助灰度发布决策 - √ √ 灰度发布时动态配置服务实例数 - √ √ 支持灰度发布过程中动态的流量比例监控 - √ √ 应用拓扑 提供应用下服务调用关系的全局拓扑 - √ √ 提供拓扑图上各个服务间请求数、异常请求数等重要指标 - √ √ 实时应用拓扑查看 - √ √ 链路跟踪/调用链 支持非侵入调用链埋点 √ √ √ 指标监控 提供服务实例CPU、内存、磁盘等运行数据监控,提供服务访问RPS、时延等访问指标的监控,提供对访问指标、异常指标的统计分析,支持对接Prometheus等开源Metric组件,支持通过配置对接不同的Metric后端 √ √ √ 访问日志 访问日志非侵入采集 √ √ √ 安装 支持现有、新建Kubernetes集群按需一键安装启用Istio能力 - √ √ 升级 支持控制面平滑升级,不中断应用业务 √ √ √ 支持数据面平滑升级,不中断应用业务 √ √ √ 插件管理 支持社区插件按需一键安装,支持Grafana、Prometheus - √ √ 支持社区插件按需一键安装,支持Tracing插件 - √ √ 支持社区插件按需一键安装,支持Kiali插件 - √ √ 支持社区插件按需一键安装,支持ELK插件 - √ √ API 非企业版网格提供基于CCE接口的开放社区兼容的流量规则配置 √ √ √ 代理管理 透明流量拦截、基于Iptables流量拦截、支持代理自动注入、支持Namespace级别和工作负载级别的注入管理 √ √ √ 代理形态 支持每Pod的Sidecar模式 √ √ √ 命令行工具 支持使用命令行进行流量策略管理(如istioctl、kubectl) - √ √ 企业版高阶能力 多集群 支持扁平网络多集群统一流量治理 - - √ 灰度发布 支持灰度负载部署在多集群,支持跨集群的灰度流量 - - √ 应用拓扑 应用拓扑可以下钻到版本或实例级别观测对应的服务访问指标 - - √ 提供按时段观察应用拓扑 - - √ 支持跨集群应用拓扑 - - √ 链路跟踪/调用链 支持全服务请求链的链路追踪 - - √ 支持基于时间、异常、响应时间等指标的检索 - - √ 支持对调用详细信息的查看,快速定位 - - √ 支持跨集群的调用链 - - √ 支持对接第三方调用链系统 - - √ SpringCloud SpringCloud服务发现配置修改复用网格服务发现和能力 - - √ SpringCloud框架ASM结合最佳实践 - - √ 安装 支持控制面按照与应用运行节点独享/共享方式运行 - - √ 父主题: 购买网格
  • 创建灰度发布 登录应用服务网格控制台,使用以下任意一种方式进入创建灰度任务页面。 (快捷方式)在网格右上方,单击图标。 (快捷方式)在网格中心位置,单击“创建灰度任务”。 在网格详情页创建。 单击网格名称,进入网格详情页,单击左侧导航栏的“灰度发布”。 如果当前不存在发布中的灰度任务,请在金丝雀发布或蓝绿发布中单击“立即发布”;如果当前存在发布中的灰度任务,请单击右上角“灰度发布”。 配置灰度发布基本信息。 灰度类型 选择创建灰度发布的类型,可根据实际需求选择金丝雀发布和蓝绿发布,两者的区别可参考灰度发布概述。 灰度任务名称 自定义灰度任务的名称。输入长度范围为4到63个字符,包含小写英文字母、数字和中划线(-),并以小写英文字母开头,小写英文字母或数字结尾。 命名空间 服务所在的命名空间。 灰度发布服务 在下拉列表中选择待发布的服务。正在进行灰度任务的服务不可再进行选择,列表中已自动过滤。 工作负载 选择服务所属的工作负载。 版本号 当前服务版本号,版本号不支持修改。 图1 灰度发布基本信息 部署灰度版本信息。 部署集群 灰度发布服务所属的集群。 版本号 输入服务的灰度版本号。 实例数量 灰度版本的实例数量。灰度版本可以有一个或多个实例,用户可根据实际需求进行修改。每个灰度版本的实例都由相同的容器部署而成。 镜像名称 默认为该服务的镜像。 镜像版本 请选择灰度版本的镜像版本。 自定义镜像 用户可通过自定义镜像自行配置本地或第三方镜像地址,灰度发布镜像将采用所配置镜像。注意需确保自定义镜像地址有效,镜像可拉取。 图2 灰度版本信息 单击“发布”,灰度版本开始创建。 请确保灰度版本的实例状态正常,且启动进度为100%时,再开始下一步进行流量策略的配置。发布之后进入观察灰度状态页面,可查看Pod监控,包括启动日志和性能监控信息。 (仅金丝雀发布涉及)单击“配置流量策略”,进行流量策略配置。 策略类型:分为“基于流量比例”和“基于请求内容”两种类型,通过页签选择确定。 基于流量比例 根据流量比例配置规则,从默认版本中切分指定比例的流量到灰度版本。例如75%的流量走默认版本,25%的流量走灰度版本。实际应用时,可根据需求将灰度版本的流量配比逐步增大并进行策略下发,来观测灰度版本的表现情况。 图3 基于流量比例 流量配比:可以为默认版本与灰度版本设置流量配比,系统将根据输入的流量配比来确定流量在两个版本间分发的比重。 基于请求内容 目前支持基于Cookie内容、自定义Header、Query、操作系统和浏览器的规则约束,只有满足规则约束的流量才可访问到灰度版本。例如,仅Cookie满足“User=Internal”的HTTP请求才能转发到灰度版本,其余请求仍然由默认版本接收。 图4 基于请求内容 Cookie内容 正则匹配:此处需要您使用正则表达式来匹配相应的规则。 自定义Header 完全匹配:只有完全匹配上才能生效。例如:设置Header的Key=User,Vaule=Internal,那么仅当Header中包含User且值为Internal的请求才由灰度版本响应。 正则匹配:此处需要您使用正则表达式来匹配相应的规则。 可以自定义请求头的key和value,value支持完全匹配和正则匹配。 Query 完全匹配:只有完全匹配上才能生效。例如:设置Query的Key=User,Vaule=Internal,那么仅当Query中包含User且值为Internal的请求才由灰度版本响应。 正则匹配:此处需要您使用正则表达式来匹配相应的规则。 可以自定义Query的key和value,value支持完全匹配和正则匹配。 允许访问的操作系统:请选择允许访问的操作系统,包括iOS、Android、Windows、macOS。 允许访问的浏览器:请选择允许访问的浏览器,包括Chrome、IE。 流量管理Yaml信息:根据所设置的参数自动生成规则YAML。 基于请求内容流量策略只对直接访问的入口服务有效。如果希望对所有服务有效,需要业务代码对HTTP请求的Header信息进行传播。 例如:如果您基于reviews服务,配置了基于请求内容的灰度发布策略,通过访问productpage服务的界面,是无法看到效果的。 原因是,您的客户端访问productpage服务携带了HTTP请求的Header信息,而productpage服务请求reviews服务时,将这些Header信息丢失了(详情可参考如何使用Istio调用链埋点),从而失去了基于请求内容的灰度发布效果。 设置完成后,单击“策略下发”。 灰度策略的生效需要几秒时间,您可以查看服务的流量监控,以及对原始版本及灰度版本的健康监控。
  • 更改流量策略算法 流量策略设置完成后,支持更改流量策略算法。如将标准负载均衡的算法轮询转为随机(RANDOM)。 登录应用服务网格控制台,在左侧导航栏中选择“流量治理”。 在“流量治理”界面中选择并单击目标组件。 在“标准负载均衡算法”中,选择“RANDOM”算法,单击“保存”。 图4 负载均衡算法选择随机 重复先前的操作,在流量监控里观察请求分发情况。 可以发现流量分发没有什么固定规律,各个实例差距也比较大,说明随机算法已经生效。 图5 随机算法结果
  • 配置流量策略 登录应用服务网格控制台,在左侧导航栏中选择“流量治理”。 选择组件所在的集群和命名空间。 在拓扑图中,单击组件名称。在服务流量策略中,进行流量策略配置。 负载均衡算法 ROUND_ROBIN:轮询,默认负载均衡算法。 LEAST_CONN:随机选取两个健康的主机,再从所选取的两个主机中选择一个链接数较少的主机。 RANDOM:从所有健康的主机中,随机选取一个。 会话保持 根据HTTP头部中的内容获取哈希: 选择Cookie:将以HTTP请求中的所有Cookie计算哈希,哈希相同的请求将会转发至同一个实例进行处理。 选择User-Agent:将以HTTP请求中的User_agent来计算哈希,UA哈希值相同的请求将会转发至同一个实例进行处理。 流量治理也支持用户使用自定义Key来计算哈希,只需选择自定义模式并且输入键的名称。 根据Cookie键中的内容获取哈希:支持用户输入Cookie键的名称,转发方式则由设定的Cookie键对应的值来计算哈希,哈希相同的请求则会转发至同一个实例中。例如我们设定Cookie中的User为键,则通过计算User对应的值的哈希来确认转发规则。 根据Sourcelp中的内容获取哈希:流量将会按照请求源IP地址的哈希值进行会话保持。 连接池管理。 最大连接数 到目标主机HTTP或TCP连接的最大数量。 最大请求重试次数 在指定时间内对目标主机最大重试次数。 最大等待请求数 等待列队的长度,默认为1024。 每连接最大请求数 对后端连接中最大的请求数量如果设为1则会禁止keep alive特性。 连接超时时间 TCP连接超时时间。 最大请求数 后端服务处理的最大请求数,默认为1024。 熔断配置。 连续错误数 在一个检查周期内,连续出现500及以上错误的个数,例502、503状态码。 检查周期 将会对检查周期内的响应码进行筛选。 最大隔离实例比例(%) 上游实例中,允许被隔离的最大比例。采用向上取整,如果10个实例,设为13%则最多会隔离2个实例。 最短隔离时间 实例第一次被隔离的时间,之后每次隔离时间为隔离次数与最短隔离时间的乘积。 是否开启Mutual TLS。 开启Mutual TLS:组件仅会通过基于TLS建立的安全信道通信。 关闭Mutual TLS:组件之间通过明文通信。 故障注入。 在故障类型中选择时延故障或中断故障。当前版本仅支持基于请求内容策略。 故障版本 故障所作用的版本。 故障类型 不启用:取消故障注入。如果不需要继续触发故障,可单击故障类型中的“不启用”来删除已配置的故障。 时延故障:对通往组件的请求有延迟。 故障百分比:故障按比例发生。 延时:设定的时间延迟单位。 中断故障:会中断该组件的服务并返回预设状态码。 故障百分比:故障按比例发生。 Http状态码:终止故障时返回的http状态码,默认返回500。 访问鉴权。 开启访问鉴权:当前服务只能被指定的服务访问,并且自动开启Mutual TLS。 关闭访问鉴权:当前服务能够被所有服务访问。 访问鉴权会默认授权给网关实例(ingressgateway),通过网关间接访问当前服务不会受到访问授权配置的影响。
  • 查看流量监控 轮询算法为默认负载均衡算法。即当组件有多个实例时,访问基本接近于平均分配给每一个实例。组件流量策略设置完成后,通过连续不中断的访问应用,产生访问数据。 登录应用服务网格控制台,在左侧导航栏中选择“流量监控”。 在上侧时间轴区域选择对应的时间范围,在所需要查看的组件区域右键单击“展开”,将其展开为版本。 图1 选择时间轴并展开组件 右键单击展开的版本,选择“展开”,将其展开为实例。 Report模式下,不提供实例展开功能。 图2 展开组件为实例 在拓扑图区域,可以看到各个流量分发到各个实例的情况。 图3 轮询算法请求分发
  • 编辑已有istio资源 登录应用服务网格控制台,单击服务网格的名称,进入网格详情页面。 在左侧导航栏选择“网格配置”,单击“istio资源管理”页签。 在搜索框中选择istio资源类型(如“istio资源:virtualservices”),以及资源所属命名空间。 图1 筛选istio资源 单击操作列的“编辑”,在右侧页面修改相关配置,默认勾选底部提示信息,即控制台相关功能将不再开放使用,单击“确定”保存。 编辑Istio资源后,具体哪些控制台功能不可用,与Istio资源类型有关。详细说明请参见YAML配置资源处理策略。 支持以YAML或JSON格式显示,同时可以将配置文件下载到本地。
  • Istio资源说明 表1 Istio资源说明 资源类型 说明 AuthorizationPolicy 用于配置授权规则。 DestinationRule 定义路由的目标服务和流量策略。VirtualService和DestinationRule是流量控制最关键的两个资源,DestinationRule定义了网格中某个Service对外提供服务的策略及规则,包括负载均衡策略、异常点监测、熔断控制、访问连接池等。 EnvoyFilter EnvoyFilter为服务网格控制面提供更强大的扩展能力,使Envoy中Filter Chain具备自定义配置的能力。 Gateway Gateway定义了所有HTTP/TCP流量进入网格或者从网格中出站的统一入口和出口,它描述了一组对外公开的端口、协议、负载均衡以及SNI配置。 PeerAuthentication Istio的认证策略包含PeerAuthentication和RequestAuthentication,PeerAuthentication策略用于配置服务通信的mTLS模式。 RequestAuthentication Istio的认证策略包含PeerAuthentication和RequestAuthentication,RequestAuthentication策略用于配置服务的请求身份验证方法。 ServiceEntry 用于注册外部服务到网格内,并对其流量进行管理。 Sidecar 对Sidecar代理进行整体设置。 VirtualService 用于网格内路由的设置。VirtualService和DestinationRule是流量控制最关键的两个资源,在VirtualService中定义了一组路由规则,当流量进入时,逐个规则进行匹配,直到匹配成功后将流量转发给指定的路由地址。 WorkloadEntry 用来将虚拟机(VM)或者裸金属(Bare Metal)进行抽象,使其在网格化后作为与Kubernetes中的Pod同等重要的负载,具备流量管理、安全管理、可视化等能力。
  • 创建新的istio资源 登录应用服务网格控制台,单击服务网格的名称,进入网格详情页面。 在左侧导航栏选择“网格配置”,单击“istio资源管理”页签。 单击列表左上方的“创建”。 图2 创建istio资源 在右侧页面直接输入内容,或者单击“导入文件”,将本地编辑好的YAML或JSON文件上传上来。 确认文件内容无误,默认勾选底部提示信息,即控制台相关功能将不再开放使用,单击“确定”保存。 创建Istio资源后,具体哪些控制台功能不可用,与Istio资源类型有关,详细说明请参见YAML配置资源处理策略。
  • 操作步骤 登录应用服务网格控制台,单击服务网格的名称,进入网格详情页面。 在左侧导航栏选择“网格配置”,单击“升级”页签。 选择可升级版本,单击”版本升级”。 在弹出的提示信息后,单击“确定”。 进入升级前检查页面,单击“执行”,进行升级前检查,详情请查看升级前检查说明。 升级前检查结束后,单击“下一步”,进入控制面升级。 单击“升级”,进行控制面升级,详情请查看控制面升级说明。 控制面升级结束后,单击“下一步”,进行数据面升级。 单击“升级”,进行数据面升级,详情请查看数据面升级说明。 升级后处理,详情请查看升级后处理说明。
  • 如何使用Istio调用链埋点 Header信息包括如下内容,更多关于调用链的信息请参见https://istio.io/docs/tasks/telemetry/distributed-tracing/。 x-request-id x-b3-traceid x-b3-spanid x-b3-parentspanid x-b3-sampled x-b3-flags x-ot-span-context 下面以一个典型的例子来说明如何在接收和发送请求时,通过修改代码来传递调用链相关Header信息。 Python代码示例 服务接收端在处理请求时,从请求端解析相关Header。在调用后端请求时,传递Trace相关的header。 def getForwardHeaders(request): headers = {} if 'user' in session: headers['end-user'] = session['user'] incoming_headers = ['x-request-id', 'x-b3-traceid', 'x-b3-spanid', 'x-b3-parentspanid', 'x-b3-sampled', 'x-b3-flags', 'x-ot-span-context' ] return headers @ app.route('/productpage') def front(): product_id = 0# TODO: replace default value headers = getForwardHeaders(request) user = session.get('user', '') product = getProduct(product_id) detailsStatus, details = getProductDetails(product_id, headers) reviewsStatus, reviews = getProductReviews(product_id, headers) return render_template( 'productpage.html', detailsStatus = detailsStatus, reviewsStatus = reviewsStatus, product = product, details = details, reviews = reviews, user = user) Java代码示例 在java Rest接口上除了解析一般业务参数外,需要从header中解析trace相关信息。同样在调用下一个服务时传递该header信息。 @GET @Path("/reviews/{productId}") public Response bookReviewsById(@PathParam("productId") int productId, @HeaderParam("end-user") String user, @HeaderParam("x-request-id") String xreq, @HeaderParam("x-b3-traceid") String xtraceid, @HeaderParam("x-b3-spanid") String xspanid, @HeaderParam("x-b3-parentspanid") String xparentspanid, @HeaderParam("x-b3-sampled") String xsampled, @HeaderParam("x-b3-flags") String xflags, @HeaderParam("x-ot-span-context") String xotspan) { int starsReviewer1 = -1; int starsReviewer2 = -1; if (ratings_enabled) { JsonObject ratingsResponse = getRatings(Integer.toString(productId), user, xreq, xtraceid, xspanid, xparentspanid, xsampled, xflags, xotspan); if (ratingsResponse != null) { if (ratingsResponse.containsKey("ratings")) { JsonObject ratings = ratingsResponse.getJsonObject("ratings"); if (ratings.containsKey("Reviewer1")){ starsReviewer1 = ratings.getint("Reviewer1"); } if (ratings.containsKey("Reviewer2")){ starsReviewer2 = ratings.getint("Reviewer2"); } } } } String jsonResStr = getJsonResponse(Integer.toString(productId), starsReviewer1, starsReviewer2); return Response.ok().type(MediaType.APPLICATION_JSON).entity(jsonResStr).build(); } }
  • 查看流量监控情况 登录应用服务网格控制台,单击已对接 APM 的服务网格名称进入详情页面。 在左侧导航栏中选择“监控中心”-“流量监控”。 查看整个系统的监控情况。 拓扑图中显示了系统处于运行中和未就绪的应用数量。 图1 流量拓扑 查看某个组件的监控情况。 选择服务网格、集群及命名空间,单击拓扑图上的组件,进入组件监控详情页面,如图2所示。 图2 流量监控详情页 其中, 流量概况:展示了应用详细的流量信息,包含请求总数、错误计数、平均时延、最大时延等。 部署信息:显示了组件内的所有实例状态及信息。 调用链:通过时间维度和组件版本来查看调用情况,支持使用高级搜索中的选项进行精准搜索。使用istio做服务治理时,无需在微服务代码中进行调用链埋点。但微服务代码在接收和发送请求时需要传递调用链相关的Header信息,才能构造成完整的调用链路,详情请参见如何使用Istio调用链埋点。
  • 欠费 产生欠费的可能情况: 购买SFS容量型/SFS 3.0容量型文件系统资源套餐包,但SFS容量型文件系统的使用量超出资源包额度,同时账号中的余额不足以抵扣超额后产生的按需费用。 购买SFS容量型/SFS 3.0容量型文件系统资源套餐包,但创建按需计费的SFS Turbo文件系统,同时账号中的余额不足以抵扣产生的按需费用。 购买包年包月的SFS Turbo文件系统,但创建按需计费的SFS容量型文件系统,同时账号中的余额不足以抵扣产生的按需费用。 未购买SFS容量型/SFS 3.0容量型文件系统资源包,在创建按需计费的SFS容量型/SFS 3.0容量型文件系统后账号的余额不足。 创建按需计费的SFS Turbo文件系统,同时账号中的余额不足以抵扣产生的按需费用。 欠费后的服务状态和操作受限说明: 如果账号欠费,进入保留期后您的文件系统仍会保留,您将无法继续使用文件系统。关于欠费还款说明请参考欠费还款。如超出保留期仍未缴清欠款,您的数据将自动被系统释放且无法恢复。 关于保留期时长等更多详细介绍,请参见保留期。
  • 部署虚拟机服务灰度版本 此处以httptest-canary测试程序作为示例。httptest-canary为go http应用,监听在8080端口,访问正常返回“hello, canary http server”消息。 上传httptest-canary应用到虚拟机2。 修改权限。 chmod +x httptest-canary 启动httptest-canary应用。 ./httptest-canary
  • 配置方法 请在CCE控制台“服务发现”页面,istio-system命名空间下,更新服务所关联的网关服务,将服务亲和改成“节点级别”。前提是已开启ELB的获取客户端IP功能(当前为默认开启)。 externalTrafficPolicy:表示此Service是否希望将外部流量路由到节点本地或集群范围的端点。有两个可用选项:Cluster(默认)和Local。Cluster隐藏了客户端IP,可能导致第二跳到另一个节点,但具有良好的整体负载分布。Local保留客户端源IP并避免LoadBalancer和NodePort类型服务的第二跳,但存在潜在的不均衡流量传播风险。
共100000条