Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
На протяжении всего жизненного цикла кластера Оператора 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 серверы по умолчанию.
Задайте необходимые переменные. Замените заполнители фактическими значениями, соответствующими вашей среде 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)Получите доступные имена узлов кластера.
az networkcloud kubernetescluster show --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --subscription $SUBSCRIPTION_ID -o json | jq '.nodes[].name'Образец вывода:
"mynexusk8scluster-0b32128d-agentpool1-md-7h9t4" "mynexusk8scluster-0b32128d-agentpool1-md-c6xbs" "mynexusk8scluster-0b32128d-control-plane-qq5jm"Задайте имя узла кластера для переменной VM_NAME.
VM_NAME="mynexusk8scluster-0b32128d-agentpool1-md-7h9t4"Выполните следующую команду для 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 сведения для взаимодействия с кластером из любого места, даже за пределами брандмауэра, который окружает его.
Задать
CLUSTER_NAMEиRESOURCE_GROUPSUBSCRIPTION_IDпеременные.CLUSTER_NAME="myNexusK8sCluster" RESOURCE_GROUP="myResourceGroup" SUBSCRIPTION_ID=<set the correct subscription_id>Запросить управляемую группу ресурсов с использованием
azи сохранить вMANAGED_RESOURCE_GROUPaz account set -s $SUBSCRIPTION_ID MANAGED_RESOURCE_GROUP=$(az networkcloud kubernetescluster show -n $CLUSTER_NAME -g $RESOURCE_GROUP --output tsv --query managedResourceGroupConfiguration.name)Следующая команда запускает прокси-сервер connectedk8s, который позволяет подключаться к серверу API Kubernetes для указанного кластера Nexus Kubernetes.
az connectedk8s proxy -n $CLUSTER_NAME -g $MANAGED_RESOURCE_GROUP &Используйте
kubectlдля отправки запросов в кластер:kubectl get pods -AТеперь вы увидите ответ из кластера, содержащий список всех узлов.
Замечание
Если появится сообщение об ошибке "Не удалось отправить токен доступа к клиентскому прокси-серверу: Не удалось подключиться к MSI", может потребоваться выполнить az login повторную проверку подлинности с помощью Azure.
Доступ к узлам кластера через Azure Arc для Kubernetes
После подключения к кластеру через Arc для Kubernetes можно подключиться к отдельному узлу Kubernetes с помощью kubectl debug команды для запуска привилегированного контейнера на узле.
Перечислите узлы в кластере 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Запустите привилегированный контейнер на узле и подключитесь к нему:
$> 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в командной строке.Когда вы закончите отладку 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
Задайте переменные RESOURCE_GROUP, CLUSTER_NAME и SUBSCRIPTION_ID в соответствии с средой.
RESOURCE_GROUP="myResourceGroup" CLUSTER_NAME="myNexusK8sCluster" SUBSCRIPTION_ID="<Subscription ID>"Выполните следующую команду, чтобы получить 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)}'Ниже приведен пример выходных данных команды.
{ "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, выполните следующие действия.
- Перейдите на портал Azure и войдите с помощью имени пользователя и пароля.
- В поле поиска введите "Кластер Kubernetes (Оператор Nexus)" и выберите службу "Кластер Kubernetes" из списка результатов.
- Найдите конкретный ресурс "Кластер Nexus Kubernetes", который необходимо использовать для поиска.
- Когда вы нашли нужный ресурс, сопоставив его имя с именем кластера, выберите ресурс, чтобы перейти на домашнюю страницу кластера Kubernetes.
- После того как вы нашли правый ресурс, сопоставив его имя с именем кластера, перейдите в раздел "Узлы кластера Kubernetes" в меню слева.
- Выберите имя узла Kubernetes, которое вас интересует, чтобы увидеть его детали.
- Перейдите на вкладку "Подключенные сети", чтобы найти IP-адрес сети узла уровня 3, который используется в качестве сети CNI.
Получение альтернативного имени субъекта (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.