Облачная платформаAdvanced

Доступ к кластеру с использованием kubectl

Эта статья полезна?
Язык статьи: Русский
Показать оригинал
Страница переведена автоматически и может содержать неточности. Рекомендуем сверяться с английской версией.

kubectl является инструментом командной строки, предоставляемым Kubernetes, позволяющим управлять ресурсами кластера, просматривать статус кластера, развертывать приложения и отлаживать проблемы через CLI. Чтобы получить доступ к кластеру CCE с помощью kubectl, вы можете воспользоваться одним из следующих методов:

  • Приватный доступ: Клиенты получают доступ к API‑серверу кластера через внутренний IP‑адрес, что сохраняет трафик внутри сети и повышает безопасность.
  • Публичный доступ: API‑сервер кластера предоставляет публичный API, позволяя клиентам получать доступ к кластеру Kubernetes через Интернет. При использовании Интернета для доступа вы можете выбрать, включать ли двустороннее доверие к доменному имени.
    • Если двустороннее доверие к доменному имени отключено, kubectl и API‑сервер используют однонаправленную аутентификацию сертификатов, что менее безопасно. В этом режиме только kubectl проверяет сертификат API‑сервера, тогда как API‑сервер не проверяет сертификат kubectl.
    • Если двустороннее доверие к доменному имени включено, kubectl и API server используют взаимную проверку сертификатов, что более безопасно. В этом режиме kubectl проверяет сертификат API server, а API server проверяет сертификат kubectl (указанный в client-certificate-data поле в файле kubeconfig). Для получения более подробной информации см. Two-Way Domain Name Trust.

В этом разделе используется стандартный кластер CCE в качестве примера, чтобы описать, как получить доступ к кластеру CCE с помощью kubectl.

Как это работает

kubectl получает информацию о кластере из файла kubeconfig и взаимодействует с Kubernetes API server. Этот kubeconfig файл является идентификационными данными для kubectl для доступа к кластеру Kubernetes. Он содержит адрес API server, учетные данные аутентификации пользователя и другие детали конфигурации. Имея эти данные, kubectl может взаимодействовать с кластером Kubernetes для выполнения управленческих задач.

Рисунок 1 Использование kubectl для доступа к кластеру


Требования

  • Доступен клиент, который может обращаться к Интернету.
  • Если приватный доступ используется, клиент и кластер, к которым обращаются, должны находиться в одном VPC.
  • Если публичный доступ используется, у кластера, к которому обращаются, привязан EIP. Для получения подробностей о том, как привязать EIP, см. Процедура.
    Note

    В кластере с привязанным EIP, kube-apiserver будет доступен в Интернет и может быть атакован. Чтобы решить эту проблему, вы можете настроить Advanced Anti-DDoS для EIP узла, на котором работает kube-apiserver, или настроить правила группы безопасности.

Ограничения

Файл kubeconfig содержит учетные данные аутентификации пользователя. Когда вы используете этот файл для доступа к кластеру, kubectl получает доступ к кластеру на основе учетных данных и разрешений, указанных в файле.

Для получения подробной информации о разрешениях пользователя, смотрите Разрешения кластера (IAM-based) и Разрешения пространства имен (Kubernetes RBAC-based).

Шаг 1: Скачайте kubectl

Прежде чем использовать kubectl для доступа к кластеру, установите kubectl на клиент. Запустите kubectl version команда для проверки, установлен ли kubectl. Если он установлен, пропустите этот шаг. Этот раздел использует Linux в качестве примера, чтобы описать, как установить и настроить kubectl. Для получения подробной информации, смотрите Установка kubectl.

  1. Войдите в ваш клиент и скачайте kubectl. v1.25.0 указывает версию. Замените её по необходимости.

    cd /home
    curl -LO https://dl.k8s.io/release/v1.25.0/bin/linux/amd64/kubectl

  2. Запустите следующую команду для установки kubectl:

    chmod +x kubectl
    mv -f kubectl /usr/local/bin

  3. Выполните следующую команду, чтобы проверить, установлен ли kubectl:

    kubectl version

    Если отображается информация, похожая на приведённую ниже, kubectl установлен:

    Client Version: xxx
    Kustomize Version: xxx
    Server Version: xxx

Шаг 2: Получить файл конфигурации kubectl (kubeconfig)

Получите kubeconfig (файл конфигурации kubectl) из кластера для доступа.

  1. На Обзор странице консоли кластера, найдите Информация о подключении область и нажмите Настроить рядом с kubectl.

  2. В окне, которое выдвигается справа, найдите Скачайте файл kubeconfig область, выберите Частный доступ или Публичный доступ для Текущие данные, и скопировать файл конфигурации.

    Note
    • kubeconfig используется для аутентификации кластера. Если файл будет утечён, ваш кластер может быть атакован.
    • Права Kubernetes, назначенные файлом конфигурации, загруженным пользователями IAM, такие же, как и те, которые назначены пользователям IAM в консоли CCE.
    • В Linux, если переменная среды KUBECONFIG установлена, kubectl загрузит её вместо $home/.kube/config.
    • Выданный сертификат kubeconfig остаётся действительным, даже если пользователь, запросивший его, удалён. Чтобы обеспечить безопасность кластера, вручную отзовите учётные данные доступа пользователя к кластеру. Для подробностей смотрите Отзыв учётных данных доступа к кластеру.

Шаг 3: Настройте kubectl

Файл kubeconfig хранится на клиенте, и kubectl использует его для доступа и взаимодействия с кластером.

  1. Войдите в ваш клиент.
  2. Создать kubeconfig.yaml файл. Вы можете изменить имя файла по необходимости. Файл используется для хранения информации конфигурационного файла, полученной в 2.

    vim kubeconfig.yaml

    Скопируйте информацию конфигурационного файла, полученную в 2 в kubeconfig.yaml и сохранить файл.

  3. Сохранить kubeconfig.yaml файл в $HOME/.kube/config. kubectl будет автоматически считывать его. Если вы сохраните kubeconfig.yaml файл в другом пути, задайте переменную окружения KUBECONFIG, указывающую на этот путь.

    cd /home
    mkdir -p $HOME/.kube
    mv -f ~/kubeconfig.yaml $HOME/.kube/config # Change kubeconfig.yaml to the file name.

  4. Переключите режим доступа kubectl в зависимости от сценариев обслуживания.

    • Если используется частный доступ через VPC, выполните следующую команду:
      kubectl config use-context internal
    • Если включён публичный доступ и двустороннее доверие к доменному имени не требуется, убедитесь, что кластер привязан к EIP. Затем выполните следующую команду:
      kubectl config use-context external
    • Если включён публичный доступ и двустороннее доверие к доменному имени требуется, убедитесь, что кластер привязан к EIP. Затем выполните следующую команду:
      kubectl config use-context externalTLSVerify

      Для получения более подробной информации см. Two-Way Domain Name Trust.

  5. Выполните следующую команду на клиенте, чтобы проверить, может ли клиент получить доступ к кластеру с помощью kubectl:

    kubectl cluster-info # Check the cluster information.

    Если отображается следующая информация, клиент может получить доступ к кластеру с помощью kubectl:

    Kubernetes control plane is running at https://xx.xx.xx.xx:5443
    CoreDNS is running at https://xx.xx.xx.xx:5443/api/v1/namespaces/kube-system/services/coredns:dns/proxy
    To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.

Two-Way Domain Name Trust

Двустороннее доверие к доменному имени — это механизм взаимной аутентификации, который проверяет подлинность как клиента, так и сервера. Этот режим повышает безопасность между кластерами и клиентами, предотвращая несанкционированный доступ.

  • После привязки EIP к API серверу, двустороннее доверие к доменному имени по умолчанию отключается, если для доступа к кластеру используется kubectl. Вы можете выполнить kubectl config use-context externalTLSVerify для включения двухстороннего доверия доменных имён.
  • Когда EIP привязывается к кластеру или отвязывается от него, либо настраивается или обновляется пользовательское доменное имя, адрес доступа к кластеру (включая привязанный к кластеру EIP и все пользовательские доменные имена, настроенные для кластера) будет добавлен в сертификат сервера кластера.
  • Асинхронная синхронизация кластера занимает около 5–10 минут. Вы можете просмотреть результат синхронизации в Синхронизация сертификата в Записи операций.
  • Для кластера с привязанным EIP, если при использовании двухстороннего доверия доменных имён аутентификация не проходит (x509: certificate is valid), привяжите EIP снова и загрузите kubeconfig.yaml снова.
  • Если двухстороннее доверие доменных имён не поддерживается, kubeconfig.yaml содержит "insecure-skip-tls-verify": true поле, как показано в Рисунок 2. Чтобы использовать двустороннее доверие к доменным именам, загрузите kubeconfig.yaml файл снова и включите двустороннее доверие к доменным именам.

    Рисунок 2 Двустороннее доверие отключено для доменных имен


Common Issues

  • Ошибка от сервера Forbidden

    Когда вы используете kubectl для создания или запроса ресурсов Kubernetes, возвращается следующий вывод:

    # kubectl get deploy Error from server (Forbidden): deployments.apps is forbidden: User "0c97ac3cb280f4d91fa7c0096739e1f8" cannot list resource "deployments" in API group "apps" in the namespace "default"

    Причина в том, что у пользователя нет прав для работы с ресурсами Kubernetes. Подробности о том, как назначать права, см. Разрешения пространства имён (Kubernetes RBAC-based).

  • Подключение к серверу localhost:8080 было отклонено

    Когда вы используете kubectl для создания или запроса ресурсов Kubernetes, возвращается следующий вывод:

    The connection to the server localhost:8080 was refused - did you specify the right host or port?

    Причина в том, что аутентификация кластера не настроена для клиента kubectl. Для получения деталей см Шаг 2: Получите файл конфигурации kubectl (kubeconfig).