华为云用户手册

  • 边车管理 展示所有注入了边车的业务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个ECS节点,作为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类型服务的第二跳,但存在潜在的不均衡流量传播风险。
  • 验证方式 结合httpbin镜像在“x-forward-for”字段中可以看到源IP,httpbin是一个HTTP Request & Response Service,可以向他发送请求,他将会按照指定的规则将请求返回。httpbin镜像可在SWR中搜索。使用httpbin镜像进行验证时请确保集群已开通网格。 登录ASM应用服务网格控制台,选择一个可用的测试网格并单击进入。 选择左侧“网格配置”查看其关联的集群。 单击集群名称进入集群详情页,单击对应集群右上角第三个图标“工作负载”进入“工作负载”页签。 单击右上角“创建负载”按钮。 配置工作负载的信息。 基本信息 负载类型:选择无状态工作负载Deployment。 负载名称:命名工作负载为httpbin。 命名空间:选择工作负载的命名空间,默认为default。 其余参数使用默认值。 容器配置 基本信息: 容器名称:为容器自定义一个名称 镜像名称:单击后方“选择镜像”,在右上角搜索框搜索“httpbin”镜像并选择,单击“确认”。 镜像版本:选择一个镜像版本 其余参数使用默认值。 服务配置 服务(Service)是用来解决Pod访问问题的。每个Service有一个固定IP地址,Service将访问流量转发给Pod,而且Service可以给这些Pod做负载均衡。 单击服务配置参数下面的“+”进入创建服务页面。 Service名称:Service名称为工作负载名称。 访问类型:选择集群内访问。 端口设置: 协议:TCP 容器端口:80(以实际访问端口为准) 服务端口:80(以实际访问端口为准) 单击右下角“确定”完成服务创建。 单击右下角“创建工作负载”完成工作负载创建。 在集群详情页选择左侧“服务发现”页签,可在服务列表中查看到所创建的httpbin服务。 返回ASM应用服务网格,选择左侧“服务管理”页签,在服务管理中可查看到httpbin的配置诊断显示为异常。 单击此服务配置诊断中的“处理”按钮,按照弹出“配置诊断”页面对应的修复指导进行修复。 以“Service的端口名称是否符合Istio规范”为例,选择协议为“http”,单击“一键修复”。 选择左侧“网关管理”页签,单击右上角“添加网关”,在弹出“添加网关”页面输入配置信息。 配置信息 网关名称:httpbin。 集群选择:网格所关联使用的集群。 负载均衡:选择公网、选择一个elb公网。 对外协议:选择HTTP。 对外端口:自定义端口。 外部访问地址:负载均衡中所选elb公网地址。 单击“路由配置”下方的“+”在弹出“添加路由”页面添加路由。 URL:选择完全匹配并输入映射。 命名空间:服务所在命名空间。 目标服务:默认设置。 配置完成后单击“确定”。 单击“确定”完成网关添加。 选择左侧“服务管理”页签,可以在“访问地址”查看到所创建路由的外部访问地址。 在映射的外部访问地址后加上“?show_env=1”,访问添加字段后的外部访问地址,例如:http://xxx.xxx.xxx:80/get?show_env=1。可以在“x-forward-for”字段中查看网关获取的IP为容器段IP。 ... ... ... x-forward-for: xxxx 返回集群详情页,选择左侧导航栏“服务发现”,更改服务所关联的网关服务的配置。方法如下: 下拉上方“命名空间”列表选择“istio-system”。 展开服务后方“更多”选项,单击“更新”,在弹出“更新服务”页面将“服务亲和”更改为“节点级别”,勾选“我已阅读《负载均衡使用须知》”,单击“确定”。 返回13中访问的外部地址并刷新,若设置之后“x-forward-for”字段中显示的网关获取IP的结果为本机源IP,则完成验证。 ... ... ... x-forward-for: xxxx
  • 负载级别配置拦截IP网段 通过配置业务deployment文件,可以在负载级别配置IP网段拦截: 执行kubectl edit deploy –n user_namespace user_deployment 1. 在deployment.spec.template.metadata.annotations中配置IP网段拦截traffic.sidecar.istio.io/includeOutboundIPRanges: 2. 在deployment.spec.template.metadata.annotations中配置IP网段不拦截traffic.sidecar.istio.io/excludeOutboundIPRanges: 注意:上述操作会导致业务容器滚动升级。
  • 负载级别指定端口配置出入流量拦截 通过修改业务deployment文件,可以在负载级别配置端口上的出入流量拦截规则: 执行kubectl edit deploy –n user_namespace user_deployment 1. 在deployment.spec.template.metadata.annotations中配置入流量指定端口不拦截traffic.sidecar.istio.io/excludeInboundPorts: 2. 在deployment.spec.template.metadata.annotations中配置入流量指定端口拦截traffic.sidecar.istio.io/includeInboundPorts: 3. 在deployment.spec.template.metadata.annotations中配置出流量指定端口不拦截traffic.sidecar.istio.io/excludeOutboundPorts: 4. 在deployment.spec.template.metadata.annotations中配置出流量指定端口拦截traffic.sidecar.istio.io/includeOutboundPorts: 注意:上述操作完成后会导致业务容器滚动升级。
  • 原因分析 ASM服务网格对接至集群后,会在命名空间monitoring下创建一个otel-collector工作负载。创建这个工作负载的原因是需要利用其对envoy收集遥测数据(trace、log、metric),并进行处理,导出到相应的后端,实现网格的可观测性。 otel-collector架构简介 图1 otel-collector架构图 如上图的架构图所示,otel-collector包含了四个模块: Receivers 接收器Receivers是遥测数据进入otel-collector的方式,可以是推送或拉取。Receivers可以以多种格式接收遥测数据,例如上图中的OTLP、Jaeger、Prometheus格式。 Processors 处理器Processors用于处理Receivers收集到的数据,例如常用的batch处理器,用于对遥测数据进行批处理。 Exporters 导出器Exporters是将遥测数据发送到指定后端的方式,它帮助我们更好地可视化和分析遥测数据。 Extensions 扩展主要适用于不涉及处理遥测数据的任务。扩展是可选的,比如可以增加一个health_check的健康检查功能,获取有关Collector健康状况的信息。 otel-collector在ASM基础版网格中的使用 可通过以下命令获取otel-collector工作负载的配置信息: 以在基础版网格获取到的配置文件为例: receivers配置项定义了可以选择以zipkin、prometheus两种协议从envoy获取遥测数据,其中prometheus定义了以每15s的间隔从/stats/prometheus路径下抓取数据。 processors配置项定义了batch、memory_limiter两种对数据处理的方式,分别是批处理和内存限制。 exporters配置项定义了将处理过的遥测数据导出至apm服务器。 extensions配置项定义了health_check扩展,其用于获取有关otel-collector健康状况的信息。 service部分用于配置otel-collector实际会采用哪些上述定义好的配置项。 比如上述配置文件中service项,其配置了两个pipeline分别用于处理metrics数据和traces数据(注:一个pipeline是一组receivers, processors, 和exporters的集合),以及配置了logs输出级别为info及以上。其处理架构如下图所示。 图2 metrics、traces处理架构图
  • Jaeger/Zipkin OSC插件安装指导 Jaeger/Zipkin OSC插件安装方式一致,下面以Jaeger为例进行安装。 进入云原生服务中心OSC控制台,在左侧菜单中选择“服务目录”,搜索“Jaeger”,单击“订阅”。 在左侧菜单中选择“我的服务--我的订阅”页面,单击Jaeger服务中的“创建实例”。 选择实例的部署场景、区域、容器集群、命名空间,再选择所需要部署的服务实体。勾选左下角“我已知晓”复选框。 命名空间需要选择monitoring命名空间,否则需要自行配置ServiceEntry和WorkloadEntry。 单击“下一步:实例参数”,填写实例参数,支持“表单”和“yaml”两种部署模式,建议使用yaml方式进行部署。 参数填写完毕后单击“下一步:信息确认”,确认无误,单击“提交”,等待实例创建成功。 实例详情中“访问地址”即Jaeger服务接收请求信息的地址和端口。 此处的包含collector关键字的地址和端口即ASM应用服务网格在购买网格的时候“可观测性配置--调用链”选择“第三方Jaeger/Zipkin服务”时需要填入的服务地址和服务端口。 父主题: 流量监控
  • 下行带宽/流量 选择需要查看的时间、播放域名、区域及时间粒度。单击界面右侧的“带宽”或“流量”,可以切换查看带宽、流量趋势图。 带宽用量趋势呈现的是所选域名的总带宽趋势,如图1所示。其中,“下行带宽:2.00 Mbps”为所选域名在查询时间段内的下行带宽峰值。 图1 下行带宽统计详情 流量用量趋势中呈现的是所选域名的总流量趋势,如图2所示。其中,“下行流量:2.50 GB”为所选域名在查询时间段内的流量消耗。 流量趋势图中的总流量计算方式为,将每5分钟粒度统计的流量进行合计(Byte),再换算成MB后,精确到小数点后两位。 图2 下行流量统计详情
  • 鉴权方式B 鉴权方式B主要通过Key、timestamp和StreamName计算鉴权串。 鉴权URL格式 原始URL?txSecret=md5(Key + StreamName + txTime)&txTime=hex(timestamp) 表3 鉴权字段描述 字段 描述 txTime 播放URL的有效时间,为Unix时间戳的十六进制结果。 如果当前txTime的值大于当前请求的时间则可以正常播放,否则播放会被后台拒绝。 示例:5eed5888(即2020.06.20 08:30:00) Key 在控制台设置的防盗链Key值,具体请参见开启Key防盗链。 txSecret URL中的加密参数。 通过将key,StreamName,txTime依次拼接的字符串进行MD5加密算法得出。 txSecret = md5(Key + StreamName + txTime) 时长 鉴权URL的有效时间长度。 若txTime设置为当前时间,有效时间设置为1249s,则播放URL过期时间为当前时间+ 1249s。 鉴权URL示例 以生成播放鉴权地址为例,推流鉴权地址的生成与播放鉴权地址的生成同理。 原始URL:http://test-play.example.com/livetest/huawei1.flv Key:GCTbw44s6MPLh4GqgDpnfuFHgy25Enly StreamName:huawei1 txTime:5eed5888 时长:1249s 根据计算公式,得到txSecret。 txSecret = md5(GCTbw44s6MPLh4GqgDpnfuFHgy25Enlyhuawei15eed5888) = 5cdc845362c332a4ec3e09ac5d5571d6 则鉴权播放地址为: http://test-play.example.com/livetest/huawei1.flv?txSecret=5cdc845362c332a4ec3e09ac5d5571d6&txTime=5eed5888
  • 鉴权方式A 鉴权方式A主要通过Key、timestamp、rand(随机数)、uid(设置为0)和URL计算鉴权串。 鉴权URL格式 原始URL?auth_key={timestamp}-{rand}-{uid}-{md5hash} md5hash的计算公式: sstring = "{URI}-{Timestamp}-{rand}-{uid}-{Key}" HashValue = md5sum(sstring) 表2 鉴权字段描述 字段 描述 timestamp 用户定义的有效访问时间起始点,值为1970年1月1日以来的当前时间秒数 。十进制或者十六进制整数。 示例:1592639100(即2020-06-20 15:45) 时长 鉴权URL有效的时间长度。 若设置的有效时间为1800s,则用户可在从timestamp开始的1800s内允许访问直播地址。超出该区间,鉴权失败。 示例:若设置的访问时间为2020-6-30 00:00:00,则链接真正失效时间为2020-6-30 00:30:00。 rand 随机数,建议使用UUID,不能包含中划线"-"。 示例:477b3bbc253f467b8def6711128c7bec uid userID。暂未使用,直接设置成0即可。 md5hash 通过md5算法计算出来的验证串,数字0-9和小写英文字母a-z混合组成,固定长度32。 sstring = "{URI}-{Timestamp}-{rand}-{uid}-{Key}" HashValue = md5sum(sstring) URI 指原始URL中从域名后开始到最后的路径。 示例:/livetest/huawei1.flv Key 在控制台设置的防盗链Key值,具体请参见开启Key防盗链。 鉴权URL示例 以生成播放鉴权地址为例,推流鉴权地址的生成与播放鉴权地址的生成方法相同。 原始URL:http://test-play.example.com/livetest/huawei1.flv timestamp:1592639100 时长:1800s Key:GCTbw44s6MPLh4GqgDpnfuFHgy25Enly rand:477b3bbc253f467b8def6711128c7bec uid:0 URI:/livetest/huawei1.flv 根据计算公式,得到md5hash。 HashValue = md5sum("/livetest/huawei1.flv-1592639100-477b3bbc253f467b8def6711128c7bec-0-GCTbw44s6MPLh4GqgDpnfuFHgy25Enly") = dd1b5ffa00cf26acec0c169ae1cfabea 则鉴权播放地址为: http://test-play.example.com/livetest/huawei1.flv?auth_key=1592639100-477b3bbc253f467b8def6711128c7bec-0-dd1b5ffa00cf26acec0c169ae1cfabea
共100000条