• Русский
  • 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 и служит консолью управления для Alauda Service Mesh.

    Он предоставляет:

    • Визуализацию топологии mesh и потока трафика в реальном времени
    • Информацию о состоянии приложений и метриках производительности
    • Централизованный доступ к инструментам конфигурации и валидации
    • Интеграцию с Grafana для панелей метрик
    • Поддержку распределенного трассирования через Jaeger или OpenTelemetry

    Эти возможности позволяют пользователям анализировать поведение сервисов, выявлять потенциальные проблемы и оптимизировать конфигурацию mesh из единого интерфейса.

    Установка Alauda Build of Kiali

    Ниже приведены шаги по установке Alauda Build of Kiali.

    Установка через веб-консоль

    Предварительные требования

    • Alauda Build of Kiali должен быть загружен.
    • Вы вошли в веб-консоль Alauda Container Platform как cluster-admin.

    Процедура

    1. В веб-консоли Alauda Container Platform перейдите в раздел Administrator.
    2. Выберите Marketplace > OperatorHub.
    3. Найдите Alauda Build of Kiali.
    4. Найдите Alauda Build of Kiali и щелкните, чтобы выбрать его.
    5. Нажмите Install.
    6. Нажмите Install и Confirm, чтобы установить Operator.

    Проверка

    Убедитесь, что статус установки Operator отображается как Succeeded в разделе Installation Info.

    Установка через CLI

    Предварительные требования

    • Alauda Build of Kiali должен быть загружен.
    • Активная сессия ACP CLI (kubectl) от администратора кластера с ролью cluster-admin.

    Процедура

    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 поступает из catalogSource platform.

    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: Namespace, в котором будет установлен Operator.
      • .spec.channel: Канал Operator, на который выполняется подписка.
      • .spec.installPlanApproval: Стратегия утверждения (Manual или Automatic). В данном случае Manual требует ручного утверждения для установки/обновления.
      • .spec.source: catalogSource Operator.
      • .spec.sourceNamespace: Должно быть установлено в cpaas-system, поскольку все catalogSource, предоставляемые платформой, находятся в этом namespace.
      • .spec.startingCSV: Указывает версию для установки при Manual approval; если поле пустое, по умолчанию используется последняя версия в канале. Для Automatic не требуется.
    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.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 с мониторингом пользовательских workload.

    Предварительные требования

    Процедура

    Получите CA-сертификат для Alauda Container Platform в кластере Global:

    NOTE

    Выполните следующую команду в кластере Global

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

    Вывод представляет собой сертификат в формате base64. Сохраните это значение для использования на следующих шагах.

    CA certificate missing

    Если команда возвращает пустой вывод, попробуйте использовать следующую команду или обратитесь к администратору, чтобы получить CA-сертификат ACP.

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

    Создайте Secret с именем kiali в namespace istio-system для аутентификации 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

    Добавьте к namespace 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
      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.
    2. web_root — путь в platform url для доступа к панели Kiali.
    3. api_proxy указывает на erebus для сопоставления токенов пользователя ACP с токенами Kubernetes.
    4. api_proxy_ca_data — CA-сертификат в формате base64, используемый erebus.
    5. issuer_uri — URL OIDC issuer для dex.
    6. client_id — OIDC client ID для dex.
    7. replicas задает количество реплик для развертывания Kiali; в production-среде должно быть не менее 2.
    8. class_name — имя ingress class для ingress Kiali.
    9. Требуется в mesh с несколькими кластерами. <mesh_id> должен совпадать со значением .spec.values.global.meshId в ресурсе Istio.
    10. username ссылается на имя пользователя basic-auth мониторинга, хранящееся в Secret kiali-monitoring-basic-auth.
    11. password ссылается на пароль basic-auth мониторинга, хранящийся в Secret kiali-monitoring-basic-auth.
    12. Определите thanos_proxy, если к Prometheus требуется обращаться через proxy Thanos (это необходимо при использовании VictoriaMetrics).
    13. url — это endpoint мониторинга для Prometheus или VictoriaMetrics.
    14. i18n задает язык по умолчанию и определяет, нужно ли показывать переключатель языка.

    Примените конфигурацию, сформировав манифест с помощью envsubst:

    # Replace <platform-ca> with the real base64-encoded CA certificate saved previously.
    export PLATFORM_CA=<platform-ca>
    1. Замените <platform-ca> на реальный CA-сертификат в формате base64, сохраненный ранее.
    envsubst < kiali.yaml | kubectl apply -f -

    Откройте консоль Kiali:

    Когда ресурс Kiali будет готов, откройте панель Kiali по адресу <platform-url>/clusters/<cluster>/kiali.

    Интеграция платформы распределенного трассирования с Alauda Build of Kiali

    После интеграции с платформой распределенного трассирования Alauda Build of Kiali позволяет визуализировать трассировки запросов непосредственно в консоли Kiali. Эти трассировки дают представление о межсервисном взаимодействии внутри service mesh и помогают выявлять задержки, сбои или узкие места на путях запросов.

    Эта возможность поддерживает анализ поведения потока запросов, помогая в определении первопричин и оптимизации производительности сервисов в mesh.

    Предварительные требования

    • Установлен Alauda Service Mesh.
    • Установлена и успешно настроена платформа распределенного трассирования, например Alauda Build of Jaeger.

    Процедура

    1. Обновите конфигурацию spec ресурса Kiali для трассирования:

      Пример конфигурации spec ресурса Kiali для трассирования

      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> должен совпадать со значением .spec.values.global.meshId в ресурсе Istio.
      2. Указывает, включено ли трассирование.
      3. Указывает провайдера трассирования (jaeger или tempo).
      4. Указывает внутренний URL для API Jaeger или Tempo.
      5. external_url, который Kiali UI использует при отображении ссылок Tracing UI для пользователя. Этот 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. Перейдите в UI Kiali.
    2. Перейдите на вкладку Workload Traces, чтобы просмотреть трассировки в UI Kiali.