Alauda Build of Kiali

使用 Alauda Build of Kiali

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

关于 Kiali

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

它提供:

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

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

安装 Alauda Build of Kiali

以下步骤展示如何安装 Alauda Build of Kiali。

通过 Web 控制台安装

前提条件

  • 已上传 Alauda Build of Kiali。
  • cluster-admin 身份登录 Alauda Container Platform Web 控制台。

操作步骤

  1. 在 Alauda Container Platform Web 控制台,导航至 Administrator
  2. 选择 Marketplace > OperatorHub
  3. 搜索 Alauda Build of Kiali。
  4. 找到 Alauda Build of Kiali 并点击选择。
  5. 点击 Install
  6. 点击 InstallConfirm 以安装 Operator。

验证

确认在 Installation Info 区域 Operator 安装状态显示为 Succeeded

通过 CLI 安装

前提条件

  • 已上传 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.17.1-r1  2.17.1-r1

    字段说明

    • 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.17.1-r1
    EOF

    字段说明

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

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

    关键输出

    • .status.stateUpgradePending 表示 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.17.1-r1   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

kubectl wait --for=jsonpath='{.status.phase}'=Succeeded csv --all -n kiali-operator --timeout=3m

检查 CSV 状态:

kubectl -n kiali-operator get csv

示例输出

NAME                        DISPLAY                 VERSION     REPLACES   PHASE
kiali-operator.v2.17.1-r1   Alauda Build of Kiali   2.17.1-r1              Succeeded

字段说明

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

使用 Kiali 配置监控

以下步骤展示如何将 Alauda Build of Kiali 与用户工作负载监控集成。

前提条件

操作步骤

Global 集群中获取 Alauda Container Platform 的 CA 证书:

NOTE

请在 Global 集群中执行以下命令

# ACP 的 CA 证书 - base64 编码
kubectl -ncpaas-system get secret dex.tls -o jsonpath='{.data.ca\.crt}'

输出为 base64 编码的证书,请保存该值以备后续使用。

注意:若命令返回为空,请联系管理员获取 ACP CA 证书。

从业务集群获取平台配置:

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}')
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}')

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

istio-system 命名空间创建名为 kialiSecret 用于 OpenID 认证:

kubectl create secret generic kiali --from-literal="oidc-secret=$OIDC_CLIENT_SECRET" -nistio-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

创建名为 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
  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
    resources:
      requests:
        cpu: "100m"
        memory: "64Mi"
      limits:
        cpu: "2000m"
        memory: "1Gi"
    ingress:
      enabled: true
      class_name: ${ALB_CLASS_NAME}
  external_services:
    grafana:
      enabled: false  # 由于 Grafana 不再内置于 ACP,默认禁用
    prometheus:
      # query_scope 仅多集群时需要
      # 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
      # 如果通过 Thanos 代理查询 Prometheus(使用 VictoriaMetrics 时必需),定义 thanos_proxy
      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 是平台 URL 下访问 Kiali 监控面板的路径。
  3. api_proxy 指向 erebus,用于将 ACP 用户令牌映射为 Kubernetes 令牌。
  4. api_proxy_ca_dataerebus 使用的 base64 编码 CA 证书。
  5. issuer_uridex 的 OIDC 发行者 URL。
  6. client_iddex 的 OIDC 客户端 ID。
  7. replicas 指定 Kiali 部署副本数,生产环境建议至少为 2
  8. class_name 是 Kiali ingress 的 ingress class 名称。
  9. 多集群网格中必需。<mesh_id> 应与 Istio 资源中 .spec.values.global.meshId 相同。
  10. username 引用存储在 kiali-monitoring-basic-auth Secret 中的监控 basic-auth 用户名。
  11. password 引用存储在 kiali-monitoring-basic-auth Secret 中的监控 basic-auth 密码。
  12. 如果通过 Thanos 代理查询 Prometheus(使用 VictoriaMetrics 时必需),定义 thanos_proxy
  13. url 是 Prometheus 或 VictoriaMetrics 的监控端点。
  14. i18n 指定默认语言及是否显示语言选择器。

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

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

访问 Kiali 控制台:

Kiali 资源准备就绪后,访问 Kiali 监控面板地址 <platform-url>/clusters/<cluster>/kiali

将分布式追踪平台集成至 Alauda Build of Kiali

集成分布式追踪平台后,Alauda Build of Kiali 可在 Kiali 控制台中直接可视化请求追踪。这些追踪展示了服务网格内的服务间通信,有助于识别请求路径中的延迟、失败或瓶颈。

该功能支持请求流行为分析,帮助定位根因并优化网格中服务的性能。

前提条件

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

操作步骤

  1. 更新 Kiali 资源的 spec 配置以启用追踪:

    追踪相关的 Kiali 资源 spec 配置示例

    spec:
      external_services:
        tracing:
          # query_scope 仅多集群时需要
          # query_scope:
            # istio.mesh_id: <mesh_id>
          enabled: true
          provider: jaeger
          use_grpc: true
          internal_url: "http://jaeger-prod-query.istio-system:16685/jaeger"
          # (可选)Jaeger 的公网访问 URL
          # external_url: "<platform-url>/clusters/<cluster>/istio/jaeger"
          # 若未定义 external_url,应将 disable_version_check 设为 true
          disable_version_check: true
    1. 多集群网格中必需。<mesh_id> 应与 Istio 资源中 .spec.values.global.meshId 相同。
    2. 指定是否启用追踪。
    3. 指定追踪提供者(jaegertempo)。
    4. 指定 Jaeger 或 Tempo API 的内部 URL。
  2. 将更新后的 spec 保存至 kiali_cr.yaml

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

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

    示例输出:

    kiali.kiali.io/kiali patched

验证

  1. 访问 Kiali UI。
  2. 进入 WorkloadTraces 标签页查看追踪信息。