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

На протяжении всего жизненного цикла кластера Оператора 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.

Следующие шаги

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