Использование подключения кластера для безопасного подключения к кластерам 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)
    
  • Помимо соответствия требованиям к сети для Kubernetes с поддержкой Arc, включите эти конечные точки для исходящего доступа:

    Конечная точка Порт
    *.servicebus.windows.net 443
    guestnotificationservice.azure.com, *.guestnotificationservice.azure.com 443

    Примечание.

    Чтобы перевести дикую *.servicebus.windows.net карта в определенные конечные точки, используйте команду\GET https://guestnotificationservice.azure.com/urls/allowlist?api-version=2020-01-01&location=<location>. В рамках этой команды регион должен быть указан для <location> заполнителя.

Чтобы получить сегмент региона региональной конечной точки, удалите все пробелы из имени региона Azure. Например, регион "Восточная часть США 2 " — eastus2имя региона.

Например, *.<region>.arcdataservices.com должно находиться *.eastus2.arcdataservices.com в регионе "Восточная часть США 2".

Чтобы просмотреть список всех регионов, выполните следующую команду:

az account list-locations -o table
Get-AzLocation | Format-Table

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

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

Параметр проверки подлинности Microsoft Entra

  1. Получите связанную с сущностью objectId Microsoft Entra.

    • Для учетной записи пользователя Microsoft Entra:

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

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

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

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

      az role assignment create --role "Azure Arc Kubernetes Viewer" --assignee $AAD_ENTITY_OBJECT_ID --scope $ARM_ID_CLUSTER
      az role assignment create --role "Azure Arc Enabled Kubernetes Cluster User Role" --assignee $AAD_ENTITY_OBJECT_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
    

Вы увидите ответ от кластера с полным списком pod в пространстве имен default.

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

Используется az connectedk8s show для проверка версии агента Kubernetes с поддержкой Arc.

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

You must be logged in to the server (Error:Error while retrieving group info. Error:Overage claim (users with more than 200 group membership) is currently not supported.

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

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

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