云服务器内容精选

  • 如何为集群开放命名空间注入? 为集群的命名空间注入sidecar时,若集群未开放命名空间注入,请参考如下指导修改集群配置: 通过kubectl连接集群。 执行kubectl get iop -nistio-system,查询iop资源。 若回显如下,表示存在iop资源,请执行3。 若回显如下,表示不存在iop资源,请执行4。 执行kubectl edit iop -nistio-system data-plane,修改autoInject配置项。其中,data-plane为上一步查询的iop资源名称,请替换为实际值。 global: defaultPodDisruptionBudget: enabled: true hub: *.*.*.*:20202/asm logging: level: default:info meshID: test-payment multiCluster: clusterName: test-yy network: test-yy-network proxy: autoInject: enabled remotePilotAddress: *.*.*.* tag: 1.8.6-r1-20220512225026 执行kubectl edit cm -nistio-system istio-sidecar-injector,修改istio-sidecar-injector配置项。 data: config: |- policy: enabled 父主题: 网格管理
  • 金丝雀升级失败常见场景及解决方案 进行金丝雀升级时,升级失败的常见场景和解决方案: CRD检查失败。 解决办法:新版本Istio 将不支持部分CRD,包括:clusterrbacconfigs 、serviceroles 、servicerolebindings 、policies。若您在当前版本存在即将废弃的资源,则需要删除后再升级。 升级前检查网关配置信息时,Istio 网关标签错误。 解决办法:Istio 网关标签(metchLabels)必须为 {app: istio-ingressgateway, istio: ingressgateway}。 升级前插件检查失败。 解决办法:ASM从1.8版本开始不再支持如下插件(tracing,kiali,grafana,prometheus)部署,升级前需要将上述插件卸载。您可以自行安装开源版本插件,或者使用APM。 升级前集群状态检查任务失败。 解决办法:升级前会检查集群状态,若集群状态异常则无法进行网格升级。 升级前资源检查任务失败。 解决办法:金丝雀升级需要有充足资源。 升级前集群版本检查任务失败。 解决办法:网格支持的版本如下: 网格版本 支持的集群版本 1.3 1.13,1.15,1.17,1.19 1.6 1.15,1.17 1.8 1.15,1.17,1.19,1.21 1.13 1.21,1.23 1.15 1.21,1.23,1.25,1.27 1.18 1.25,1.27,1.28 升级前组件亲和性检查失败。 解决办法:若您从非金丝雀版本升级到金丝雀版本,打了istio:master labels的节点数量小于两倍的istiod/ingressgateway/egressgateway 数量,则需要将节点数量扩大到两倍或者将istiod、ingressgateway、egressgateway pod反亲和性设置为尽量满足。 方法一:增加添加istio:master节点,可以从CCE console上进行操作。 方法二:修改pod反亲和策略,可在CCE界面修改yaml。 preferredDuringSchedulingIgnoredDuringExecution: - weight: 1 podAffinityTerm: labelSelector: matchExpressions: - key: app operator: In values: - istiod (如果是ingressgateway则为istio-egressgateway、istio-ingressgateway) namespaces: - istio-system topologyKey: kubernetes.io/hostname 或者在CCE界面升级设置工作负载反亲和性,改为尽量满足。 升级前命名空间自动注入检查失败。 解决办法:若您从专有网格迁移至基础网格,命名空间存在已经注入的pod,但是该命名空间未开启自动注入,则需要开启该命名空间自动注入。 父主题: 网格管理
  • 操作步骤 登录应用服务网格控制台,单击服务网格的名称,进入网格详情页面。 在左侧导航栏选择“网关管理”,单击“添加网关”。 配置网关参数。 网关名称 请输入网关的名称。由小写字母、数字和中划线(-)组成,且必须以小写字母开头,小写字母或数字结尾,长度范围为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 服务外网访问地址
  • 操作步骤 登录应用服务网格控制台,单击服务网格的名称,进入网格详情页面。 在左侧导航栏选择“网关管理”,在需要添加路由的网关所在行,单击操作列的“添加路由”,配置如下参数。 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。 同一网关下的URL配置不能相同。 命名空间 服务网关所在的命名空间。 目标服务 添加网关的服务,直接在下拉框中选择。目标服务会根据对应的网关协议进行过滤,过滤规则请参见添加路由时,为什么选不到对应的服务?。 配置诊断失败的服务无法选择,需要先根据手动修复项或自动修复项进行修复。 访问端口 仅显示匹配对外协议的端口。 重写 (对外协议为HTTP/HTTPS时可配置) 重写HTTP/HTTPS的URI和Host/Authority头,于转发前执行。默认关闭。开启后,需要配置如下参数: URI:使用此值重写URI的路径(或前缀),如果原始URI是基于前缀匹配,那么将替换相应匹配的前缀。 Host/Authority头:使用此值重写HTTP/HTTPS的Host/Authority头。 域名单独配置路由 为网关中某个域名单独配置路由规则。 图1 添加路由 配置完成后,单击“确定”。
  • 升级路径 网格类型 源版本 目标版本 升级方式 企业版 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
  • 金丝雀升级原理 ASM基础版网格支持金丝雀升级,金丝雀升级过程中将允许新老网格控制面同时存在,通过在命名空间打上版本对应的标签,可以选择一部分sidecar重启,并连接上新版本的控制面,待所有sidecar都正常连接到新控制面之后下面老版本网格的控制面。 需要注意的是,在部署新网格版本控制面时,istio-ingressgateway和istio-egressgatway的新版本也会同时部署,新老网格版本的网关将同时工作。
  • 操作步骤 登录应用服务网格控制台,确认网格是否需要升级版本。判断方法如下: 列表上方是否提示可升级版本的网格。 网格名称右侧是否存在“可升级”提示。 若存在可升级版本的网格,单击该网格名称,进入网格详情页面。 在左侧导航栏选择“网格配置”,单击“升级”页签。 根据升级路径选择合适的升级方式完成网格升级。 基础版本升级 升级详情请查看金丝雀升级。 企业版补丁更新 单击“补丁更新”,在弹出的提示框中单击“确定”。 图1 补丁更新
  • 约束与限制 应用服务网格依赖集群CoreDNS的域名解析能力,请确保集群拥有足够资源,且CoreDNS插件运行正常。 集群启用Istio时,需要开通node节点(计算节点/工作节点)所在安全组的入方向7443端口规则,用于Sidecar自动注入回调。如果您使用CCE创建的默认安全组,此端口会自动开通。如果您自建安全组规则,请手动开通7443端口,以确保Istio自动注入功能正常。 请根据下表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
  • 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,该如何配置?进行配置。 对于1.8.4-r1及之前(所有1.3、1.6)版本的网格,建议确认工作负载是否包含注解:sidecar.istio.io/inject: 'true'。如未包含,请在spec.template.metadata.annotations字段下添加: annotations: sidecar.istio.io/inject: 'true'
  • 配置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最大值:也称内存限制,表示容器能使用的内存最大值。当内存使用率超出设置的内存限制值时,该实例可能会被重启进而影响工作负载的正常使用。
  • 添加IPv4/IPv6双栈网关 登录ASM控制台,在网格列表页面单击已经开启IPv6双栈的网格名称,单击“网关管理-添加网关”。网关参数如下填写 访问方式: 选择“DualStack"。 负载均衡: 选择独享型,选中的独享型ELB需要有IPv6地址。 其他配置参数根据实际情况填写。 当前IPv4/IPv6双栈网关添加IPv6外部访问地址时,只支持添加域名,通过域名访问,不支持添加IPv6地址访问。
  • 约束与限制 支持启用双栈网格的约束。 网格类型 Istio版本 支持启用的集群类型 集群网络类型 其他说明 基础版 1.18及以上 CCE Turbo集群 云原生网络2.0 集群需要已启用IPv6,请参考通过CCE搭建IPv4/IPv6双栈集群 支持创建IPv4/IPv6网关的约束。 网格类型 Istio版本 支持启用的ELB类型 ELB规格 其他说明 基础版 1.18及以上 独享型ELB 4层网络型 ELB需要配置IPv6地址 您的网格开启IPv4/IPv6双栈后不支持关闭, 未开启双栈的网格也不支持创建完成之后开启双栈。 您低版本的网格升级到1.18及以上时,不支持升级后开启IPv4/IPv6双栈。
  • 获取镜像包 以root用户登录虚拟机。 获取asm-proxy-1.8.4镜像包。 asm-proxy-1.8.4镜像包存放在SWR镜像仓库中,使用如下命令拉取镜像(x86和arm架构的命令相同)。 docker pull SWR镜像仓库地址/istio/asm-proxy:1.8.4 SWR镜像仓库地址的获取方式如下: 在容器镜像服务控制台“总览”页面单击右上角的“登录指令”,弹出“登录指令”对话框,指令末尾的域名即为SWR镜像仓库地址,形式为swr.***.com。
  • 启动前检查 以root用户登录虚拟机。 检查证书文件信息。 ls -l /opt/asm_proxy/certs/ 以下为预期结果: -rw------- 1 root root 757 Jan 24 10:41 istio-token -rw------- 1 root root 1789 Jan 24 10:41 root-cert.pem 检查启动参数文件信息。 cat /opt/asm_proxy/asm_proxy.env 以下为预期结果(具体值会不同,确保不为空): ISTIO_PILOT_ADDR=10.252.2.36 ISTIO_META_CLUSTER_ID=cluster-vm ISTIO_META_MESH_ID=e256c79c-8b13-11ec-94e9-0255ac10069a TRACING_ZIPKIN_ADDRESS=otel-collector.monitoring.svc.cluster.local:9411 NS=vmns SERVICE_ACCOUNT=vmsa ISTIO_SERVICE_CIDR=10.233.0.0/16 POD_NAME=vmapp1
  • 配置同步 方案一 手动同步网格配置(推荐) 手动在新建的网格上添加网关路由,并同步1.0企业版网格配置。 方案二 使用备份网格资源还原配置 查看企业版网格网关使用了几个ELB,使用新建的几个ELB进行替换,如下图所示使用了两个ELB: ELB1:(3dbb4787-75c1-42f0-897a-1f683f7e89a0)* .*.*.* ELB2:(e60fdaa7-3398-4a19-8bd1-d53598c6917e)* .*.*.* 新建两个ELB。 newELB1:(caf6ec4a-2fa8-42ae-bdfb-388f8b13778a)* .*.*.* newELB2:(792c0a3d-190d-413d-a5b9-5c1ac3fe3705)* .*.*.* 将准备工作中备份的istio 配置文件拷贝一份到新集群节点上, 执行如下命令: #查看老ELB IP grep -i "老ELB IP" *.yaml #ELB IP 替换 sed -i 's/老ELB IP/新ELB IP/g' *.yaml #ELB ID 替换 sed -i 's/老ELB ID/新ELB ID/g' *.yaml #替换clusterID sed -i 's/老clusterID/新clusterID/g' *.yaml #替换CluseterName sed -i 's/老CluseterName/新CluseterName/g' *.yaml #替换完成后查看 grep -i "新ELB IP" *.yaml grep -i "新ELB ID" *.yaml grep -i "新clusterID" *.yaml grep -i "新CluseterName" *.yaml 替换完成后如下所示: 将准备工作中备份的配置文件在新网格中恢复,若未配置kubectl命令,可参考CCE配置kubectl 。 kubectl create -f all-svc.yaml //kubectl create -f all-secret.yaml kubectl create -f all-vs.yaml kubectl create -f all-dr.yaml kubectl create -f all-gw.yaml kubectl create -f all-se.yaml kubectl create -f all-ef.yaml kubectl create -f all-sidecar.yaml kubectl create -f all-we.yaml kubectl create -f all-wg.yaml kubectl create -f all-pa.yaml kubectl create -f all-ra.yaml kubectl create -f all-ap.yaml kubectl create -f user-all-svc.yaml kubectl create -f user-all-secret.yaml 若出现“Error from server (AlreadyExists): xxxxx already exists” 已存在的报错则忽略。 删除新版本无用配置。 若源版本是1.6企业版则执行如下命令: kubectl -nistio-system delete svc istiod-remote kubectl -nistio-system delete svc istiod-elb kubectl -nistio-system delete vs istiod 若源版本是1.8企业版则执行如下命令: kubectl -nistio-system delete envoyfilter metadata-exchange-1.6 kubectl -nistio-system delete envoyfilter metadata-exchange-1.7 kubectl -nistio-system delete envoyfilter metadata-exchange-1.8 kubectl -nistio-system delete envoyfilter stats-filter-1.6 kubectl -nistio-system delete envoyfilter stats-filter-1.7 kubectl -nistio-system delete envoyfilter stats-filter-1.8 kubectl -nistio-system delete envoyfilter tcp-metadata-exchange-1.6 kubectl -nistio-system delete envoyfilter tcp-metadata-exchange-1.7 kubectl -nistio-system delete envoyfilter tcp-metadata-exchange-1.8 kubectl -nistio-system delete envoyfilter tcp-stats-filter-1.6 kubectl -nistio-system delete envoyfilter tcp-stats-filter-1.7 kubectl -nistio-system delete envoyfilter tcp-stats-filter-1.8 kubectl -nistio-system delete svc istiod-remote kubectl -nistio-system delete svc istiod-elb kubectl -nistio-system delete vs istiod 验证业务功能若出现服务异常场景,单击处理,查看异常错误。 在CCE service页面修改