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 Build of Kiali。
  • 你已作为 cluster-admin 登录 Alauda Container Platform Web 控制台。

操作步骤

  1. 在 Alauda Container Platform Web 控制台中,导航至 管理员
  2. 选择 Marketplace > OperatorHub
  3. 搜索 Alauda Build of Kiali。
  4. 找到 Alauda Build of Kiali,然后单击以选中它。
  5. 单击 安装
  6. 单击 安装确认 以安装 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.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

    字段说明

    • 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.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

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.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 与监控集成。

前提条件

操作步骤

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 命名空间中创建名为 kialiSecret,用于 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 是用于访问 Kiali 监控面板的平台 URL 下的路径。
  3. web_fqdn 是用于访问 Kiali 监控面板的公共域名(平台 URL 的域名部分)。默认情况下,Kiali 会从请求标头中推导该值;仅当推导出的 OIDC redirect_uri 不正确且登录失败时才设置此值。
  4. web_schema 是用于访问 Kiali 监控面板的公共 URL 方案,默认情况下同样从请求标头中推导;请将其与 web_fqdn 一起设置。
  5. api_proxy 指向 erebus,用于将 ACP 用户令牌映射为 Kubernetes 令牌。
  6. api_proxy_ca_dataerebus 使用的经过 base64 编码的 CA 证书。
  7. issuer_uridex 的 OIDC issuer URL。
  8. client_iddex 的 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. 指定跟踪提供程序(jaegertempo)。
    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 中查看跟踪信息。