Поделиться через


Подключение к кластеру Nexus Kubernetes оператора Azure

На протяжении всего жизненного цикла кластера Оператора Azure Nexus Kubernetes вам в конечном итоге потребуется напрямую получить доступ к узлу кластера. Этот доступ может быть для операций обслуживания, сбора журналов или устранения неполадок. Вы получаете доступ к узлу через аутентификацию, методы которой зависят от вашего способа подключения. Вы безопасно проходите проверку подлинности на узлах кластера с помощью двух вариантов, рассмотренных в этой статье. По соображениям безопасности узлы кластера не имеют доступа к Интернету. Вместо этого, чтобы подключиться непосредственно к узлам кластера, необходимо использовать либо kubectl debug, либо IP-адрес хоста с джампбокса.

Предпосылки

  • Кластер Оператора Azure Nexus Kubernetes, развернутый в группе ресурсов в подписке Azure.
  • Закрытый ключ SSH для узлов кластера.
  • Для SSH с помощью IP-адреса узла необходимо развернуть виртуальную машину jumpbox в той же сети сетевого интерфейса контейнера (CNI), что и узлы кластера.

Доступ к узлам кластера через Azure Arc для серверов

Эта az ssh arc команда позволяет пользователям удаленно получить доступ к виртуальной машине кластера, подключенной к Azure Arc. Этот метод является безопасным способом подключения SSH к узлу кластера непосредственно из командной строки, что делает его быстрым и эффективным методом удаленного управления.

Замечание

Узлы кластера Nexus Kubernetes — это подключенные к Arc серверы по умолчанию.

  1. Задайте необходимые переменные. Замените заполнители фактическими значениями, соответствующими вашей среде Azure и кластеру Nexus Kubernetes.

    RESOURCE_GROUP="myResourceGroup" # Resource group where the Nexus Kubernetes cluster is deployed
    CLUSTER_NAME="myNexusK8sCluster" # Name of the Nexus Kubernetes cluster
    SUBSCRIPTION_ID="<Subscription ID>" # Azure subscription ID
    ADMIN_USERNAME="azureuser" # Username for the cluster administrator (--admin-username parameter value used during cluster creation)
    SSH_PRIVATE_KEY_FILE="<vm_ssh_id_rsa>" # Path to the SSH private key file
    MANAGED_RESOURCE_GROUP=$(az networkcloud kubernetescluster show -n $CLUSTER_NAME -g $RESOURCE_GROUP --subscription $SUBSCRIPTION_ID --output tsv --query managedResourceGroupConfiguration.name)
    
  2. Получите доступные имена узлов кластера.

    az networkcloud kubernetescluster show --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --subscription $SUBSCRIPTION_ID -o json | jq '.nodes[].name'
    
  3. Образец вывода:

    "mynexusk8scluster-0b32128d-agentpool1-md-7h9t4"
    "mynexusk8scluster-0b32128d-agentpool1-md-c6xbs"
    "mynexusk8scluster-0b32128d-control-plane-qq5jm"
    
  4. Задайте имя узла кластера для переменной VM_NAME.

    VM_NAME="mynexusk8scluster-0b32128d-agentpool1-md-7h9t4"
    
  5. Выполните следующую команду для SSH в узле кластера.

    az ssh arc --subscription $SUBSCRIPTION_ID \
        --resource-group $MANAGED_RESOURCE_GROUP \
        --name $VM_NAME \
        --local-user $ADMIN_USERNAME \
        --private-key-file $SSH_PRIVATE_KEY_FILE
    

Доступ к узлам с помощью API Kubernetes

Для этого метода требуется использование kubectl debug команды. Этот метод ограничен контейнерами и может пропустить более широкие системные проблемы, в отличие от SSH (с помощью az ssh arc или прямого IP-адреса), который обеспечивает полный доступ к узлам и управление ими.

Доступ к API Kubernetes через Azure Arc для Kubernetes

Замечание

При создании кластера Nexus Kubernetes, Nexus автоматически создает управляемую группу ресурсов, предназначенную для хранения ресурсов кластера; в этой группе создается ресурс кластера, подключенный к Arc.

Чтобы получить доступ к кластеру, необходимо настроить подключение к kubeconfig кластеру. После входа в Azure CLI с соответствующей сущностью Microsoft Entra вы можете получить необходимые kubeconfig сведения для взаимодействия с кластером из любого места, даже за пределами брандмауэра, который окружает его.

  1. Задать CLUSTER_NAMEи RESOURCE_GROUPSUBSCRIPTION_ID переменные.

    CLUSTER_NAME="myNexusK8sCluster"
    RESOURCE_GROUP="myResourceGroup"
    SUBSCRIPTION_ID=<set the correct subscription_id>
    
  2. Запросить управляемую группу ресурсов с использованием az и сохранить в MANAGED_RESOURCE_GROUP

     az account set -s $SUBSCRIPTION_ID
     MANAGED_RESOURCE_GROUP=$(az networkcloud kubernetescluster show -n $CLUSTER_NAME -g $RESOURCE_GROUP --output tsv --query managedResourceGroupConfiguration.name)
    
  3. Следующая команда запускает прокси-сервер connectedk8s, который позволяет подключаться к серверу API Kubernetes для указанного кластера Nexus Kubernetes.

    az connectedk8s proxy -n $CLUSTER_NAME  -g $MANAGED_RESOURCE_GROUP &
    
  4. Используйте kubectl для отправки запросов в кластер:

    kubectl get pods -A
    

    Теперь вы увидите ответ из кластера, содержащий список всех узлов.

Замечание

Если появится сообщение об ошибке "Не удалось отправить токен доступа к клиентскому прокси-серверу: Не удалось подключиться к MSI", может потребоваться выполнить az login повторную проверку подлинности с помощью Azure.

Доступ к узлам кластера через Azure Arc для Kubernetes

После подключения к кластеру через Arc для Kubernetes можно подключиться к отдельному узлу Kubernetes с помощью kubectl debug команды для запуска привилегированного контейнера на узле.

  1. Перечислите узлы в кластере Nexus Kubernetes:

    $> kubectl get nodes
    NAME                                             STATUS   ROLES           AGE    VERSION
    mynexusk8scluster-0b32128d-agentpool1-md-7h9t4   Ready    <none>          125m   v1.24.9
    mynexusk8scluster-0b32128d-agentpool1-md-c6xbs   Ready    <none>          125m   v1.24.9
    mynexusk8scluster-0b32128d-control-plane-qq5jm   Ready    <none>          124m   v1.24.9
    
  2. Запустите привилегированный контейнер на узле и подключитесь к нему:

    $> kubectl debug node/mynexusk8scluster-0b32128d-agentpool1-md-7h9t4 -it --image=mcr.microsoft.com/cbl-mariner/base/core:2.0
    Creating debugging pod node-debugger-mynexusk8scluster-0b32128d-agentpool1-md-7h9t4-694gg with container debugger on node mynexusk8scluster-0b32128d-agentpool1-md-7h9t4.
    If you don't see a command prompt, try pressing enter.
    root [ / ]#
    

    Этот привилегированный контейнер предоставляет доступ к узлу. Выполните команды на узле кластера, выполнив команду chroot /host в командной строке.

  3. Когда вы закончите отладку pod, введите команду exit, чтобы завершить интерактивный сеанс оболочки. После выхода из оболочки удалите модуль pod:

    kubectl delete pod node-debugger-mynexusk8scluster-0b32128d-agentpool1-md-7h9t4-694gg 
    

Создайте интерактивное подключение оболочки к узлу с помощью IP-адреса

Подключитесь к узлу кластера через бастион Azure

Еще одним вариантом безопасного подключения к узлу кластера Nexus Kubernetes оператора Azure является настройка прямого доступа к сети CNI кластера из виртуальной машины azure jumpbox. С помощью этого подхода можно подключиться к узлам кластера по SSH, а также выполнить kubectl команды для кластера с помощью файла kubeconfig.

Обратитесь к администратору сети, чтобы настроить прямое подключение с виртуальной машины Azure jumpbox к сети CNI кластера.

Подключение к узлу кластера с локальной машины-посредника

Установите прямой доступ к CNI кластера (сетевому интерфейсу контейнера) из вашего локального сервера-перемычки. Этот прямой доступ позволяет использовать SSH на узлах кластера и позволяет выполнять kubectl команды с помощью kubeconfig файла.

Обратитесь к администратору сети, чтобы настроить это прямое подключение к сети CNI кластера.

IP-адрес узлов кластера

Прежде чем подключиться к узлам кластера, необходимо найти IP-адрес узлов. IP-адрес узлов можно найти с помощью портала Azure или Azure CLI.

Использование командной строки Azure CLI

  1. Задайте переменные RESOURCE_GROUP, CLUSTER_NAME и SUBSCRIPTION_ID в соответствии с средой.

    RESOURCE_GROUP="myResourceGroup"
    CLUSTER_NAME="myNexusK8sCluster"
    SUBSCRIPTION_ID="<Subscription ID>"
    
  2. Выполните следующую команду, чтобы получить IP-адрес узлов.

    az networkcloud kubernetescluster show --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --subscription $SUBSCRIPTION_ID -o json | jq '.nodes[] | select(any(.networkAttachments[]; .networkAttachmentName == "defaultcni")) | {name: .name, ipv4Address: (.networkAttachments[] | select(.networkAttachmentName == "defaultcni").ipv4Address)}'
    
  3. Ниже приведен пример выходных данных команды.

    {
      "name": "mynexusk8scluster-0b32128d-agentpool1-md-7h9t4",
      "ipv4Address": "10.5.54.47"
    }
    {
      "name": "mynexusk8scluster-0b32128d-agentpool1-md-c6xbs",
      "ipv4Address": "10.5.54.48"
    }
    {
      "name": "mynexusk8scluster-0b32128d-control-plane-qq5jm",
      "ipv4Address": "10.5.54.46"
    }
    

Использование портала Azure

Чтобы найти IP-адрес виртуальной машины для SSH, выполните следующие действия.

  1. Перейдите на портал Azure и войдите с помощью имени пользователя и пароля.
  2. В поле поиска введите "Кластер Kubernetes (Оператор Nexus)" и выберите службу "Кластер Kubernetes" из списка результатов.

Снимок экрана: просмотр службы Nexus Kubernetes.

  1. Найдите конкретный ресурс "Кластер Nexus Kubernetes", который необходимо использовать для поиска.

Снимок экрана: просмотр кластера Nexus Kubernetes.

  1. Когда вы нашли нужный ресурс, сопоставив его имя с именем кластера, выберите ресурс, чтобы перейти на домашнюю страницу кластера Kubernetes.

Снимок экрана: домашняя страница кластера Nexus Kubernetes.

  1. После того как вы нашли правый ресурс, сопоставив его имя с именем кластера, перейдите в раздел "Узлы кластера Kubernetes" в меню слева.

Снимок экрана: просмотр узлов кластера Nexus Kubernetes.

  1. Выберите имя узла Kubernetes, которое вас интересует, чтобы увидеть его детали.
  2. Перейдите на вкладку "Подключенные сети", чтобы найти IP-адрес сети узла уровня 3, который используется в качестве сети CNI.

Снимок экрана: просмотр сетей узлов кластера Nexus Kubernetes.

Получение альтернативного имени субъекта (SAN) для кластера

Выполните следующие команды, чтобы получить список альтернативных имен субъектов (SAN), принятый сертификатом сервера API Kubernetes. Сначала получите доступ к узлу уровня управления с помощью Azure Arc для серверов или интерактивной оболочки с помощью IP-адреса. Это дает доступ к сертификату, используемому сервером API. Содержимое сертификата можно проверить с помощью следующей команды с привилегиями sudo:

sudo openssl x509 -in /etc/kubernetes/pki/apiserver.crt -text -noout

Каждый из сетей SA определяется префиксом DNS:. Выбирайте только те имена SAN, которые соответствуют указанному соглашению об именовании вида "clusterName-resourceGroup", потому что оно уникально по сравнению с другими SAN, такими как "kubernetes.default.svc.cluster.local".

Дальнейшие шаги

Ознакомьтесь со следующими статьями, чтобы узнать больше о кластере Azure Operator Nexus Kubernetes.