云服务器内容精选

  • 网格配置概述 网格配置提供了集群管理、系统组件管理、sidecar管理、istio资源管理以及升级能力。 Istio控制面组件负责向数据面组件注入sidecar,管理数据面sidecar行为,下发策略配置,搜集监控数据等。其中,sidecar是指运行在业务Pod中,与业务容器协同工作,负责业务Pod的路由转发,监控数据采集,流量规则配置等功能。 “网格配置”中各个页签的功能如下: “基本信息”页签:可查看网格名称、网格ID、网格状态、网格类型、网格规格、当前版本、计费模式、网格控制面网段、可观测性以及已启用网格的集群。 企业版网格还支持添加、移除集群,详情请参见添加集群。 “系统组件管理”页签:(仅企业版网格包含)展示所有控制面组件对应的工作负载,包括istio-egressgateway、istio-ingressgateway、istio-eastwestgateway(非扁平网络包含)和istiod。如果启用了大规格实例优化(即安装Mantis插件),还会显示mantis-centralgateway组件的信息。 “sidecar管理”页签:支持查看所有注入了sidecar的工作负载信息,还可以进行sidecar注入、配置sidecar资源限制等操作。详情请参见sidecar管理。 “istio资源管理”页签:展示所有istio资源(如VirtualService、DestinationRule),还支持以YAML或JSON格式创建新的istio资源,或对现有istio资源进行修改。详情请参见istio资源管理。 “升级”页签:提供网格版本升级能力。详情请参见升级网格。 “网格扩展”页签:配置可观测性配置。详情请参见网格扩展。 父主题: 网格配置
  • 查看流量监控情况 登录应用服务网格控制台,单击已对接 APM 的服务网格名称进入详情页面。 在左侧导航栏中选择“监控中心”-“流量监控”。 查看整个系统的监控情况。 拓扑图中显示了系统处于运行中和未就绪的应用数量。 图1 流量拓扑 查看某个组件的监控情况。 选择服务网格、集群及命名空间,单击拓扑图上的组件,进入组件监控详情页面,如图2所示。 图2 流量监控详情页 其中, 流量概况:展示了应用详细的流量信息,包含请求总数、错误计数、平均时延、最大时延等。 部署信息:显示了组件内的所有实例状态及信息。 调用链:通过时间维度和组件版本来查看调用情况,支持使用高级搜索中的选项进行精准搜索。使用istio做服务治理时,无需在微服务代码中进行调用链埋点。但微服务代码在接收和发送请求时需要传递调用链相关的Header信息,才能构造成完整的调用链路,详情请参见如何使用Istio调用链埋点。
  • 如何使用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(); } }
  • 升级前检查说明 集群资源检查,检查规则如下: 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、servicerole、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。 父主题: 金丝雀升级
  • 约束与限制 应用服务网格依赖集群CoreDNS的 域名 解析能力,请确保集群拥有足够资源,且CoreDNS插件运行正常。 集群启用Istio时,需要开通node节点(计算节点/工作节点)所在安全组的入方向7443端口规则,用于Sidecar自动注入回调。如果您使用CCE创建的默认安全组,此端口会自动开通。如果您自建安全组规则,请手动开通7443端口,以确保Istio自动注入功能正常。 1.13和1.15版本的istio组件不支持在CentOS和EulerOS2.5操作系统的节点上运行,在创建网格时,请不要指定这些类型的节点为mastre节点。 请根据下表ASM网格版本与集群版本适配规则匹配合适的网格版本和集群版本。 表1 ASM网格版本与集群版本适配规则 ASM网格版本 集群版本 1.3 v1.13、v1.15、v1.17、v1.19 1.6 v1.15、v1.17 1.8 v1.15、v1.17、v1.19、v1.21 1.13 v1.21、v1.23 1.15 v1.21、v1.23、v1.25、v1.27 1.18 v1.25、v1.27、v1.28、1.29
  • 处理策略 为了避免多个入口的配置相冲突,以及确保Istio各工作负载持续稳定运行,ASM 1.8.6及以上版本采取如下策略: 定义工作负载的关键运行配置和非关键运行配置 表1 各资源类型下的关键运行配置 工作负载 资源类型 配置项 配置项描述 istiod istio-ingressgateway istio-egressgateway Deployment spec.replicas 实例数 spec.strategy 升级策略 spec.template.spec.nodeSelector 调度策略 spec.template.spec.affinity 调度策略 spec.template.spec.tolerations 调度策略 spec.template.spec.containers.resources 资源请求和限制 Istio Operator默认保持当前集群中工作负载的关键运行配置不做更新,仅支持非关键运行配置更新。 若需要对关键运行配置进行修改,建议用户通过CCE控制台“工作负载”页面修改,若用户有特定需求,可通过工单进行咨询。
  • 服务公告 ASM使用istio-system、istio-operator命名空间承载网格运行所需的系统组件和系统运行配置,对于其下的资源对象: istio-system命名空间中的Deployment、DaemonSet、Service、ConfigMap、Secret、Role、RoleBinding、ServiceAccount资源对象; istio-operator命名空间下的Deployment、IstioOperator、ConfigMap、Secret、Role、RoleBinding、ServiceAccount资源对象; 建议您谨慎根据应用服务网格官网资料文档或在相关技术支持的指导下进行修改操作,以避免对您的业务产生影响。若用户有特定需求,也可通过提交工单进行咨询。
  • 操作步骤 登录应用服务网格ASM控制台。 单击右上角“购买网格”。 参考购买基础版网格中的指导,设置网格名称,选择Istio版本。 在“集群配置”中选择在创建集群中创建的集群,如果有多个集群,可以同时勾选多个。勾选后,系统自动校验集群是否符合添加要求,若校验不通过,会以图标标识,鼠标放上去可以查看校验不通过的原因以及解决方案。具体内容可参考集群校验报错常见场景及解决方案。 同一虚拟私有云的集群只能加入同一个网格。 为了满足高可用的要求,集群需要至少包含两个可用节点,每个节点至少保证有2U4G的可用资源。 如果实例(Pod)需要跨集群通信,集群需要使用ENI网络模型,且集群之间网络互通,可以处于同一VPC内,也可以将多个集群的VPC通过其他方式(对等连接、云连接等)连通。 集群的服务网段、容器网段不能和网格内已选集群的服务网段、容器网段冲突。如果集群和网格内的已选集群处于不同的VPC,集群的子网网段也不能冲突。 同一网格最多只能添加五个集群。 在可观测性配置中勾选“启用应用指标”,已默认选中“ AOM 服务”。其他可观测性配置根据需要配置即可。 展开高级配置,在“命名空间注入配置”中勾选集群的“default”命名空间,选择重启已有服务。 图1 命名空间注入配置 设置完成后单击“提交”。 创建时间预计需要5~10分钟,请耐心等待。当网格状态从“安装中”变为“运行中”,表示网格创建成功。
  • 为服务添加灰度版本 登录应用服务网格ASM控制台,单击“asmtest”网格内的。 创建灰度任务名称为“test”的灰度任务,并配置基本信息及灰度版本信息,灰度发布服务选择创建工作负载及服务中创建的名称为“servicetest”的服务,工作负载会自动关联“deptest”,单击“发布”。 图1 创建灰度任务 如果服务“servicetest”无法选择,需要确认服务是否异常,修复后才能选择。 单击“配置流量策略”,选择“基于流量比例”策略类型,为v2(灰度版本)配置“流量配比”为80%。 图2 配置流量策略 单击“策略下发”。 灰度策略的生效需要几秒的时间,您可以在监测灰度运行状态页面,观察灰度版本的运行状态。
  • 清除资源 到此本Demo已全部操作完成,因节点和应用运行过程中会产生费用,如果无特殊要求,请及时删除应用和节点,避免费用产生。 选择左侧导航中的“体验任务”,单击Bookinfo任务中的“卸载”。 单击“确定”。卸载Bookinfo体验任务,会自动删除productpage、details、reviews、ratings服务及相关资源。 图17 卸载体验任务 卸载体验任务后,已完成灰度发布的服务,其灰度版本对应的负载需要手动在CCE控制台删除。
  • 为服务添加灰度版本 本步骤将为Bookinfo应用的“reviews”服务添加新的灰度版本,并配置相应的灰度策略,将原有生产环境的默认版本的流量引流一部分到新版本中。 下面将以为“reviews”服务添加一个v3新版本,且v3新版本接收Bookinfo应用的30%流量为例进行配置。 部署灰度版本 在左侧导航中选择“灰度发布”,在金丝雀发布下,单击“立即发布”。 配置灰度发布基本信息。 灰度任务名称:用户自定义,此处设置为reviews-v3。 命名空间:选择服务所在命名空间。 灰度发布服务:在下拉框中选择reviews。 工作负载:选择服务所属的工作负载。 配置灰度版本信息。 部署集群:选择服务所属的集群。 版本号:配置为v3。 实例数量:使用默认。 实例配置:镜像版本选择1.17.2,其他参数保持默认。 单击“发布”,待启动进度为100%,表明灰度版本部署成功。 图8 查看启动进度 配置流量策略 为灰度版本设置流量策略,灰度版本会根据配置的流量配比引流老版本中的部分或全部流量。 灰度版本部署成功后,单击“配置流量策略”。 设置流量策略。 策略类型分为“基于流量比例”和“基于请求内容”,通过页签选择确定。 基于流量比例:根据流量比例配置规则,将从原版本中切分指定比例的流量到灰度版本。例如80%的流量走原版本,20%的流量走灰度版本。 基于请求内容:根据请求内容配置规则,只有请求内容中满足特定条件的流量会切分到灰度版本上。例如只有在Windows操作系统上的用户可以访问灰度版本。 以“基于流量比例”为例,且v3版本流量配比为20%。 图9 流量策略 单击“策略下发”。 灰度策略的生效需要几秒的时间,您需要在“监测与处理”页面开通 免费体验 APM,或者购买APM套餐包,否则无法观测到原版本和灰度版本的流量监控数据。 在“服务列表”页面,单击productpage服务中的“访问地址”。不断刷新页面,页面在v1和v3版本之间来回切换,并且比例大致接近4:1。 图10 v1版本页面 图11 v3版本页面 您也可以在一台已连接公网的机器上执行如下命令,持续访问productpage服务。 while true;do wget -q -O- http://ip:port/productpage; done 返回控制台的“监测与处理”页面查看v1和v3版本的实时流量监控情况。 图12 流量监控详情 在“流量监控”页面,您可以查看Bookinfo应用各服务之间的实时拓扑。ASM提供的流量监控功能,可监控服务之间的拓扑、会话请求调用链、各环节耗时和RPS、RT等性能状态。 图13 流量监控拓扑 从拓扑图可以看出,reviews-v1和reviews-v3服务的调用次数分别为706和167,比例大致接近4:1,符合设定的流量比例策略。成功实现了灰度发布。
  • Bookinfo应用分析 Bookinfo是一个模仿在线书店的应用,页面上会显示一本书籍的描述,书籍的细节(如页数),以及关于书籍的一些评论。 Bookinfo应用由四个单独的服务构成,几个服务是由不同的语言编写的。这些服务对应用服务网格ASM并无依赖,但是构成了一个有代表性的服务网格的例子,即由多个服务、多个语言构成,且reviews服务具有多个版本。这四个服务的说明如下: productpage:会调用details和reviews两个服务,用来生成页面。 details:包含了书籍的信息。 reviews:包含了书籍相关的评论,同时会调用ratings服务。 ratings:包含了由书籍评价组成的评级信息。 其中,reviews服务有3个版本: v1(1.17.0)版本不会调用ratings服务。 v2(1.17.1)版本会调用ratings服务,并使用1到5个黑色星形图标来显示评分信息。 v3(1.17.2)版本会调用ratings服务,并使用1到5个红色星形图标来显示评分信息。 为了直观的展示灰度版本之间流量切换情况,本教程以reviews服务的1.17.1版本(黑星形)、1.17.2版本(红星形)为例进行说明。 图2 Bookinfo应用的端到端架构 在ASM中运行Bookinfo应用,无需对应用自身做出任何改变,只需简单的在ASM环境中对服务进行配置和运行,即把Envoy Sidecar注入到每个服务之中。最终的部署结果如图3所示。 图3 Envoy Sidecar注入之后的Bookinfo应用 所有的服务都和Envoy Sidecar集成在一起,被集成服务的所有出入流量都被Sidecar所劫持,这样就可以利用ASM为应用提供服务路由、遥测数据收集以及策略实施等功能。
  • 购买网格 企业版和基础版网格均支持一键体验任务。基础版可治理单个集群,且免费提供200实例规格,建议您的业务在正式加入网格前先使用基础版。 登录应用服务网格ASM控制台。 单击右上角“购买网格”。 设置如下参数,其余参数均采用默认值。 网格类型 选择基础版。 网格名称 设置网格的名称。 Istio版本 网格支持的Istio版本。 集群 选择4中创建的集群。 Istio控制面节点 如果需要高可用,建议选择两个或以上不同可用区的节点。 设置完成后,在右侧的配置清单中确认网格配置,单击“提交”。 创建时间预计需要1~3分钟,请耐心等待。当网格状态从“安装中”变为“运行中”,表示网格创建成功。
  • 一键创建Bookinfo应用 为集群开启应用服务网格功能后,可以通过“体验任务”创建一个Bookinfo应用Demo,具体操作如下: 登录应用服务网格ASM控制台。 单击网格名称,进入详情页面。 选择左侧导航中的“体验任务”,单击Bookinfo任务中的“安装”。 在右侧页面设置Bookinfo应用所在的集群,在“负载均衡”中选择与所选集群处于同一VPC和子网的共享型负载均衡实例,设置一个对外端口,并填写Bookinfo应用镜像所在的镜像仓库地址,如“swr.cn-north-4.myhuaweicloud.com/group”(group表示组织名称),单击“安装”。 图6 安装Bookinfo 等待Bookinfo应用创建完成。创建完成后进入“服务管理”页面,配置诊断栏将显示为“正常”,Bookinfo应用包含productpage、details、reviews、ratings四个服务。 图7 服务列表
  • 创建虚拟私有云 虚拟私有云(Virtual Private Cloud,简称VPC)是用户在华为云上申请的隔离的、私密的虚拟网络环境。用户可以自由配置VPC内的IP地址段、子网、安全组等子服务,也可以申请弹性带宽和弹性IP搭建业务系统。 登录 虚拟私有云VPC 控制台。 单击右上角的“创建虚拟私有云”。 如果无特殊需求,界面参数均可保持默认,单击“立即创建”。 详细参数说明可参考创建虚拟私有云和子网。