Alauda Build of Kiali

使用 Alauda Build of Kiali

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

关于 Kiali

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

它提供以下功能:

  • 可视化 mesh 拓扑和实时流量流向
  • 了解应用健康状态和性能指标
  • 集中访问配置和验证工具
  • 与 Grafana 集成以提供指标监控面板
  • 通过 Jaeger 或 OpenTelemetry 支持分布式 tracing

这些能力使用户能够通过统一界面诊断服务行为、识别潜在问题并优化 mesh 配置。

安装 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 channel 名称
    • NAME:CSV resource 名称
    • VERSION:Operator 版本
  2. 确认 catalogSource

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

    示例输出

    platform

    这表示 kiali-operator 来自 platform catalogSource。

  3. 创建 namespace

    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 的 namespace。
    • .spec.channel:所订阅的 Operator channel。
    • .spec.installPlanApproval:审批策略(ManualAutomatic)。此处 Manual 表示安装/升级需要手动审批。
    • .spec.source:Operator catalogSource。
    • .spec.sourceNamespace:必须设置为 cpaas-system,因为平台提供的所有 catalogSources 都位于该 namespace 中。
    • .spec.startingCSV:在 Manual 审批时指定要安装的版本;如果为空,则默认使用该 channel 中的最新版本。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 与 user-workload monitoring 集成。

前提条件

操作步骤

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 certificate missing

如果命令返回空输出,请尝试使用以下命令,或联系管理员获取 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 namespace 中创建名为 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

使用 project label 为 istio-system namespace 添加标签:

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
  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  # 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(string)是访问 Kiali dashboard 的端口。
  2. web_root 是用于访问 Kiali dashboard 的 platform url 下的路径。
  3. api_proxy 指向 erebus,用于将 ACP 用户 token 映射为 Kubernetes token。
  4. api_proxy_ca_dataerebus 使用的 base64 编码 CA 证书。
  5. issuer_uridex 的 OIDC issuer URL。
  6. client_iddex 的 OIDC client ID。
  7. replicas 指定 Kiali deployment 的副本数,在生产环境中至少应为 2
  8. class_name 是 Kiali ingress 的 ingress class 名称。
  9. 多集群 mesh 中必需。<mesh_id> 应与 Istio resource 中的 .spec.values.global.meshId 保持一致。
  10. username 引用存储在 kiali-monitoring-basic-auth Secret 中的监控 basic-auth 用户名。
  11. password 引用存储在 kiali-monitoring-basic-auth Secret 中的监控 basic-auth 密码。
  12. 如果要通过 Thanos proxy 查询 Prometheus,则需要定义 thanos_proxy(使用 VictoriaMetrics 时必需)。
  13. url 是 Prometheus 或 VictoriaMetrics 的监控端点。
  14. i18n 指定默认语言以及是否显示语言选择器。

使用 envsubst 渲染 manifest 并应用配置:

# 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 resource 就绪后,访问 <platform-url>/clusters/<cluster>/kiali 以打开 Kiali dashboard。

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

完成与分布式 tracing 平台的集成后,Alauda Build of Kiali 可直接在 Kiali 控制台中可视化请求 trace。这些 trace 可帮助了解 service mesh 内部的服务间通信,并有助于识别请求路径中的延迟、故障或瓶颈。

该能力支持对请求流行为的分析,有助于在 mesh 中跨服务进行根因定位和性能优化。

前提条件

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

操作步骤

  1. 更新用于 tracing 的 Kiali resource spec 配置:

    用于 tracing 的 Kiali resource 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
          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 中必需。<mesh_id> 应与 Istio resource 中的 .spec.values.global.meshId 保持一致。
    2. 指定是否启用 tracing。
    3. 指定 tracing provider(jaegertempo)。
    4. 指定 Jaeger 或 Tempo API 的内部 URL。
    5. external_url 是 Kiali UI 在向用户显示 Tracing UI 链接时使用的 URL。为了生成有效链接,该 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. 导航到 Workload Traces 选项卡,在 Kiali UI 中查看 trace。