Alauda Build of Kiali

NOTE

从 ACP 4.5 开始,Alauda Build of Kiali 更名为 Alauda Service Mesh Console。从 Customer Portal 下载插件时,请搜索 Alauda Service Mesh Console。在更名之前发布的插件包上传后,平台中仍会显示 Alauda Build of Kiali。

使用 Alauda Build of Kiali

Alauda Build of Kiali 为部署在服务网格中的应用提供可观测性和可视化功能。将应用添加到网格后,可以使用 Alauda Build of Kiali 检查流量流向并监控网格运行情况。

关于 Kiali

Alauda Build of Kiali 源自开源的 Kiali 项目,是 Alauda Service Mesh 的管理控制台。

它提供:

  • 网格拓扑和实时流量流向的可视化
  • 应用健康状态和性能指标洞察
  • 对配置和验证工具的集中访问
  • 与 Grafana 集成以提供指标监控面板
  • 支持通过 Jaeger 或 OpenTelemetry 进行分布式追踪

这些功能使用户能够通过统一界面诊断服务运行情况、识别潜在问题并优化网格配置。

单个 Kiali 实例可以观测跨多个集群的网格。请参阅在多集群网格中安装 Kiali。

安装 Alauda Build of Kiali

以下步骤介绍如何安装 Alauda Build of Kiali。

通过 Web 控制台安装

前提条件

  • 必须已上传 Alauda Service Mesh Console(此前称为 Alauda Build of Kiali)。
  • 你已作为 cluster-admin 登录 Alauda Container Platform Web 控制台。

操作步骤

  1. 在 Alauda Container Platform Web 控制台中,前往管理员。
  2. 选择 Marketplace > OperatorHub。
  3. 搜索 Alauda Service Mesh Console(在更名前发布的插件包会显示为 Alauda Build of Kiali)。
  4. 找到 Alauda Service Mesh Console(此前称为 Alauda Build of Kiali),然后点击选择。
  5. 点击安装。
  6. 点击安装和确认以安装 Operator。

验证

确认 Installation Info 部分中的 Operator 安装状态为 Succeeded。

通过 CLI 安装

前提条件

  • 必须已上传 Alauda Service Mesh Console(此前称为 Alauda Build of Kiali)。
  • 由具有 cluster-admin 角色的集群管理员建立的活跃 ACP CLI (kubectl) 会话。

操作步骤

  1. 检查可用版本

    (
      echo -e "CHANNEL\tNAME\tVERSION"
      kubectl get packagemanifest kiali-operator -o json | jq -r '
        .status.channels[] |
        .name as $channel |
        .entries[] |
        [$channel, .name, .version] | @tsv
      '
    ) | column -t -s $'\t'

    输出示例

    CHANNEL  NAME                       VERSION
    stable   kiali-operator.v2.27.1-r0  2.27.1-r0

    字段:

    • CHANNEL:Operator 通道名称
    • NAME:CSV 资源名称
    • VERSION:Operator 版本
  2. 确认 catalogSource

    kubectl get packagemanifests kiali-operator -ojsonpath='{.status.catalogSource}'

    输出示例

    platform

    这表示 kiali-operator 来自 platform catalogSource。

  3. 创建命名空间

    kubectl get namespace kiali-operator || kubectl create namespace kiali-operator
  4. 创建 Subscription

    kubectl apply -f - <<EOF
    apiVersion: operators.coreos.com/v1alpha1
    kind: Subscription
    metadata:
      annotations:
        cpaas.io/target-namespaces: ""
      labels:
        catalog: platform
      name: kiali-operator
      namespace: kiali-operator
    spec:
      channel: stable
      installPlanApproval: Manual
      name: kiali-operator
      source: platform
      sourceNamespace: cpaas-system
      startingCSV: kiali-operator.v2.27.1-r0
    EOF

    字段说明

    • 注解 cpaas.io/target-namespaces:建议将其设置为空;空值表示集群范围安装。
    • .metadata.name:Subscription 名称(符合 DNS 规范,最长 253 个字符)。
    • .metadata.namespace:安装 Operator 的命名空间。
    • .spec.channel:订阅的 Operator 通道。
    • .spec.installPlanApproval:审批策略(Manual 或 Automatic)。此处,Manual 表示安装/升级需要手动审批。
    • .spec.source:Operator catalogSource。
    • .spec.sourceNamespace:必须设置为 cpaas-system,因为平台提供的所有 catalogSource 都位于此命名空间中。
    • .spec.startingCSV:指定手动审批时要安装的版本;如果为空,则默认为通道中的最新版本。自动审批时无需设置。
  5. 检查 Subscription 状态

    kubectl -n kiali-operator get subscriptions kiali-operator -o yaml

    关键输出

    • .status.state:UpgradePending 表示 Operator 正在等待安装或升级。
    • Condition InstallPlanPending = True:正在等待手动审批。
    • .status.currentCSV:最新订阅的 CSV。
    • .status.installPlanRef:关联的 InstallPlan;继续安装前必须先审批。

    等待 InstallPlanPending 条件变为 True:

    kubectl -n kiali-operator wait --for=condition=InstallPlanPending subscription kiali-operator --timeout=2m
  6. 审批 InstallPlan

    kubectl -n kiali-operator get installplan \
      "$(kubectl -n kiali-operator get subscriptions kiali-operator -o jsonpath='{.status.installPlanRef.name}')"

    输出示例

    NAME            CSV                         APPROVAL   APPROVED
    install-ddh84   kiali-operator.v2.27.1-r0   Manual     false

    手动审批

    PLAN="$(kubectl -n kiali-operator get subscription kiali-operator -o jsonpath='{.status.installPlanRef.name}')"
    kubectl -n kiali-operator patch installplan "$PLAN" --type=json -p='[{"op": "replace", "path": "/spec/approved", "value": true}]'

验证

等待创建 CSV;Phase 变为 Succeeded:

CSV="$(kubectl -n kiali-operator get subscription kiali-operator -o jsonpath='{.status.currentCSV}')"
kubectl -n kiali-operator wait --for=create "csv/${CSV}" --timeout=2m
kubectl -n kiali-operator wait --for=jsonpath='{.status.phase}'=Succeeded "csv/${CSV}" --timeout=3m

检查 CSV 状态:

kubectl -n kiali-operator get csv

输出示例

NAME                        DISPLAY                 VERSION       REPLACES   PHASE
kiali-operator.v2.27.1-r0   Alauda Build of Kiali   2.27.1-r0                Succeeded

字段

  • NAME:已安装的 CSV 名称
  • DISPLAY:Operator 显示名称
  • VERSION:Operator 版本
  • REPLACES:升级期间被替换的 CSV
  • PHASE:安装状态(Succeeded 表示成功)

使用 Kiali 配置监控

以下步骤介绍如何将 Alauda Build of Kiali 与监控集成。

前提条件

  • 已安装 Alauda Service Mesh。
  • 已使用 Service Mesh 配置监控。请参阅使用 Service Mesh 配置监控。
  • 已安装 Alauda Service Mesh Console(以前称为 Alauda Build of Kiali)。

操作步骤

在 Global 集群中检索 Alauda Container Platform 的 CA 证书:

NOTE

在 Global 集群中运行以下命令

# CA certificate for ACP - base64-encoded
kubectl -ncpaas-system get secret dex.tls -o jsonpath='{.data.ca\.crt}'

输出为 base64 编码的证书。请保存此值,以便在后续步骤中使用。

缺少 CA 证书

如果命令返回空输出,请尝试使用以下命令,或联系管理员获取 ACP CA 证书。

kubectl -n cpaas-system get secret dex.tls -o jsonpath='{.data.tls\.crt}'

从业务集群中检索平台配置:

export PLATFORM_URL=$(kubectl -nkube-public get configmap global-info -o jsonpath='{.data.platformURL}')
export CLUSTER_NAME=$(kubectl -nkube-public get configmap global-info -o jsonpath='{.data.clusterName}')
export ALB_CLASS_NAME=$(kubectl -nkube-public get configmap global-info -o jsonpath='{.data.systemAlbIngressClassName}')

export OIDC_ISSUER=$(kubectl -nkube-public get configmap global-info -o jsonpath='{.data.oidcIssuer}')
OIDC_CLIENT_SECRET_REF=$(kubectl -nkube-public get configmap global-info -o jsonpath='{.data.oidcClientSecretRef}')
if [ -n "$OIDC_CLIENT_SECRET_REF" ]; then
  SYSTEM_NAMESPACE=$(kubectl -nkube-public get configmap global-info -o jsonpath='{.data.systemNamespace}')
  export OIDC_CLIENT_ID=$(kubectl -n"$SYSTEM_NAMESPACE" get secret "$OIDC_CLIENT_SECRET_REF" -o go-template='{{index .data "client-id"}}' | base64 -d)
  export OIDC_CLIENT_SECRET=$(kubectl -n"$SYSTEM_NAMESPACE" get secret "$OIDC_CLIENT_SECRET_REF" -o go-template='{{index .data "client-secret"}}' | base64 -d)
else
  export OIDC_CLIENT_ID=$(kubectl -nkube-public get configmap global-info -o jsonpath='{.data.oidcClientID}')
  export OIDC_CLIENT_SECRET=$(kubectl -nkube-public get configmap global-info -o jsonpath='{.data.oidcClientSecret}')
fi

export MONITORING_URL=$(kubectl get feature monitoring -o jsonpath='{.spec.accessInfo.database.address}')

在 istio-system 命名空间中创建名为 kiali 的 Secret,用于 OpenID 身份验证:

kubectl create secret generic kiali --from-literal="oidc-secret=$OIDC_CLIENT_SECRET" -n istio-system

输出示例:

secret/kiali created

创建用于监控数据库凭据的 Secret:

SECRET_NAME=$(kubectl get feature monitoring -o jsonpath='{.spec.accessInfo.database.basicAuth.secretName}')

AUTH_USERNAME=$(kubectl -ncpaas-system get secret "$SECRET_NAME" -o jsonpath="{.data.username}" | base64 -d)
AUTH_PASSWORD=$(kubectl -ncpaas-system get secret "$SECRET_NAME" -o jsonpath="{.data.password}" | base64 -d)

kubectl create secret generic "kiali-monitoring-basic-auth" \
  --from-literal="username=$AUTH_USERNAME" \
  --from-literal="password=$AUTH_PASSWORD" \
  -n istio-system

输出示例:

secret/kiali-monitoring-basic-auth created

为 istio-system 命名空间添加项目标签:

kubectl label namespace istio-system cpaas.io/project=cpaas-system --overwrite

创建名为 kiali.yaml 的文件,内容如下。根据需要替换占位值:

kiali.yaml
apiVersion: kiali.io/v1alpha1
kind: Kiali
metadata:
  name: kiali
  namespace: istio-system
spec:
  server:
    web_port: "443"
    web_root: /clusters/${CLUSTER_NAME}/kiali
    # Set if OIDC login fails because Kiali derives the redirect_uri incorrectly
    # web_fqdn: <platform-fqdn>
    # web_schema: https
  auth:
    openid:
      api_proxy: ${PLATFORM_URL}/kubernetes/${CLUSTER_NAME}
      api_proxy_ca_data: ${PLATFORM_CA}
      insecure_skip_verify_tls: true
      issuer_uri: ${OIDC_ISSUER}
      client_id: ${OIDC_CLIENT_ID}
      username_claim: email
    strategy: openid
  deployment:
    view_only_mode: false
    replicas: 1
    # Uncomment in production, together with replicas >= 2
    # pod_disruption_budget:
    #   spec:
    #     minAvailable: 1
    resources:
      requests:
        cpu: "100m"
        memory: "64Mi"
      limits:
        cpu: "2000m"
        memory: "1Gi"
    ingress:
      enabled: true
      class_name: ${ALB_CLASS_NAME}
  external_services:
    grafana:
      enabled: false  # Since Grafana is not bundled in ACP anymore, it is disabled by default
    prometheus:
      # query_scope only required in multi cluster
      # query_scope:
      #   mesh_id: <mesh_id>
      auth:
        type: basic
        username: secret:kiali-monitoring-basic-auth:username
        password: secret:kiali-monitoring-basic-auth:password
        insecure_skip_verify: true
      # Define thanos_proxy if Prometheus is to be queried through a Thanos proxy (it is required when using VictoriaMetrics)
      thanos_proxy:
        enabled: true
        retention_period: 7d
        scrape_interval: 60s
      url: ${MONITORING_URL}
  kiali_feature_flags:
    ui_defaults:
      i18n:
        language: en
        show_selector: true
  1. web_port(字符串)是访问 Kiali 监控面板的端口。
  2. web_root 是在 platform url 下用于访问 Kiali 监控面板的路径。
  3. web_fqdn 是用于访问 Kiali 监控面板的公共域名(platform URL 的域名部分)。默认情况下,Kiali 从请求标头中获取该值;仅当派生的 OIDC redirect_uri 不正确且登录失败时,才设置此值。
  4. web_schema 是用于访问 Kiali 监控面板的公共 URL scheme,默认情况下也从请求标头中获取;请将其与 web_fqdn 一起设置。
  5. api_proxy 指向 erebus,用于将 ACP 用户令牌映射到 Kubernetes 令牌。
  6. api_proxy_ca_data 是 erebus 使用的 base64 编码 CA 证书。
  7. issuer_uri 是 dex 的 OIDC issuer URL。
  8. client_id 是 dex 的 OIDC client ID。
  9. replicas 指定 Kiali 部署的副本数,在生产环境中应至少为 2。在这种情况下,还应取消注释 pod_disruption_budget(Alauda Build of Kiali v2.27 起可用),以便在自愿排空节点时至少保持一个 Kiali pod 运行。
  10. class_name 是 Kiali ingress 的 ingress class 名称。
  11. 多集群 mesh 中必需。<mesh_id> 应与 Istio 资源中的 .spec.values.global.meshId 相同。请参阅在多集群 mesh 中安装 Kiali。
  12. username 引用存储在 kiali-monitoring-basic-auth Secret 中的监控 basic-auth 用户名。
  13. password 引用存储在 kiali-monitoring-basic-auth Secret 中的监控 basic-auth 密码。
  14. 如果需要通过 Thanos proxy 查询 Prometheus,请定义 thanos_proxy(使用 VictoriaMetrics 时必须定义)。
  15. url 是 Prometheus 或 VictoriaMetrics 的监控端点。
  16. i18n 指定默认语言以及是否显示语言选择器。

应用配置,并使用 envsubst 渲染清单:

# Replace <platform-ca> with the real base64-encoded CA certificate saved previously.
export PLATFORM_CA=<platform-ca>
  1. 将 <platform-ca> 替换为之前保存的真实 base64 编码 CA 证书。
envsubst < kiali.yaml | kubectl apply -f -

访问 Kiali 控制台:

当 Kiali 资源就绪后,通过 <platform-url>/clusters/<cluster>/kiali 访问 Kiali 监控面板。

将分布式跟踪平台与 Alauda Build of Kiali 集成

与分布式跟踪平台集成后,Alauda Build of Kiali 支持直接在 Kiali 控制台中可视化请求跟踪信息。这些跟踪信息可以帮助了解服务网格中的服务间通信,并帮助识别请求路径中的延迟、故障或瓶颈。

此功能支持分析请求流行为,有助于识别根本原因并优化网格中各服务的性能。

前提条件

  • 已安装 Alauda Service Mesh。
  • 已安装并成功配置分布式跟踪平台,例如 Alauda Build of Jaeger。

操作步骤

  1. 更新 Kiali 资源的 spec 跟踪配置:

    用于跟踪的 Kiali 资源 spec 配置示例

    kiali_cr.yaml
    spec:
      external_services:
        tracing:
          # query_scope only required in multi cluster
          # query_scope:
            # istio.mesh_id: <mesh_id>
          enabled: true
          provider: jaeger
          use_grpc: true
          use_waypoint_name: true
          internal_url: "http://jaeger-collector.jaeger-system:16685/jaeger"
          # When external_url is not defined, disable_version_check should be set to true
          disable_version_check: true
          # (Optional) Public facing URL of Jaeger
          # external_url: "<platform-url>/clusters/<cluster-name>/jaeger"
    1. 多集群网格中必需。<mesh_id> 应与 Istio 资源中的 .spec.values.global.meshId 相同。请参阅在多集群网格中安装 Kiali。
    2. 指定是否启用跟踪。
    3. 指定跟踪提供程序(jaeger 或 tempo)。
    4. 对于使用 Istio 1.30 或更高版本的 ambient 模式,此项为必需:waypoint proxy 会以 waypoint 自身的服务名称(例如 waypoint.<namespace>)报告每个 span,因此 Kiali 必须使用 waypoint 名称查找跟踪信息。此设置对 sidecar 模式工作负载没有影响,因此在任一模式下保持启用都是安全的。
    5. 指定 Jaeger 或 Tempo API 的内部 URL。
    6. Kiali UI 在向用户显示 Tracing UI 链接时使用的 external_url。此 URL 必须可供集群外部的客户端(例如浏览器)访问,才能生成有效链接。
  2. 将更新后的 spec 保存到 kiali_cr.yaml。

  3. 运行以下命令以应用配置:

    kubectl -n istio-system patch kiali kiali --type merge -p "$(cat kiali_cr.yaml)"

    输出示例:

    kiali.kiali.io/kiali patched

验证

  1. 导航到 Kiali UI。
  2. 导航到 Workload Traces 选项卡,在 Kiali UI 中查看跟踪信息。