• Русский
  • Как получить информацию об импортируемом кластере?

    Содержание

    Описание проблемы

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

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

    • Рабочая среда kubectl. Для публичных облачных кластеров настоятельно рекомендуется использовать CloudShell провайдера. Если CloudShell недоступен, рекомендуется использовать Linux или macOS.

    • Вы получили файл KubeConfig импортируемого кластера и скопировали его в среду, где установлен kubectl. Чтобы избежать работы в неправильной среде, настоятельно рекомендуется использовать один из следующих безвредных подходов:

      • Подход с резервным копированием: Сначала скопируйте существующий kubeconfig в безопасное место: cp "${HOME}/.kube/config" "${HOME}/.kube/config.backup"
      • Изолированный подход: Установите переменную окружения KUBECONFIG, указывающую на импортированный kubeconfig: export KUBECONFIG="/path/to/imported/kubeconfig"
      • Подход с объединением: Используйте слияние/уплощение kubectl без потери существующих контекстов:
        1. export KUBECONFIG="/path/to/imported/kubeconfig:${HOME}/.kube/config"
        2. kubectl config view --flatten > "${HOME}/.kube/merged.kubeconfig"
        3. export KUBECONFIG="${HOME}/.kube/merged.kubeconfig"

    Получение информации о кластере

    Получение токена кластера

    1. Выполните следующие команды:

      # [Важно] Следующие операции поддерживаются только в bash
      
      # Ручное создание секрета, привязка service account и генерация токена без срока действия
      kubectl get ns cpaas-system > /dev/null 2>&1 || kubectl create namespace cpaas-system
      kubectl create serviceaccount k8sadmin -n cpaas-system
      kubectl create clusterrolebinding k8sadmin --clusterrole=cluster-admin --serviceaccount=cpaas-system:k8sadmin
      
      cat | kubectl apply -f - <<EOF
      apiVersion: v1
      kind: Secret
      metadata:
        name: k8sadmin
        namespace: cpaas-system
        annotations:
          kubernetes.io/service-account.name: "k8sadmin"
      type: kubernetes.io/service-account-token
      EOF
      
      kubectl -n cpaas-system describe secret \
          $(kubectl -n cpaas-system get secret | (grep k8sadmin || echo "$_") | awk '{print $1}') \
          | grep -F 'token:' | awk '{print $2}'
      
      WARNING

      Эта процедура создаёт учетные данные cluster-admin с предполагаемым отсутствием срока действия.

      • По возможности используйте RBAC с минимально необходимыми правами, ограниченными нужными ресурсами.
      • Храните токен в безопасности; выполняйте ротацию/отзыв при прекращении использования.
      • Ограничьте круг лиц, имеющих доступ к объектам Secret в cpaas-system.
    2. Пример токена, полученного на предыдущем шаге, показан ниже.

    3. Проверьте срок действия токена.

      Используйте любой инструмент, поддерживающий разбор JWT токенов, чтобы проанализировать токен и подтвердить время его истечения. Если в разобранном результате присутствует поле истечения срока действия (ключ, содержащий "exp", как показано ниже), платформа не сможет управлять импортируемым кластером после этого времени. В этом случае остановитесь и обратитесь в техническую поддержку.

    TIP

    Срок действия записан как "exp": 1684486916, в исходной полезной нагрузке JWT. Значение — это UNIX timestamp, который можно преобразовать в UTC время.

    Очистка (отзыв доступа) после завершения:

    kubectl delete clusterrolebinding k8sadmin
    kubectl -n cpaas-system delete secret k8sadmin
    kubectl -n cpaas-system delete serviceaccount k8sadmin

    Получение адреса API сервера импортируемого кластера и сертификата CA

    TIP

    Если вы уже получили адрес API сервера и сертификат CA с помощью функции платформы Parse KubeConfig File на странице импортируемого кластера, пропустите этот шаг.

    1. Выполните следующие команды:

      # Просмотр адресов API сервера импортируемого кластера. Адресов может быть несколько; выберите подходящий для вашей среды.
      kubectl --kubeconfig "${KUBECONFIG:-${HOME}/.kube/config}" config view --show-managed-fields=false --flatten --raw -ojsonpath='{$.clusters..cluster.server}'
      addr_apiserver='<Выбранный адрес API сервера>'
      
      # Получение сертификата CA для указанного выше API сервера
      kubectl --kubeconfig "${KUBECONFIG:-${HOME}/.kube/config}" config view --show-managed-fields=false --flatten --raw \
          -ojsonpath="{$.clusters[?(@.cluster.server == '${addr_apiserver}')].cluster.certificate-authority-data}" \
          | { base64 -d 2>/dev/null || base64 -D; }