华为云用户手册

  • 操作步骤 登录应用服务网格控制台,使用以下任意一种方式进入添加集群页面。 (快捷方式)在企业版网格右上方,单击图标。 在企业版网格详情页,单击左侧导航栏的“网格配置”,在“基本信息”页签单击“添加集群”。 设置集群信息。 集群配置 在集群列表中选择集群,或在列表右上角输入集群名称搜索需要的集群。勾选后,系统自动校验集群是否符合添加要求,若校验不通过,会以图标标识,鼠标放上去可以查看校验不通过的原因以及解决方案。具体内容可参考集群校验报错常见场景及解决方案。 如果当前没有可用集群,需要先创建集群后,再进行添加,详情可参考购买CCE集群。 选择好集群后,按照集群的网络模型或实际的通信需求选择集群的网络类型(要求网格版本为1.8.4-r3及以上)。网络类型分为扁平网络和非扁平网络,如果是非扁平网络,还要为集群配置一个东西向流量的私网ELB,作为其他集群的访问入口。 关于扁平网络和非扁平网络的介绍以及如何选型请参见扁平网络和非扁平网络;选择非扁平网络时,如果查询不到ELB,请参考企业版网格添加集群时,选择非扁平网络,为什么查询不到ELB?进行排查。 sidecar配置 选择命名空间:为命名空间设置标签istio-injection=enabled,其中的Pod在重启后会自动注入istio-proxy sidecar。 是否重启已有服务:如果开启(即重启已有服务),会自动注入istio-proxy sidecar,业务将会暂时中断。 可观测性配置 继承自网格配置,不可修改。 设置完成后,单击“确定”。 添加集群大约需要一分钟,请耐心等待。添加完成后,返回网格详情页面可查看到添加的集群信息。
  • 处理策略 为了避免多个入口的配置相冲突,以及确保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控制台“工作负载”页面修改,若用户有特定需求,可通过工单进行咨询。
  • 配置sidecar资源限制 支持为sidecar(即istio-proxy容器)配置CPU和内存的资源上下限。同一个节点上部署的工作负载,对于未设置资源上下限的工作负载,如果其异常资源泄露会导致其他工作负载分配不到资源而异常。未设置资源上下限的工作负载,工作负载监控信息也会不准确。 默认的sidecar资源上下限为: CPU(Core):最小 0.1,最大 2 MEM(MiB):最小 128,最大 1024 如需更改,请参考以下操作: 单击工作负载操作列的“sidecar资源限制”,也可以勾选多个工作负载,在列表左上角单击“sidecar资源限制”进行批量配置。 图2 sidecar资源限制 CPU最小值:也称CPU请求,表示容器使用的最小CPU需求,作为容器调度时资源分配的判断依赖。只有当节点上可分配CPU总量 ≥ 容器CPU请求数时,才允许将容器调度到该节点。 CPU最大值:也称CPU限制,表示容器能使用的CPU最大值。 MEM最小值:也称内存请求,表示容器使用的最小内存需求,作为容器调度时资源分配的判断依赖。只有当节点上可分配内存总量 ≥ 容器内存请求数时,才允许将容器调度到该节点。 MEM最大值:也称内存限制,表示容器能使用的内存最大值。当内存使用率超出设置的内存限制值时,该实例可能会被重启进而影响工作负载的正常使用。
  • sidecar注入 可展示当前已注入sidecar的命名空间及所属集群。如果还未做过注入操作,或者需要为更多命名空间注入sidecar,请参考以下操作: 登录应用服务网格控制台,单击服务网格的名称,进入网格详情页面。 在左侧导航栏选择“网格配置”,单击“sidecar管理”页签。 单击“sidecar管理”,选择命名空间,判断是否重启已有服务,单击“确定”。 图1 注入sidecar 选择命名空间:选择一个或多个命名空间,系统将为命名空间设置标签istio-injection=enabled。 是否重启已有服务: :会重启命名空间下已有服务关联的Pod,将会暂时中断业务。只有在重启后,已有服务关联的Pod才会自动注入istio-proxy sidecar。 :已有服务关联的Pod不会自动注入istio-proxy sidecar,需要在CCE控制台,手动重启工作负载才会注入sidecar。是否重启已有服务只会影响已有服务,只要为命名空间设置了istio-injection=enabled标签,后面新建的服务实例都会自动注入sidecar。 流量拦截配置 默认情况下,ASM所注入的sidecar会拦截所有入方向和出方向流量,可通过流量拦截配置修改默认的流量拦截规则。 入方向端口:可用于配置端口级别拦截规则,生效于网格服务的内部端口,以逗号分隔入站端口。 仅拦截指定端口表示访问网格服务指定端口范围内的请求将被重定向到sidecar中。 仅排除指定端口表示访问网格服务的请求,除端口范围外的请求将被重定向到sidecar中。 出方向端口:可用于配置端口级别拦截规则,生效于网格服务对外访问的流量方向上,以逗号分隔出站端口。 仅拦截指定端口表示网格服务访问指定端口范围内的请求将被重定向到sidecar中。 仅排除指定端口表示网格服务对外访问的请求,除指定端口范围外的流量都将被重定向到sidecar中。 出方向网段:可用于配置网段级别拦截规则,生效于网格服务对外访问的流量方向上,以逗号分隔 IP ,以 CIDR 形式表示。 仅拦截指定网段表示指定网段范围内的流量将被重定向到sidecar中。 仅排除指定网段表示除指定网段范围外的流量将被重定向到sidecar中。 若界面提示“以下集群未开放命名空间注入修改操作”,可能因为当前网格是通过1.0控制台创建的,默认不开放命名空间注入,需要通过kubectl命令行开放,具体操作请参见如何为集群开放命名空间注入?。 为集群的命名空间开启sidecar注入后,该命名空间下所有工作负载关联的Pod将自动注入sidecar。如果某些工作负载不希望注入sidecar,可参考某些工作负载不注入sidecar,该如何配置?进行配置。
  • 操作步骤 登录应用服务网格控制台,单击服务网格的名称,进入网格详情页面。 在左侧导航栏选择“服务管理”,选择需要更改流量策略的服务,单击操作列的“流量治理”,在右侧页面进行流量策略更改。 接下来,以Bookinfo应用的reviews服务为例,结合APM(应用性能管理)的监控拓扑图来描述负载均衡算法更改前后的配置效果。 负载均衡算法为“轮询调度”时,不断访问productpage页面,观察流量如何分发。 进入“流量监控”页面,鼠标右键单击reviews服务,选择“展开”选项,这时可以看到所有实例的被分发情况。 从下图可以看出,请求依次分发给reviews的5个实例。这与负载均衡“轮询调度”算法相吻合。 在“负载均衡”页签中,单击“立即配置”,将负载均衡算法修改为“随机调度”。 图1 修改负载均衡算法 不断访问productpage页面,观察流量分发情况。 可以发现流量分发没有什么固定规律,各个实例的访问次数参差不齐,说明随机算法已经生效。
  • 创建JWT认证 创建JWK。 访问JWT工具网站,选择“Algorithm”为“RS512”,获取公钥(PUBLIC KEY)。 图1 生成公钥 在JWK to PEM Convertor online工具中选中“PEM-to-JWK (RSA Only)”,输入上一步获取的公钥,单击“submit”,将公钥转换为JWK。 图2 将公钥转换为JWK {"kty":"RSA","e":"AQAB","kid":"a78641b9-d81e-4241-b35a-71726c3fa053","n":"u1SU1LfVLPHCozMxH2Mo4lgOEePzNm0tRgeLezV6ffAt0gunVTLw7onLRnrq0_IzW7yWR7QkrmBL7jTKEn5u-qKhbwKfBstIs-bMY2Zkp18gnTxKLxoS2tFczGkPLPgizskuemMghRniWaoLcyehkd3qqGElvW_VDL5AaWTg0nLVkjRo9z-40RQzuVaE8AkAFmxZzow3x-VJYKdjykkJ0iT9wCS0DRTXu269V264Vf_3jvredZiKRkgwlL9xNAwxXFg0x_XFw005UWVRIkdgcKWTjpBP2dPwVZ4WWC-9aGVd-Gyn1o0CLelf4rEjGoXbAAEgAqeGUxrcIlbjXfbcmw"} 创建JWT认证。 登录应用服务网格控制台,单击网格名称,进入网格详情页面。 在左侧导航栏选择“服务管理”,在列表右上方选择服务所在命名空间。 选择httpbin服务,单击操作列的“安全”,在右侧页面选择“JWT认证”页签,单击“立即配置”,在弹出的“JWT认证”页面填写如下信息: 发行者:JWT的颁发者,本文设置为“test”。 令牌受众:JWT受众列表,设置哪些服务可以使用JWT Token访问目标服务,本文设置为“ASM”。 jwks:设置JWT信息,本文设置为{"keys": [1创建的JWK]},例如1创建的JWK为{"kty":"RSA","e":"AQAB","kid":"a78641b9-d81e-4241-b35a-71726c3****"},则jwks为{"keys": [{"kty":"RSA","e":"AQAB","kid":"a78641b9-d81e-4241-b35a-71726c3****"}]}。 图3 创建JWT认证 单击“确定”完成创建。
  • 验证JWT认证是否生效 使用JWT工具将JWT请求信息编码成JWT Token。 在“Decoded”区域输入以下JWT请求信息,在“Encode”区域将看到自动转换后的JWT Token。 HEADER:设置alg为“RS512”,输入1创建的JWK中的kid,设置type为“JWT”。 PAYLOAD:设置iss为“test”,aud为“ASM”,确保与2中配置的发行者、令牌受众保持一致。 VERIFY SIGNATURE:与1.a中的公钥保持一致。 图4 创建JWT Token 通过入口网关访问httpbin服务。 执行以下命令,带1创建的JWT Token访问服务。 TOKEN=1创建的JWT Token curl -I -H "Authorization: Bearer $TOKEN" http://{httpbin服务的外部访问地址}/ 预期输出: HTTP/1.1 200 OK server: istio-envoy date: Wed, 21 Sep 2022 03:11:48 GMT 执行以下命令,带无效的JWT Token访问服务。 curl -I -H "Authorization: Bearer invalidToken" http://{httpbin服务的外部访问地址}/ 预期输出: HTTP/1.1 401 Unauthorized www-authenticate: Bearer realm="http://***.***.***.***:***/", error="invalid_token" content-length: 145 content-type: text/plain date: Wed, 21 Sep 2022 03:12:54 GMT server: istio-envoy x-envoy-upstream-service-time: 19 修改2中创建的JWT认证,将令牌受众置空(表示对访问的服务不受限制),然后执行以下命令,带1创建的JWT Token访问服务。 curl -I -H "Authorization: Bearer $TOKEN" http://{httpbin服务的外部访问地址}/ 预期输出: HTTP/1.1 200 OK server: istio-envoy date: Wed, 21 Sep 2022 03:20:07 GMT 执行以下命令,不带JWT Token访问服务。 curl -I http://{httpbin服务的外部访问地址}/ 预期输出: HTTP/1.1 403 Forbidden content-length: 85 content-type: text/plain date: Wed, 21 Sep 2022 03:29:31 GMT server: istio-envoy x-envoy-upstream-service-time: 6 根据以上结果,可以看到带有正确的JWT Token的请求访问服务成功,带有错误的JWT Token或者不带JWT Token的请求访问服务失败,说明请求身份认证生效。
  • 创建灰度发布 登录应用服务网格控制台,使用以下任意一种方式进入创建灰度任务页面。 (快捷方式)在网格右上方,单击图标。 (快捷方式)在网格中心位置,单击“创建灰度任务”。 在网格详情页创建。 单击网格名称,进入网格详情页,单击左侧导航栏的“灰度发布”。 如果当前不存在发布中的灰度任务,请在金丝雀发布或蓝绿发布中单击“立即发布”;如果当前存在发布中的灰度任务,请单击右上角“灰度发布”。 配置灰度发布基本信息。 灰度类型 选择创建灰度发布的类型,可根据实际需求选择金丝雀发布和蓝绿发布,两者的区别可参考灰度发布概述。 灰度任务名称 自定义灰度任务的名称。输入长度范围为4到63个字符,包含小写英文字母、数字和中划线(-),并以小写英文字母开头,小写英文字母或数字结尾。 命名空间 服务所在的命名空间。 灰度发布服务 在下拉列表中选择待发布的服务。正在进行灰度任务的服务不可再进行选择,列表中已自动过滤。 工作负载 选择服务所属的工作负载。 版本号 当前服务版本号,版本号不支持修改。 图1 灰度发布基本信息 部署灰度版本信息。 部署集群 灰度发布服务所属的集群。 版本号 输入服务的灰度版本号。 实例数量 灰度版本的实例数量。灰度版本可以有一个或多个实例,用户可根据实际需求进行修改。每个灰度版本的实例都由相同的容器部署而成。 镜像名称 默认为该服务的镜像。 镜像版本 请选择灰度版本的镜像版本。 自定义镜像 用户可通过自定义镜像自行配置本地或第三方镜像地址,灰度发布镜像将采用所配置镜像。注意需确保自定义镜像地址有效,镜像可拉取。 图2 灰度版本信息 图3 灰度版本信息 单击“发布”,灰度版本开始创建。 请确保灰度版本的实例状态正常,且启动进度为100%时,再开始下一步进行流量策略的配置。发布之后进入观察灰度状态页面,可查看Pod监控,包括启动日志和性能监控信息。 (仅金丝雀发布涉及)单击“配置流量策略”,进行流量策略配置。 策略类型:分为“基于流量比例”和“基于请求内容”两种类型,通过页签选择确定。 基于流量比例 根据流量比例配置规则,从默认版本中切分指定比例的流量到灰度版本。例如75%的流量走默认版本,25%的流量走灰度版本。实际应用时,可根据需求将灰度版本的流量配比逐步增大并进行策略下发,来观测灰度版本的表现情况。 图4 基于流量比例 流量配比:可以为默认版本与灰度版本设置流量配比,系统将根据输入的流量配比来确定流量在两个版本间分发的比重。 基于请求内容 目前支持基于Cookie内容、自定义Header、Query、操作系统和浏览器的规则约束,只有满足规则约束的流量才可访问到灰度版本。例如,仅Cookie满足“User=Internal”的HTTP请求才能转发到灰度版本,其余请求仍然由默认版本接收。 图5 基于请求内容 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调用链埋点),从而失去了基于请求内容的灰度发布效果。 设置完成后,单击“策略下发”。 灰度策略的生效需要几秒时间,您可以查看服务的流量监控,以及对原始版本及灰度版本的健康监控。
  • 金丝雀升级原理 ASM基础版网格支持金丝雀升级,金丝雀升级过程中将允许新老网格控制面同时存在,通过在命名空间打上版本对应的标签,可以选择一部分sidecar重启,并连接上新版本的控制面,待所有sidecar都正常连接到新控制面之后下面老版本网格的控制面。 需要注意的是,在部署新网格版本控制面时,istio-ingressgateway和istio-egressgatway的新版本也会同时部署,新老网格版本的网关将同时工作。
  • 操作步骤 登录应用服务网格控制台,确认网格是否需要升级版本。判断方法如下: 列表上方是否提示可升级版本的网格。 网格名称右侧是否存在“可升级”提示。 若存在可升级版本的网格,单击该网格名称,进入网格详情页面。 在左侧导航栏选择“网格配置”,单击“升级”页签。 根据升级路径选择合适的升级方式完成网格升级。 基础版本升级 升级详情请查看金丝雀升级。 企业版补丁更新 单击“补丁更新”,在弹出的提示框中单击“确定”。
  • 升级路径 网格类型 源版本 目标版本 升级方式 企业版 1.8.4-r1 1.8.6-r3 补丁更新(原地升级) 1.8.4-r2 1.8.6-r3 补丁更新(原地升级) 1.8.4-r3 1.8.6-r3 补丁更新(原地升级) 1.8.4-r4 1.8.6-r3 补丁更新(原地升级) 1.8.4-r5 1.8.6-r3 补丁更新(原地升级) 1.8.6-r1 1.8.6-r3 补丁更新(原地升级) 1.8.6-r2 1.8.6-r3 补丁更新(原地升级) 1.6.9-r4 1.6.9-r5 补丁更新(原地升级) 基础版 1.8.x 1.15.7-r1 先版本升级到1.13最新版本(金丝雀升级),再版本升级(金丝雀升级)到1.15.7-r1 1.13.x 1.15.7-r1 版本升级(金丝雀升级)到1.15.7-r1 1.15.5-rx 1.15.7-r1 补丁更新(金丝雀升级)到1.15.7-r1 1.15.x-rx 1.18.7-r1 版本升级(金丝雀升级)到1.18.7-r1 专有版 1.3.0-rx 1.15.7-r3 先迁移至基础版本网格,再版本升级至1.8.6-r4(金丝雀升级),再版本升级(金丝雀升级)到1.13.x最新版本,再版本升级(金丝雀升级)到1.15.7-r3 1.6.9-rx 1.15.7-r3 先迁移至基础版本网格,再版本升级至1.8.6-r4(金丝雀升级),再版本升级(金丝雀升级)到1.13.x最新版本,再版本升级(金丝雀升级)到1.15.7-r3 1.8.4-r1 1.15.7-r3 先迁移至基础版本网格,再版本升级(金丝雀升级)到1.13.x最新版本,再版本升级(金丝雀升级)到1.15.7-r3
  • 编辑已有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配置资源处理策略。
  • 操作步骤 登录应用服务网格控制台,单击服务网格的名称,进入网格详情页面。 在左侧导航栏选择“网格配置”,单击“升级”页签。 选择可升级版本,单击”版本升级”。 在弹出的提示信息后,单击“确定”。 进入升级前检查页面,单击“执行”,进行升级前检查,详情请查看升级前检查说明。 升级前检查结束后,单击“下一步”,进入控制面升级。 单击“升级”,进行控制面升级,详情请查看控制面升级说明。 控制面升级结束后,单击“下一步”,进行数据面升级。 单击“升级”,进行数据面升级,详情请查看数据面升级说明。 升级后处理,详情请查看升级后处理说明。
  • 操作步骤 登录应用服务网格控制台,单击服务网格的名称,进入网格详情页面。 在左侧导航栏选择“网关管理”,单击“添加网关”。 配置网关参数。 网关名称 请输入网关的名称。由小写字母、数字和中划线(-)组成,且必须以小写字母开头,小写字母或数字结尾,长度范围为4~59个字符。 集群选择 选择网关所属的集群。 访问方式 协议版本:支持选择IPV4和双栈两种,已开启ipv6的网格方可配置该参数。 服务网关使用弹性负载均衡服务(ELB)的负载均衡实例提供网络访问,支持共享型和独享型规格,且支持公网和私网。如果是独享型,实例规格需要选择“网络型(TCP/UDP)”,且网络类型需要勾选“IPv4私网”,确保负载均衡实例有私网IP地址。 访问入口 对外协议 请根据业务的协议类型选择。支持HTTP、GRPC、TCP、TLS及HTTPS五种协议类型的选择。 对外端口 开放在负载均衡服务地址的端口,可任意指定。 外部访问地址 系统自动填充负载均衡实例的IP地址,作为服务访问入口地址,您也可以将其修改为负载均衡实例关联的域名。 TLS终止 对外协议为HTTPS时,TLS终止为开启状态,且不可关闭。 对外协议为TLS时,可选择开启/关闭TLS终止。开启TLS终止时需要绑定证书,以支持TLS数据传输加密认证;关闭TLS终止时,网关将直接转发加密的TLS数据。 密钥证书 配置TLS协议并开启TLS时,需要绑定证书,以支持TLS数据传输加密认证。 配置HTTPS协议时,需要绑定密钥证书。 TLS最低版本/TLS最高版本 配置TLS协议并开启TLS终止,或者配置HTTPS协议时,提供TLS最低版本/TLS最高版本的选择。 图1 添加网关 (可选)配置路由参数。 请求的访问地址与转发规则匹配(转发规则由外部访问地址+URL组成)时,此请求将被转发到对应的目标服务处理。单击图标,弹出“添加路由”对话框。 URL匹配规则 前缀匹配:例如映射URL为/healthz,只要符合此前缀的URL均可访问。例如/healthz/v1、/healthz/v2。 完全匹配:只有完全匹配上才能生效。例如映射URL为/healthz,则必须为此URL才能访问。 支持通过YAML方式配置正则匹配规则,修改VirtualService配置文件即可: ... http: - delegate: name: nginx-80 namespace: default match: - uri: regex: /do[a-z]*/ ... 如上所示,“regex”表示按正则表达式方式匹配URL,注意URL必须以“/”开头。 URL 服务支持的映射URL,例如/example。 命名空间 服务网关所在的命名空间。 目标服务 添加网关的服务,直接在下拉框中选择。目标服务会根据对应的网关协议进行过滤,过滤规则请参见添加路由时,为什么选不到对应的服务?。 配置诊断失败的服务无法选择,需要先根据手动修复项或自动修复项进行修复。 访问端口 仅显示匹配对外协议的端口。 重写 (对外协议为HTTP/HTTPS时可配置) 重写HTTP/HTTPS URI和Host/Authority头,于转发前执行。默认关闭。开启后,需要配置如下参数: URI:使用此值重写URI的路径(或前缀),如果原始URI是基于前缀匹配,那么将替换相应匹配的前缀。 Host/Authority头:使用此值重写HTTP/HTTPS的Host/Authority头。 域名单独配置路由 为网关中某个域名单独配置路由规则。 图2 添加路由 配置完成后,单击“确定”。 网关添加完成后,可前往“服务管理”页面,获取服务外网访问地址。 图3 服务外网访问地址
  • JWT结构 JWT是一个包含了特定声明的Json结构。从前面介绍的JWT认证流程第六步知道,只要验证这个Json结构本身,即可以确认请求身份,不需要查询后端服务。下面解析JWT结构从而了解如何携带这些认证信息。 JWT包含三部分:头部Header、负载Payload和签名Signature。 头部Header 头部描述JWT的元数据,包括算法alg和类别typ等信息。alg描述签名算法,这样接收者可以根据对应的算法来验证签名,默认是如下所示的HS256,表示 HMAC-SHA256;typ表示令牌类型,设置为JWT,表示这是一个JWT类型的令牌。 { "alg": "HS256", "typ": "JWT" } 负载Payload 存放令牌的主体内容,由认证服务AuthN生成相关信息并放到令牌的负载中。重要属性包括: iss:令牌发行者 issuer aud:令牌受众 audience 在JWT验证时,会校验发行者、受众信息和令牌负载中的发行者iss、受众audience是否匹配。JWT的内容本身不是加密的,所有拿到令牌的服务都可以看到令牌负载Payload中的内容,因此建议Payload里不要存放私密的信息。 签名Signature 签名字段是对头部和负载的签名,确保只有特定合法的认证服务才可以发行令牌。实际使用中一般是把头部和负载分别执行Base64转换成字符串,然后使用认证服务的密钥对拼接的字符串进行签名,签名算法正是前面介绍的头域中定义的算法。 一个完整的JWT示例如下,对于头部Header和负载Payload进行签名得到Signature。 # Header: { "alg": "RS512", "typ": "JWT" } # Payload { "iss": "weather@cloudnative-istio", "audience": "weather@cloudnative-istio" } # Signature RSASHA512( base64UrlEncode(header) + "." + base64UrlEncode(payload) ) 以上结构最终输出的令牌如下,可以看到“.”分割的三个字符串分别对应JWT结构的头部、负载和签名三部分。 eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjQ2ODU5ODk3MDAsInZlciI6IjIuMCIsImlhdCI6MTUzMjM4OTcwMCwiaXNzIjoid2VhdGhlckBjbG91ZG5hdGl2ZS1pc3Rpby5ib29rIiwic3ViIjoid2VhdGhlckBjbG91ZG5hdGl2ZS1pc3Rpby5ib29rIn0.SEp-8qiMwI45BuBgQPH-wTHvOYxcE_jPI0wqOxEpauw
  • JWT认证原理 JWT(Json Web Token)是一种服务端向客户端发放令牌的认证方式。客户端用户名密码登录时,服务端会生成一个令牌返回给客户端;客户端随后在向服务端请求时只需携带这个令牌,服务端通过校验令牌来验证是否是来自合法的客户端,进而决定是否向客户端返回应答。从机制可以看到,这种基于请求中携带令牌来维护认证的客户端连接的方式解决了早期服务端存储会话的各种有状态问题。 在Istio使用中,JWT令牌生成由特定的认证服务提供,令牌验证由网格执行,彻底解耦用户业务中的认证逻辑,使应用程序专注于自身业务。基于Istio的JWT完整机制如图1所示。 图1 Istio JWT认证流程 ① 客户端连接认证服务,提供用户名和密码; ② 认证服务验证用户名和密码,生成JWT令牌,包括用户标识和过期时间等信息,并使用认证服务的私钥签名; ③ 认证服务向客户端返回生成的JWT令牌; ④ 客户端将收到的JWT令牌存储在本端,供后续请求时使用; ⑤ 客户端在向其他服务发起请求时携带JWT令牌,无需再提供用户名、密码等信息; ⑥ 网格数据面代理拦截到流量,使用配置的公钥验证JWT令牌; ⑦ 验证通过后,网格代理将请求转发给服务端; ⑧ 服务端处理请求; ⑨ 服务端返回应答数据给网格代理; ⑩ 网格数据面代理转发应答数据给调用方。 在这个过程中,重点是第六步,原来服务端的JWT认证功能迁移到了网格代理上。网格数据面从控制面配置的认证策略中获取验证JWT令牌的公钥,可以是jwks(JSON Web Key Set)上配置的公钥,也可以是从jwksUri配置的公钥地址获取到的公钥。获得公钥后,网格代理使用该公钥对认证服务私钥签名的令牌进行验证,并解开令牌中的iss,验证是否匹配认证策略中的签发者信息。验证通过的请求发送给应用程序,验证不通过则直接拒绝,不会发送给应用程序。
  • 操作步骤 登录应用服务网格控制台,确认网格是否需要续费。判断方法如下: 列表上方是否提示已超期冻结需及时续费的网格。 网格计费模式中是否存在已超期或即将到期提示。 图1 已超期提示 图2 即将到期提示 若存在已超期或即将到期的网格,单击网格右上角的图标,进入续费页面。 选择续费时长,单击“去支付”,选择支付方式后,单击“确认付款”即可成功续费。 更多信息(自动续费、导出续费清单等)请参考续费管理。
  • 结束灰度任务 当新创建的灰度版本接管全部流量后,您可以选择结束灰度任务。结束灰度任务将下线原版本,其中包含的工作负载和Istio相关配置资源会全部删除。 登录应用服务网格控制台,单击服务网格的名称,进入网格详情页面。 在左侧导航栏选择“灰度发布”,单击灰度发布任务的名称。 在“监测与处理”页面,单击灰度版本后的“全流量接管”。 单击右下角“结束灰度任务”。 在弹出的“结束灰度任务”窗口单击“确定”。 结束的灰度任务可以前往“已结束灰度任务”页签查看,状态显示为“发布成功”。
  • 取消灰度任务 当原版本接管全部流量后,您可以选择取消灰度任务。 登录应用服务网格控制台,单击服务网格的名称,进入网格详情页面。 在左侧导航栏选择“灰度发布”,单击灰度发布任务的名称。 在“监测与处理”页面,单击原版本后的“全流量接管”。 单击右下角“取消灰度任务”。也可以在灰度任务列表,单击任务右上角的图标。 在弹出的“取消灰度任务”窗口单击“确定”。 取消的灰度任务可以前往“已结束灰度任务”页签查看,状态显示为“发布取消”。
  • 修改灰度版本的流量策略 修改基于流量比例的策略 选择基于流量比例的策略时,一般会逐步加大灰度版本的流量配比,这样可以避免直接切换带来的业务风险。修改流量配比的方法如下: 登录应用服务网格控制台,单击服务网格的名称,进入网格详情页面。 在左侧导航栏选择“灰度发布”,单击金丝雀发布任务的名称。 在“配置流量策略”页面,重新输入灰度版本的流量配比。 假设将灰度版本流量配比调整至x,那么原版本的流量配比自动调整为100-x。 单击“策略下发”。 修改基于请求内容的策略 目前支持基于Cookie内容、自定义Header、Query、操作系统和浏览器的规则约束,只有满足规则约束的流量才可访问到灰度版本。实际应用时,可能会多次修改规则,从而充分验证灰度版本运行效果。 登录应用服务网格控制台,单击服务网格的名称,进入网格详情页面。 在左侧导航栏选择“灰度发布”,单击金丝雀发布任务的名称。 在“配置流量策略”页面,重新配置Cookie内容、自定义Header、Query、允许访问的操作系统或允许访问的浏览器。 单击“策略下发”。
  • 切换灰度策略类型 您可以在“基于请求内容”和“基于流量比例”的策略之间切换。策略完成切换后,之前配置的规则将全部失效,所有的流量会根据配置的新策略重新分配。 只有状态为“运行中”的任务才支持流量策略变更,版本发布完成后(即新版本完全接管旧版本流量,且旧版本已下线),将不支持重新配置流量策略。 登录应用服务网格控制台,单击服务网格的名称,进入网格详情页面。 在左侧导航栏选择“灰度发布”,单击金丝雀发布任务的名称。 在“配置流量策略”页面,切换策略类型。 单击“策略下发”。
  • 约束与限制 应用服务网格依赖集群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
  • 1.18及以后版本 1.18的访问日志提供JSON格式的内容,以如下JSON格式为例。 { "start_time": "%START_TIME%", "route_name": "%ROUTE_NAME%", "method": "%REQ(:METHOD)%", "path": "%REQ(X-ENVOY-ORIGINAL-PATH?:PATH)%", "protocol": "%PROTOCOL%", "response_code": "%RESPONSE_CODE%", "response_flags": "%RESPONSE_FLAGS%", "response_code_details": "%RESPONSE_CODE_DETAILS%", "connection_termination_details": "%CONNECTION_TERMINATION_DETAILS%", "bytes_received": "%BYTES_RECEIVED%", "bytes_sent": "%BYTES_SENT%", "duration": "%DURATION%", "upstream_service_time": "%RESP(X-ENVOY-UPSTREAM-SERVICE-TIME)%", "x_forwarded_for": "%REQ(X-FORWARDED-FOR)%", "user_agent": "%REQ(USER-AGENT)%", "request_id": "%REQ(X-REQUEST-ID)%", "authority": "%REQ(:AUTHORITY)%", "upstream_host": "%UPSTREAM_HOST%", "upstream_cluster": "%UPSTREAM_CLUSTER%", "upstream_local_address": "%UPSTREAM_LOCAL_ADDRESS%", "downstream_local_address": "%DOWNSTREAM_LOCAL_ADDRESS%", "downstream_remote_address": "%DOWNSTREAM_REMOTE_ADDRESS%", "requested_server_name": "%REQUESTED_SERVER_NAME%", "upstream_transport_failure_reason": "%UPSTREAM_TRANSPORT_FAILURE_REASON%", "pod_name": "%ENVIRONMENT(POD_NAME)%", "pod_namespace": "%ENVIRONMENT(POD_NAMESPACE)%", "mesh_id": "%ENVIRONMENT(ISTIO_META_ASM_MESH_ID)%", "cluster_id": "%ENVIRONMENT(ISTIO_META_ASM_CLUSTER_ID)%", } 其中日志标记与表1含义相同,新增字段解释见表2。 表2 1.18及以上版本istio日志新增字段解读 Log operator 解释 样例 pod_name 产生日志的pod名称 istio-ingressgateway-1-15-7-r2-599d4cf747-ngcfd pod_namespace 产生日志的pod的namespace istio-system mesh_id 网格ID 84961386-6d84-929d-98bd-c5aee93b5c88 cluster_id 集群ID 84961386-6d84-929d-98bd-c5aee93b5c88
  • 修订记录 发布日期 修订记录 2024-06-20 第四次正式发布。 新增如下章节: 设置模型鉴权 下载SDK开发Agent 配置可调用的技能的鉴权信息 创建及管理AI流 修改如下章节: 进入AI原生应用引擎 工作空间 资产中心 创建及管理Agent 2024-05-07 第三次正式发布。 新增查看模型调用记录 修改如下章节: AI原生应用引擎使用流程 进入AI原生应用引擎 创建及管理模型服务 创建及管理知识库 创建及管理Agent 创建及管理模型 调测模型 创建微调数据集 创建知识数据集 删除“接入数据”章节 2024-03-30 第二次正式发布。 同步产品框架变更刷新全文。 2023-02-08 第一次正式发布。
  • 为什么无法从云硬盘快照回滚恢复数据 如果无法从快照回滚数据,可能原因如下: 源云硬盘状态为“可用”或者“回滚数据失败”时才能回滚数据。如果源云硬盘状态为“正在使用”,请先卸载云硬盘再执行回滚数据操作,回滚成功后重新挂载云硬盘即可。 只支持回滚快照数据至源云硬盘,不支持快照回滚到其它云硬盘。 当快照在创建中时,不支持使用快照回滚数据至云硬盘。 开头为“autobk_snapshot_vbs_”、“manualbk_snapshot_vbs_”、“autobk_snapshot_csbs_”、“manualbk_snapshot_csbs_”的快照,是创建备份时系统自动生成的快照。该快照仅支持查看详细信息,无法用于回滚数据。 云耀云服务器L实例不支持卸载云硬盘,所以无法回滚数据。 父主题: 云硬盘快照问题
  • 云硬盘性能 表1 云硬盘性能数据表 参数 通用型SSD V2 云硬盘最大容量 系统盘:1024 GiB 数据盘:32768 GiB 描述 用于均衡各种事务型工作负载的价格和性能的通用SSD云硬盘 。 典型应用场景 各种主流的高性能、低延迟交互应用场景。 企业办公、虚拟桌面 大型开发测试 转码类业务 系统盘 大中型规模的数据库(SQL Server 、 Oracle 、NoSQL、PostgreSQL) 最大IOPS 128000 最大吞吐量 1000 MiB/s IOPS突发上限 NA 云硬盘IOPS性能计算公式 IOPS值由用户预配置,范围为3000~128000,具体可配置值≤(500*容量) 云硬盘吞吐量性能计算公式 吞吐量值由用户配置,范围为125~1000MiB/s,具体可配置值≤(IOPS/4) 单队列访问时延 1 ms API名称 说明: 此处API名称为云硬盘API接口中“volume_type”参数的取值,不代表底层存储设备的硬件类型。 GPSSD2
  • 计费示例 示例一:云硬盘采用包年/包月计费模式 客户在购买通用型SSD V2云硬盘时,容量选择100GiB,预配置性能为5000 IOPS、325MiBps吞吐量。 假设包年/包月容量价钱为0.5元/GiB/月,按需IOPS单价为0.0000153元/IOPS/小时,按需吞吐量单价为0.00194元/MiBps/小时。 购买1个月(30天)的总费用为:容量费用+IOPS费用+吞吐量费用=100*0.5*1+(5000-3000)*0.0000153*24*30+(325-125)*0.00194*24*30=50+22.032+279.36=351.392元 容量费用=包年/包月容量费用 IOPS费用=(预配置IOPS-基准IOPS)*IOPS单价*时长 吞吐量费用=(预配置吞吐量-基准吞吐量)*吞吐单价*时长 示例二:云硬盘采用按需计费模式 客户在购买通用型SSD V2云硬盘时,容量选择100GiB,预配置性能为5000 IOPS、325MiBps吞吐量。 假设按需容量价钱为0.000695元/GiB/小时,按需IOPS单价为0.0000153元/IOPS/小时,按需吞吐量单价为0.00194元/MiBps/小时。 购买24小时的总费用为:容量费用+IOPS费用+吞吐量费用=100*0.000695*24+(5000-3000)*0.0000153*24+(325-125)*0.00194*24=1.668+0.7344+9.312=11.7344元 容量费用=容量*容量单价*时长 IOPS费用=(预配置IOPS-基准IOPS)*IOPS单价*时长 吞吐量费用=(预配置吞吐量-基准吞吐量)*吞吐单价*时长
  • 配置预配置性能 进入购买磁盘页面。 在购买页面中,设置云硬盘的配置参数。 选择云硬盘类型为通用型SSD V2,并配置云硬盘容量。 设置IOPS。 设置吞吐量。 其他详细的参数配置,请参见购买云硬盘。 单击“立即购买”。 如果您选择的计费模式是“包年/包月”。 在“订单确认”页面,您可以再次核对云硬盘信息。 确认无误后,单击“去支付”。 在“支付”页面,根据界面提示,单击“确认付款”,页面显示“订单支付成功”。 单击“返回云硬盘控制台”,返回“云硬盘”主页面。 如果您选择的计费模式是“按需计费”。 在“规格确认”页面,您可以再次核对云硬盘信息。 确认无误后,单击“提交”,页面显示“任务提交成功”。 单击“返回磁盘列表”,返回“云硬盘”主页面。 如果您在购买通用SSD V2型云硬盘时,无法准确预测预配置性能吞吐量与IOPS配比,那么建议您采取“二一配比”方法设置性能:例如,假如您计划使用600MiB/s吞吐量,那么设置30000 IOPS;假如您计划使用1000MiB/s吞吐量,那么设置50000 IOPS。 如您在业务运行之后发现IOPS或者吞吐量无法满足业务诉求或者远超业务诉求,则可以随时调整IOPS或者吞吐量设置。
共100000条