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


Доступ к частному кластеру Службы Azure Kubernetes (AKS), используя функцию invoke command или run command.

При доступе к частному кластеру Службы Azure Kubernetes (AKS) необходимо подключиться к кластеру из виртуальной сети кластера (VNet), одноранговой сети или настроенной частной конечной точки. Для таких подходов требуется дополнительная настройка, например настройка VPN или Express Route.

С помощью Azure CLI можно использовать command invoke для доступа к частным кластерам без необходимости настройки VPN или Express Route. command invoke позволяет удаленно вызывать команды, такие как kubectl и helmв частном кластере, через API Azure без прямого подключения к кластеру. Действия RBAC Microsoft.ContainerService/managedClusters/runcommand/action и Microsoft.ContainerService/managedClusters/commandResults/read управляют разрешениями для использования command invoke.

С помощью портал Azure можно использовать функцию Run command для выполнения команд в частном кластере. Эта Run command функция использует те же command invoke функции для выполнения команд в кластере. Модуль pod, созданный с помощью Run command, предоставляет kubectl и helm для работы вашего кластера. jq, , xargsgrepи awk доступны для поддержки Bash.

Подсказка

Вы можете использовать Azure Copilot для выполнения kubectl команд на портале Azure. Дополнительные сведения см. в статье "Работа с кластерами AKS эффективно с помощью Azure Copilot".

Предпосылки

Требования к системе и разрешениям

Тип требования Specification Как проверить
Версия Azure CLI 2.24.0 или более поздняя версия Используйте команду az --version, чтобы проверить установленную версию.
Частный кластер AKS Должен уже существовать Если у вас нет частного кластера, выполните действия, описанные в разделе "Создание частного кластера AKS".
Действия RBAC Microsoft.ContainerService/managedClusters/runcommand/action и Microsoft.ContainerService/managedClusters/commandResults/read. Проверьте на странице контроля доступа на портале Azure (IAM) или используйте команду Azure CLI az role assignment list.

Запустите команду спецификаций ресурсов pod

Тип ресурса Ценность Воздействие
Запросы ЦП 200 м Минимальный резерв ЦП для командной капсулы
Запросы памяти 500 МиБ Минимальный объем памяти, зарезервированный для командного модуля
Ограничения ЦП 500 м Максимальное количество ЦП, доступное для командного модуля pod
Ограничения памяти 1Gi Максимальный объем памяти, доступный для командного модуля pod
Время ожидания API Azure Resource Manager (ARM) 60 секунд Максимальное время планирования pod
Ограничение размера выходных данных 512 кб Максимальный размер выходных данных команды

Ограничения и рекомендации

Область разработки

  • Не для программного доступа: используйте бастион, VPN или ExpressRoute для автоматических вызовов API.
  • Зависимость планирования Pod'ов: для этого необходимо достаточно ресурсов кластера (см. спецификации ресурсов).
  • Ограничения выходных данных: только exitCode и text , нет сведений на уровне API.
  • Ограничения сети применяются: с учетом ограничений на сетевые и кластерные ресурсы, а также на безопасность.

Потенциальные точки сбоя

  • Сбой планирования pod, если узлы ограничены ресурсами.
  • Время ожидания API ARM (60 секунд), если модуль pod не может быть запланирован быстро.
  • Усечение выходных данных, если ответ превышает ограничение в 512 кб.

Используйте command invoke в приватном кластере AKS с помощью Azure CLI

  • Задайте переменные среды для группы ресурсов и имени кластера, которые будут использоваться в последующих командах.

    export AKS_RESOURCE_GROUP="<resource-group-name>"
    export AKS_CLUSTER_NAME="<cluster-name>"
    

    Эти переменные среды позволяют выполнять команды AKS без необходимости переписывания их имен.

Использование command invoke для выполнения одной команды

  • Выполните одну команду в кластере с помощью az aks command invoke команды и --command параметра, чтобы указать команду для выполнения. В следующем примере выполняется получение pods в kube-system пространстве имен.

    az aks command invoke \
      --resource-group $AKS_RESOURCE_GROUP \
      --name $AKS_CLUSTER_NAME \
      --command "kubectl get pods -n kube-system"
    

Использование command invoke для выполнения нескольких команд

  • Выполните несколько команд в кластере с помощью az aks command invoke команды и --command параметра, чтобы указать команды для выполнения. В следующем примере добавляется репозиторий диаграмм Bitnami Helm, обновляется репозиторий и устанавливается диаграмма nginx .

    az aks command invoke \
      --resource-group $AKS_RESOURCE_GROUP \
      --name $AKS_CLUSTER_NAME \
      --command "helm repo add bitnami https://charts.bitnami.com/bitnami && helm repo update && helm install my-release bitnami/nginx"
    

Использование command invoke для выполнения команд с вложенным файлом

Если вы хотите выполнить команду с присоединенным файлом, файл должен существовать и быть доступным в текущем рабочем каталоге. В следующем примере мы создадим минимальный файл развертывания для демонстрации.

  1. Создайте файл манифеста Kubernetes с именем deployment.yaml. В следующем примере файл развертывания создаёт pod nginx.

    cat <<EOF > deployment.yaml
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-demo
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: nginx-demo
      template:
        metadata:
          labels:
            app: nginx-demo
        spec:
          containers:
          - name: nginx
            image: nginx:1.21.6
            ports:
            - containerPort: 80
    EOF
    
  2. Примените файл развертывания к кластеру, используя команду az aks command invoke с параметром --file чтобы прикрепить файл. В следующем примере файл deployment.yaml применяется к пространству имен default.

    az aks command invoke \
      --resource-group $AKS_RESOURCE_GROUP \
      --name $AKS_CLUSTER_NAME \
      --command "kubectl apply -f deployment.yaml -n default" \
      --file deployment.yaml
    

Использование command invoke команд для выполнения всех файлов в текущем каталоге

Примечание.

Используйте только небольшие, необходимые файлы, чтобы избежать превышения ограничений размера системы.

В следующем примере мы создадим два минимальных файла развертывания для демонстрации.

  1. Создайте два файла манифеста Kubernetes с именем deployment.yaml и configmap.yaml. В следующем примере файлы развертывания предназначены для развертывания pod nginx и создания ConfigMap с приветственным сообщением.

    cat <<EOF > deployment.yaml
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-demo
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: nginx-demo
      template:
        metadata:
          labels:
            app: nginx-demo
        spec:
          containers:
          - name: nginx
            image: nginx:1.21.6
            ports:
            - containerPort: 80
    EOF
    
    cat <<EOF > configmap.yaml
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: nginx-config
    data:
      welcome-message: "Hello from configmap"
    EOF
    
  2. Примените файлы развертывания к вашему кластеру, используя команду az aks command invoke с параметром --file для прикрепления файла. В следующем примере применяются файлы deployment.yaml и configmap.yaml в пространство имен default.

    az aks command invoke \
      --resource-group $AKS_RESOURCE_GROUP \
      --name $AKS_CLUSTER_NAME \
      --command "kubectl apply -f deployment.yaml -f configmap.yaml -n default" \
      --file deployment.yaml \
      --file configmap.yaml
    

Использование Run command частного кластера AKS на портале Azure

С функцией kubectl можно использовать следующие Run command команды:

  • kubectl get nodes
  • kubectl get deployments
  • kubectl get pods
  • kubectl describe nodes
  • kubectl describe pod <pod-name>
  • kubectl describe deployment <deployment-name>
  • kubectl apply -f <file-name>

Использование Run command для выполнения одной команды

  1. В портал Azure перейдите к частному кластеру.
  2. В меню службы в разделе ресурсов Kubernetes выберите команду "Выполнить".
  3. Введите команду, которую вы хотите выполнить, и нажмите кнопку "Выполнить".

Использование Run command команд для выполнения команд с вложенными файлами

  1. В портал Azure перейдите к частному кластеру.

  2. В меню службы в разделе ресурсов Kubernetes выберите команду "Выполнить".

  3. Выберите "Вложить файлы" и затем ">".

    Снимок экрана присоединения файлов к команде запуска портала Azure.

  4. Выберите файл или файлы, которые требуется присоединить, а затем нажмите кнопку "Присоединить".

  5. Введите команду, которую вы хотите выполнить, и нажмите кнопку "Выполнить".

Отключить Run command

Вы можете отключить функцию Run command, установив .properties.apiServerAccessProfile.disableRunCommand для нее значение true.

Устранение неполадок command invoke

Сведения о наиболее распространенных проблемах az aks command invoke и их устраненииaz aks command invoke"Устранение сбоев".

Из этой статьи вы узнали, как получить доступ к частному кластеру и выполнить команды в этом кластере. Дополнительные сведения о кластерах AKS см. в следующих статьях: