在多集群网格中安装 Kiali
在网格中的一个集群上部署 Kiali 服务端,授予其对其他每个集群的读取权限,并创建用于在这些集群上进行身份验证的资源。
在此操作步骤中,CLUSTER1 是托管 Kiali 服务端的 East 集群,CLUSTER2 是仅提供远程集群资源的 West 集群。
如果网格跨越两个以上的集群,可以在每个额外集群上重复 West 步骤,以调整这些说明。
从 ACP 4.5 开始,ACP Monitoring for VictoriaMetrics 更名为 ACP Advanced Monitoring。从 Customer Portal 下载插件时,请搜索 ACP Advanced Monitoring。在更名之前发布的插件包上传后,平台中仍会显示 ACP Monitoring for VictoriaMetrics。
前提条件
-
您有一个跨越 East 和 West 集群的多集群网格,控制平面拓扑可以是多主模式或主节点-远程模式。例如,您可以按照安装多主多网络网格或安装主节点-远程多网络网格中的说明进行安装。
-
您已在网格中的每个集群上安装 Alauda Service Mesh Console(之前称为 Alauda Build of Kiali)operator,包括未部署 Kiali 服务端的集群。请参阅安装 Alauda Build of Kiali。
-
网格中的每个集群都使用 ACP Advanced Monitoring(之前称为 ACP Monitoring for VictoriaMetrics)收集指标,并且所有集群都向同一个 VictoriaMetrics Center 报告。请参阅 ACP Monitoring with VictoriaMetrics。
Kiali 从单个端点读取整个网格的指标。运行以下命令读取共享端点的地址:
向同一个 VictoriaMetrics Center 报告的每个集群都会返回此地址。此地址是您在
Kiali资源的spec.external_services.prometheus.url中设置的值。 -
您已按照配置 Service Mesh 监控中的说明配置指标收集。Kiali 通过 Istio 添加到这些指标中的
source_cluster和destination_cluster标签区分集群,并通过mesh_id标签筛选指标,因此每个资源的部署位置都很重要:- 在网格中的每个集群上创建
ServiceMonitor和PodMonitor对象,因为监控会分别抓取每个集群。 - 在运行控制平面的每个集群上创建
Telemetry资源,包括其mesh_id标签覆盖。在主节点-远程网格中,主节点控制平面还会配置远程集群的 sidecar;由于远程集群上的istiod服务没有端点,在远程集群上应用此资源会被validation.istio.iowebhook 拒绝。
- 在网格中的每个集群上创建
-
所有集群上的 Kiali 部署命名空间和实例名称都相同。如果更改任一默认值,请在每个集群的
Kiali资源中,将相同的值应用于spec.deployment.namespace和spec.deployment.instance_name。此操作步骤使用默认值istio-system和kiali。 -
您知道网格的
meshID以及 Istio 为每个集群使用的名称。后续步骤会将集群名称传递给--remote-cluster-name选项,并将其用作远程集群密钥的键,因此该名称必须完全匹配。根据拓扑不同,读取位置也不同:- 在多主模式网格中,每个集群都有自己的
Istio资源,其中包含spec.values.global.meshID和spec.values.global.multiCluster.clusterName。 - 在主节点-远程网格中,只有主集群的
Istio资源包含这些字段。远程集群的名称会显示在该集群自己的Istio资源中,作为spec.values.istiodRemote.injectionPath的一部分,其格式为/inject/cluster/<cluster-name>/net/<network>。
此操作步骤使用
mesh1、cluster1和cluster2。 - 在多主模式网格中,每个集群都有自己的
-
您已为
kubectl配置每个集群的上下文。以下环境变量会在整个操作步骤中使用:
操作步骤
在 East 集群上部署 Kiali server
按照使用 Kiali 配置监控在 East 集群上创建 Kiali 资源,然后添加以下多集群专用设置。
由于监控存储还包含网格外部生成的指标,因此请通过设置查询范围,将 Kiali 限制在此网格内:
- 必须与网格中每个集群的
Istio资源中的.spec.values.global.meshID匹配。Kiali 会将此标签附加到每个指标查询,因此不包含此标签的序列会被忽略。
运行以下命令应用此设置:
在 West 集群上创建仅生成远程集群资源的 Kiali 资源
创建名为 kiali-remote.yaml 的 YAML 文件,内容如下:
- 必须与 East 集群上 Kiali server 所在的命名空间相同。
- 必须与 East 集群上 Kiali server 使用的实例名称相同。Operator 会据此派生 service account 名称,因此名称不匹配会导致 server 无法进行身份验证。
- 指示 Operator 仅创建远程 Kiali server 所需的资源 — 一个
kiali-service-accountservice account,以及一个带有绑定的kiali-viewercluster role。不会在此集群上创建 Kiali server、service 或 ingress。
运行以下命令在 West 集群上应用 YAML 文件:
等待资源完成协调:
在 West 集群上创建长期有效的 service account 令牌
Kiali server 使用不会过期的 service account 令牌向远程集群进行身份验证。Kubernetes 不再自动生成此类令牌,因此请显式创建。
创建名为 kiali-svc-account-token.yaml 的 YAML 文件,内容如下:
- 将令牌绑定到第 2 步创建的 service account。对于非默认实例名称,请使用
<instance_name>-service-account。 - 使令牌控制器填充此 secret 的
token键。
运行以下命令在 West 集群上应用 YAML 文件:
获取使用平台 API 端点的 West 集群 kubeconfig
从 Alauda Container Platform Web 控制台下载 West 集群的 kubeconfig,或通过平台 API 获取:
平台 API 以 JSON 格式返回 kubeconfig,其中的 certificate-authority-data 以 PEM 块而非 base64 格式提供。直接保存响应内容并将 kubectl 指向该文件会导致 illegal base64 data at input byte 0。请先对该字段进行编码,或者改为从 Web 控制台下载 kubeconfig。
以下命令会对该字段进行编码,将文件转换为 YAML,并内联每个凭证,以便之后轻松合并。第一个命令可以安全地多次运行,因为它只会处理仍为 PEM 格式的值:
下载的 kubeconfig 包含两个上下文。请使用默认的 proxy-connect 上下文,其 server 地址格式如下:
远程集群 secret 必须通过此平台端点访问远程集群,而不能通过 direct-connect 上下文使用的集群 API server 地址访问。
平台端点同时接受 Kiali service account 令牌和已登录用户的平台令牌,而集群 API server 只接受前者。使用 direct-connect 地址时,Kiali server 仍会报告集群可访问,但每个用户范围的请求都会失败,远程集群也不会向 Kiali 控制台提供任何命名空间。有关这些症状,请参阅远程集群报告为可访问,但其命名空间未显示在控制台中。
将 proxy-connect 上下文添加到同时包含 East 集群上下文的 kubeconfig 中,使单个 kubeconfig 能够访问两个集群,然后导出其名称:
每个集群下载的 kubeconfig 都会将其上下文命名为 proxy-connect 和 direct-connect。合并多个集群的文件时,请先重命名这些上下文,避免名称冲突。
在 East 集群上创建远程集群 secret
远程集群 secret 包含一个 kubeconfig,允许 East 集群上的 Kiali server 读取 West 集群。请使用 kiali-prepare-remote-cluster.sh 脚本生成该 secret。
运行以下命令下载脚本并使其可执行:
运行以下命令执行脚本:
这些选项的作用如下:
--remote-cluster-name:Istio 用于远程集群的名称,取自.spec.values.global.multiCluster.clusterName。请始终显式设置此选项,因为脚本根据上下文派生的名称可能包含 secret 键中无效的字符。--remote-cluster-namespace:远程集群上存放 service account 及其令牌的命名空间。--kiali-resource-name:Operator 在第 2 步中创建的 service account。--process-remote-resources false:跳过创建 service account 和角色,因为Kiali资源已经对其进行管理。--process-kiali-secret true:在 East 集群的 Kiali 部署命名空间中创建 secret。--view-only false:授予 Kiali 对远程集群的写入权限。将其设置为true可将 Kiali 限制为仅对该集群执行只读操作。
成功后,脚本会报告从上下文中读取的 server 地址。Secret 的 kubectl 状态字可能因应用模式和 kubectl 版本而异(created、configured 或 serverside-applied)。
使用 --help 选项可显示脚本支持的所有选项,其中包括用于删除其创建内容的 --delete true。
Operator 会根据标签查找生成的 secret。有关注册远程集群 secret 的其他方法,请参阅注册远程集群 secret。
触发 Kiali server 的协调
Operator 在协调 Kiali 资源时,会将远程集群 secret 挂载到 Kiali server pod 中。请为该资源添加注释以启动协调:
运行以下命令,等待资源和 server 就绪:
登录 Kiali 控制台
在 <platform-url>/clusters/<east-cluster-name>/kiali 打开 East 集群的 Kiali 控制台。
验证
-
运行以下命令,确认 Kiali server 已发现每个集群:
网格中的每个集群都会显示
Accessible=true,其中恰好有一个集群显示IsKialiHome=true: -
在 Kiali 控制台中,导航到 Namespaces,确认其中列出了每个集群中的命名空间。每个命名空间卡片上都会显示集群名称。
-
导航到 Mesh,确认网格中的每个集群都已显示。控制平面的绘制方式取决于拓扑:
- 在多主模式网格中,每个集群都会在其数据平面节点旁显示自己的控制平面节点。
- 在主节点-远程网格中,只有主集群会显示控制平面节点。每个远程集群都会显示一个数据平面节点,主集群的控制平面会连接到该节点。
-
导航到 Traffic Graph,选择一个存在于多个集群中的命名空间,确认图中分别绘制了这些集群,并在它们之间显示边。启用 Display > Cluster Boxes,按集群对节点进行分组。
从 Kiali 中移除集群
操作步骤
-
从承载 Kiali server 的集群上的 Kiali deployment 命名空间中删除远程集群 secret:
NOTE如果使用
kiali-prepare-remote-cluster.sh创建了 secret,请使用相同的选项并添加--delete true再次运行该脚本。 -
删除远程集群的
Kiali资源,以移除其中的 service account 和角色:NOTE长期令牌 secret 会随其所属的 service account 一起消失,因此无需执行其他删除操作。
-
使 Kiali server 停止查找已删除的 secret:
-
对于基于标签的自动检测,触发协调:
-
对于显式声明,从
spec.clustering.clusters中移除相应条目。 -
对于一个组合 secret,无需执行任何操作。Operator 会注意到更改并重新部署 Kiali server。
-
-
如果已移除的集群拥有自己的远程集群 secret,请重新创建 Kiali server deployment,使其停止挂载已删除的 secret:
确认已移除的集群不再具有 volume:
WARNING不要跳过此步骤。仅进行协调不会从 Kiali server deployment 中移除已删除远程集群 secret 对应的 volume。正在运行的 pod 会继续提供服务,但下一次重启后会停留在
ContainerCreating。仅当所有远程集群共享一个组合 secret 时,无需执行此步骤,因为此时 volume 引用的 secret 仍然存在。
清理 Kiali
首先注销远程集群,最后删除 Kiali server,以从整个网格中移除 Kiali。如果顺序相反,Kiali server 会先于远程集群完成清理而被删除,从而遗留未使用的 service account 和角色。
操作步骤
-
按照从 Kiali 中移除集群中的说明,逐一从 Kiali 中移除所有远程集群。
NOTE下一步将删除 Kiali server,因此可以跳过会重新创建其 deployment 的步骤 4。
-
在 East 集群上删除
Kiali资源:确认 Operator 已移除 server:
示例输出
Alauda Build of Kiali Operator 会继续安装在每个集群上。如需同时移除它和 Kiali custom resource definitions,请参阅卸载 Alauda Build of Kiali。