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


Использование подключения кластера для безопасного подключения к кластерам Kubernetes с поддержкой Azure Arc

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

Доступ к apiserver кластеру Kubernetes с поддержкой Azure Arc включает следующие сценарии:

Прежде чем начать, ознакомьтесь с общими сведениями о функции подключения кластера.

Предварительные условия

  • Установите или обновите Azure CLI до последней версии.

  • Установите последнюю версию connectedk8s расширения Azure CLI:

    az extension add --name connectedk8s
    

    Если расширение connectedk8s уже установлено, обновите его до последней версии:

    az extension update --name connectedk8s
    
  • Замените заполнители и выполните следующую команду, чтобы задать переменные среды, используемые в этом документе:

    CLUSTER_NAME=<cluster-name>
    RESOURCE_GROUP=<resource-group-name>
    ARM_ID_CLUSTER=$(az connectedk8s show -n $CLUSTER_NAME -g $RESOURCE_GROUP --query id -o tsv)
    

Настройка проверки подлинности

В существующем Arc-кластере создайте ClusterRoleBinding с аутентификацией Microsoft Entra или токеном учетной записи службы.

Опция проверки подлинности Microsoft Entra

  1. Получите связанную с сущностью objectId Microsoft Entra. Для отдельных пользовательских учетных записей получите основное имя пользователя (UPN), связанное с сущностью Microsoft Entra.

    • Для учетной записи группы Microsoft Entra:

      AAD_ENTITY_ID=$(az ad signed-in-user show --query id -o tsv)
      
    • Для учетной записи одного пользователя Microsoft Entra:

      AAD_ENTITY_ID=$(az ad signed-in-user show --query userPrincipalName -o tsv)
      
    • Для приложения Microsoft Entra:

      AAD_ENTITY_ID=$(az ad sp show --id <id> --query id -o tsv)
      
  2. Авторизовать сущность с соответствующими разрешениями.

    • Если вы используете стандартные ClusterRoleBinding или RoleBinding Kubernetes для проверки авторизации на кластере, с kubeconfig файлом, указывающим на apiserver часть вашего кластера для прямого доступа, вы можете создать привязку, сопоставленную с сущностью Microsoft Entra, которая нуждается в доступе к этому кластеру. Например:

      kubectl create clusterrolebinding demo-user-binding --clusterrole cluster-admin --user=$AAD_ENTITY_ID
      
    • Если вы используете Azure RBAC для проверки авторизации в кластере, можно создать применимое назначение роли Azure , сопоставленное с сущностью Microsoft Entra. Например:

      az role assignment create --role "Azure Arc Kubernetes Viewer" --assignee $AAD_ENTITY_ID --scope $ARM_ID_CLUSTER
      az role assignment create --role "Azure Arc Enabled Kubernetes Cluster User Role" --assignee $AAD_ENTITY_ID --scope $ARM_ID_CLUSTER
      

Опция аутентификации токена сервисной учетной записи

  1. С файлом kubeconfig, который указывает на apiserver вашего кластера Kubernetes, выполните следующую команду, чтобы создать учетную запись службы. В этом примере создается учетная запись службы в пространстве имен по умолчанию, но вы можете заменить его на любое другое пространство имен для default.

    kubectl create serviceaccount demo-user -n default
    
  2. Создайте ClusterRoleBinding, чтобы предоставить этой учетной записи службы соответствующие разрешения в кластере. Если вы использовали другое пространство имен в первой команде, замените его здесь default.

    kubectl create clusterrolebinding demo-user-binding --clusterrole cluster-admin --serviceaccount default:demo-user
    
  3. Создайте маркер учетной записи службы:

    kubectl apply -f - <<EOF
    apiVersion: v1
    kind: Secret
    metadata:
      name: demo-user-secret
      annotations:
        kubernetes.io/service-account.name: demo-user
    type: kubernetes.io/service-account-token
    EOF
    
    TOKEN=$(kubectl get secret demo-user-secret -o jsonpath='{$.data.token}' | base64 -d | sed 's/$/\n/g')
    
  4. Получите маркер для вывода в консоль

    echo $TOKEN
    

Доступ к кластеру с клиентского устройства

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

  1. Войдите, используя аутентификацию Microsoft Entra или аутентификацию по токену учетной записи службы.

  2. Получите подключение kubeconfig кластера, необходимое для взаимодействия с кластером из любого места (даже за пределами брандмауэра, окружающего кластер), на основе используемого параметра проверки подлинности:

    • Для аутентификации в Microsoft Entra:

      az connectedk8s proxy -n $CLUSTER_NAME -g $RESOURCE_GROUP
      
    • Для аутентификации с использованием токена сервисной учетной записи:

      az connectedk8s proxy -n $CLUSTER_NAME -g $RESOURCE_GROUP --token $TOKEN
      

      Примечание.

      Эта команда открывает прокси-сервер и блокирует текущую оболочку.

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

    kubectl get pods -A
    

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

Известные ограничения

При выполнении запросов к кластеру Kubernetes, если используемый субъект-служба Microsoft Entra является частью более 200 групп, может появиться следующая ошибка:

Overage claim (users with more than 200 group membership) for SPN is currently not supported. For troubleshooting, please refer to aka.ms/overageclaimtroubleshoot

Это известное ограничение. Чтобы обойти эту ошибку, сделайте следующее:

  1. Создайте субъект-службу, который с меньшей вероятностью входит в большое число групп.
  2. Войдите в Azure CLI с помощью служебного пользователя перед выполнением az connectedk8s proxy команды.

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