Advanced
Тема интерфейса

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

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

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

  • Доступ через интранет: Клиент подключается к API server кластера, используя интранетный IP-адрес. Этот метод удерживает сетевой трафик внутри внутренней сети, повышая безопасность, избегая Интернет.
  • Доступ через Интернет: API server кластера открывает публичный API, позволяя клиентам получать доступ к Kubernetes кластеру через Интернет.

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

Требования

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

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

Примечания и ограничения

При доступе к кластеру с помощью kubectl, CCE использует kubeconfig генерируемый на кластере для аутентификации. Этот файл содержит информацию о пользователе, на основе которой CCE определяет, какие ресурсы Kubernetes могут быть доступны через kubectl. Поскольку kubeconfig файл содержит сведения об идентификации пользователя, а связанные с ним разрешения наследуются при доступе к кластеру через kubectl.

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

Процедура

Перед использованием kubectl для доступа к кластеру установите kubectl на клиенте. Затем загрузите файл конфигурации kubectl из кластера и скопируйте его на клиент. После настройки клиент может получить доступ к целевому кластеру. Процесс выглядит так:

  1. Скачать kubectl.

    Подготовьте компьютер, который может подключаться к публичной сети, и установите kubectl в режиме CLI. Вы можете выполнить команду kubectl version для проверки, установлен ли kubectl. Если kubectl уже установлен, пропустите этот шаг.

    В данном разделе в качестве примера используется среда Linux для описания установки и настройки kubectl. Для подробностей см. Установка kubectl.

    1. Войдите в клиент и загрузите kubectl.
      cd /home
      curl -LO https://dl.k8s.io/release/{v1.25.0}/bin/linux/amd64/kubectl

      {v1.25.0} указывает версию. При необходимости замените её.

    2. Установить kubectl.
      chmod +x kubectl
      mv -f kubectl /usr/local/bin

  2. Получить файл конфигурации kubectl.

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

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

  3. Настроить kubectl.

    Настройка kubectl (используется Linux OS).

    1. Войдите в клиент и скопируйте файл конфигурации (например, kubeconfig.yaml) загруженный в 2 в /home каталог на вашем клиенте.
    2. Настройте файл аутентификации kubectl.
      cd /home
      mkdir -p $HOME/.kube
      mv -f kubeconfig.yaml $HOME/.kube/config
    3. Переключите режим доступа kubectl в зависимости от сценариев обслуживания.
      • Выполните эту команду для включения доступа внутри VPC:
        kubectl config use-context internal
      • Выполните эту команду для включения публичного доступа (требуется EIP):
        kubectl config use-context external
      • Выполните эту команду для включения публичного доступа и двусторонней аутентификации (требуется EIP):
        kubectl config use-context externalTLSVerify

        Для получения подробностей о двусторонней аутентификации кластера см. Двусторонняя аутентификация для доменных имён.

  4. Выполните следующую команду на клиенте, чтобы проверить, может ли клиент получить доступ к кластеру с помощью 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'.

Двусторонняя аутентификация для доменных имён

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

  • После связывания EIP с API Server двухсторонняя аутентификация по доменному имени отключается по умолчанию, если для доступа к кластеру используется 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 поле, как показано в Рисунок 1. Чтобы использовать двустороннюю аутентификацию, загрузите kubeconfig.yaml файл повторно и включите двустороннюю аутентификацию для доменных имен.

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


Общие проблемы

  • Ошибка от сервера 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).

  • Соединение с сервером localhost:8080 было отклонено

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

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

    Причина в том, что аутентификация кластера не сконфигурирована для клиента kubectl. Подробнее см. 3.