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


Создание изолированного сетевого кластера Служба Azure Kubernetes (AKS) (предварительная версия)

Организации обычно имеют строгие требования к безопасности и соответствию требованиям для регулирования исходящего трафика (исходящего) сетевого трафика из кластера для устранения рисков кражи данных. По умолчанию кластеры Служба Azure Kubernetes (AKS) имеют неограниченный исходящий доступ к Интернету. Такой уровень сетевого доступа позволяет работающим узлам и службам обращаться к внешним ресурсам по мере необходимости. Если вы хотите ограничить исходящий трафик, нужно сохранить доступ для ограниченного числа портов и адресов, чтобы обеспечить работоспособность для задач обслуживания кластера.

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

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

Внимание

Предварительные версии функций AKS доступны на уровне самообслуживания. Предварительные версии предоставляются "как есть" и "при наличии". На них не распространяются соглашения об уровне обслуживания и ограниченная гарантия. Предварительные версии AKS предоставляются с частичной клиентской поддержкой по мере возможности. Следовательно, эти функции не предназначены для использования в рабочей среде. Дополнительные сведения доступны в следующих статьях поддержки.

Подготовка к работе

  • Ознакомьтесь с концептуальным обзором этой функции, которая содержит описание работы изолированных сетевых кластеров. Кроме того, в этой статье приведены общие сведения:
    • Объясняет два метода доступа, управляемые AKS ACR или BYO ACR, можно выбрать в этой статье.
    • Описывает текущие ограничения.
  • Используйте среду Bash в Azure Cloud Shell. Дополнительные сведения см . в кратком руководстве по Bash в Azure Cloud Shell.

  • Если вы предпочитаете выполнять справочные команды CLI локально, установите Azure CLI. Если вы работаете в Windows или macOS, Azure CLI можно запустить в контейнере Docker. Дополнительные сведения см. в статье Как запустить Azure CLI в контейнере Docker.

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

    • Установите расширение Azure CLI при первом использовании, когда появится соответствующий запрос. Дополнительные сведения о расширениях см. в статье Использование расширений с Azure CLI.

    • Выполните команду az version, чтобы узнать установленную версию и зависимые библиотеки. Чтобы обновиться до последней версии, выполните команду az upgrade.

  • Для этой статьи требуется версия 2.63.0 или более поздняя версия Azure CLI. Если вы используете Azure Cloud Shell, последняя версия уже установлена там.

  • aks-preview Установите расширение Azure CLI версии 9.0.0b2 или более поздней.

    • Если у вас еще нет aks-preview расширения, установите его с помощью az extension add команды.

      az extension add --name aks-preview
      
    • Если у вас уже есть aks-preview расширение, обновите его, чтобы убедиться, что у вас установлена последняя версия с помощью az extension update команды.

      az extension update --name aks-preview
      
  • NetworkIsolatedClusterPreview Зарегистрируйте флаг компонента с помощью команды az feature register.

    az feature register --namespace Microsoft.ContainerService --name NetworkIsolatedClusterPreview
    

    Проверьте состояние регистрации с помощью команды az feature show . Для отображения состояния зарегистрировано несколько минут:

    az feature show --namespace Microsoft.ContainerService --name NetworkIsolatedClusterPreview
    

    Примечание.

    Если вы решили создать изолированный сетевой кластер с интеграцией виртуальной сети API Server, настроенной для частного доступа к серверу API, необходимо повторить описанные выше действия, чтобы зарегистрировать EnableAPIServerVnetIntegrationPreview флаг компонента. Когда состояние отражает зарегистрировано, обновите регистрацию Microsoft.ContainerService поставщиков ресурсов Microsoft.ContainerRegistry с помощью команды az provider register :

     az provider register --namespace Microsoft.ContainerService
     az provider register --namespace Microsoft.ContainerRegistry
    
  • Если вы выбираете вариант "Принести собственный" (BYO) Реестр контейнеров Azure (ACR), необходимо убедиться, что ACR соответствует следующим требованиям:

  • (Необязательно) Если вы хотите использовать любую дополнительную функцию AKS или надстройку, для которой требуется исходящий сетевой доступ, этот документ содержит требования к исходящему трафику для каждой функции. Кроме того, в этом документе перечислены функции или надстройки, поддерживающие интеграцию приватного канала для безопасного подключения из виртуальной сети кластера. Если интеграция приватного канала недоступна для любой из этих функций, кластер можно настроить с помощью пользовательской таблицы маршрутизации и Брандмауэр Azure на основе правил сети и правил приложений, необходимых для этой функции.

Примечание.

Следующие расширения кластера AKS еще не поддерживаются в изолированных сетевых кластерах:

Развертывание изолированного сетевого кластера с помощью ACR, управляемого AKS

AKS создает, управляет и согласовывает ресурс ACR в этом параметре. Вам не нужно назначать разрешения или управлять ACR. AKS управляет правилами кэша, приватным каналом и частной конечной точкой, используемой в изолированном сетевом кластере.

Создание изолированного сетевого кластера

При создании изолированного кластера AKS сети можно выбрать один из следующих режимов частного кластера — приватный канал или интеграция виртуальной сети сервера API.

Независимо от выбранного режима, вы задаете --bootstrap-artifact-source и --outbound-type параметры.

--bootstrap-artifact-source для извлечения изображений можно задать значение Direct Cache или соответствующее ему значение с помощью direct MCR (НЕ изолированная сеть) и частного ACR (изолированного сети) для извлечения изображений соответственно.

Для --outbound-type parameter этого можно задать значение none или block. Если для типа исходящего трафика задано noneзначение, AKS не настраивает исходящие подключения для кластера, позволяя пользователю настраивать их самостоятельно. Если для типа исходящего трафика задано значение block, все исходящие подключения блокируются.

Создайте изолированный кластер AKS на основе приватного канала, выполнив команду az aks create с --bootstrap-artifact-sourceпараметром , --enable-private-clusterа также --outbound-type параметрами.

az aks create --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME}   --kubernetes-version 1.30.3 --bootstrap-artifact-source Cache --outbound-type none  --network-plugin azure --enable-private-cluster

Интеграция виртуальной сети сервера API

Создайте изолированный сетевой кластер AKS, настроенный с помощью интеграции виртуальной сети API Server, выполнив команду az aks create с --bootstrap-artifact-sourceпараметром , --enable-private-cluster--enable-apiserver-vnet-integration а также --outbound-type параметрами.

az aks create --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --kubernetes-version 1.30.3 --bootstrap-artifact-source Cache --outbound-type none --network-plugin azure --enable-private-cluster --enable-apiserver-vnet-integration

Обновление существующего кластера AKS до изолированного типа сети

Если вы предпочитаете включить сетевую изоляцию в существующем кластере AKS вместо создания нового кластера, используйте команду az aks update .

az aks update --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --bootstrap-artifact-source Cache --outbound-type none

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

az aks upgrade --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --node-image-only

Внимание

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

Развертывание изолированного сетевого кластера с помощью собственного ACR

AKS поддерживает создание собственного (BYO) ACR. Для поддержки сценария ACR byO необходимо настроить частную конечную точку ACR и частную зону DNS перед созданием кластера AKS.

Ниже показано, как подготовить эти ресурсы:

  • Настраиваемая виртуальная сеть и подсети для AKS и ACR.
  • ACR, правило кэша ACR, частная конечная точка и частная зона DNS.
  • Пользовательское удостоверение плоскости управления и удостоверение kubelet.

Шаг 1. Создание виртуальной сети и подсетей

Исходящий доступ по умолчанию для подсети AKS должен иметь значение false.

az group create --name ${RESOURCE_GROUP} --location ${LOCATION}

az network vnet create  --resource-group ${RESOURCE_GROUP} --name ${VNET_NAME} --address-prefixes 192.168.0.0/16

az network vnet subnet create --name ${AKS_SUBNET_NAME} --vnet-name ${VNET_NAME} --resource-group ${RESOURCE_GROUP} --address-prefixes 192.168.1.0/24 --default-outbound-access false

SUBNET_ID=$(az network vnet subnet show --name ${AKS_SUBNET_NAME} --vnet-name ${VNET_NAME} --resource-group ${RESOURCE_GROUP} --query 'id' --output tsv)

az network vnet subnet create --name ${ACR_SUBNET_NAME} --vnet-name ${VNET_NAME} --resource-group ${RESOURCE_GROUP} --address-prefixes 192.168.2.0/24 --private-endpoint-network-policies Disabled

Шаг 2. Создание ACR и включение кэша артефактов

  1. Создайте ACR с помощью приватного канала и анонимного доступ на вытягивание.

    az acr create --resource-group ${RESOURCE_GROUP} --name ${REGISTRY_NAME} --sku Premium --public-network-enabled false
    
    az acr update --resource-group ${RESOURCE_GROUP} --name ${REGISTRY_NAME} --anonymous-pull-enabled true
    
    REGISTRY_ID=$(az acr show --name ${REGISTRY_NAME} -g ${RESOURCE_GROUP}  --query 'id' --output tsv)
    
  2. Создайте правило кэша ACR, чтобы разрешить пользователям кэшировать образы контейнеров MCR в новом ACR.

    az acr cache create -n acr-cache-rule -r ${REGISTRY_NAME} -g ${RESOURCE_GROUP} --source-repo "mcr.microsoft.com/*" --target-repo "*"
    

Шаг 3. Создание частной конечной точки для ACR

az network private-endpoint create --name myPrivateEndpoint --resource-group ${RESOURCE_GROUP} --vnet-name ${VNET_NAME} --subnet ${ACR_SUBNET_NAME} --private-connection-resource-id ${REGISTRY_ID} --group-id registry --connection-name myConnection

NETWORK_INTERFACE_ID=$(az network private-endpoint show --name myPrivateEndpoint --resource-group ${RESOURCE_GROUP} --query 'networkInterfaces[0].id' --output tsv)

REGISTRY_PRIVATE_IP=$(az network nic show --ids ${NETWORK_INTERFACE_ID} --query "ipConfigurations[?privateLinkConnectionProperties.requiredMemberName=='registry'].privateIPAddress" --output tsv)

DATA_ENDPOINT_PRIVATE_IP=$(az network nic show --ids ${NETWORK_INTERFACE_ID} --query "ipConfigurations[?privateLinkConnectionProperties.requiredMemberName=='registry_data_$LOCATION'].privateIPAddress" --output tsv)

Шаг 4. Создание частной зоны DNS и добавление записей

Создайте частную зону DNS с именем privatelink.azurecr.io. Добавьте записи для конечной точки {REGISTRY_NAME}.azurecr.ioREST реестра и конечной точки {REGISTRY_NAME}.{REGISTRY_LOCATION}.data.azurecr.ioданных реестра.

az network private-dns zone create --resource-group ${RESOURCE_GROUP} --name "privatelink.azurecr.io"

az network private-dns link vnet create --resource-group ${RESOURCE_GROUP} --zone-name "privatelink.azurecr.io" --name MyDNSLink --virtual-network ${VNET_NAME} --registration-enabled false

az network private-dns record-set a create --name ${REGISTRY_NAME} --zone-name "privatelink.azurecr.io" --resource-group ${RESOURCE_GROUP}

az network private-dns record-set a add-record --record-set-name ${REGISTRY_NAME} --zone-name "privatelink.azurecr.io" --resource-group ${RESOURCE_GROUP} --ipv4-address ${REGISTRY_PRIVATE_IP}

az network private-dns record-set a create --name ${REGISTRY_NAME}.${LOCATION}.data --zone-name "privatelink.azurecr.io" --resource-group ${RESOURCE_GROUP}

az network private-dns record-set a add-record --record-set-name ${REGISTRY_NAME}.${LOCATION}.data --zone-name "privatelink.azurecr.io" --resource-group ${RESOURCE_GROUP} --ipv4-address ${DATA_ENDPOINT_PRIVATE_IP}

Шаг 5. Создание плоскости управления и удостоверений kubelet

Удостоверение плоскости управления

az identity create --name ${CLUSTER_IDENTITY_NAME} --resource-group ${RESOURCE_GROUP}

CLUSTER_IDENTITY_RESOURCE_ID=$(az identity show --name ${CLUSTER_IDENTITY_NAME} --resource-group ${RESOURCE_GROUP} --query 'id' -o tsv)

CLUSTER_IDENTITY_PRINCIPAL_ID=$(az identity show --name ${CLUSTER_IDENTITY_NAME} --resource-group ${RESOURCE_GROUP} --query 'principalId' -o tsv)

Удостоверение Kubelet

az identity create --name ${KUBELET_IDENTITY_NAME} --resource-group ${RESOURCE_GROUP}

KUBELET_IDENTITY_RESOURCE_ID=$(az identity show --name ${KUBELET_IDENTITY_NAME} --resource-group ${RESOURCE_GROUP} --query 'id' -o tsv)

KUBELET_IDENTITY_PRINCIPAL_ID=$(az identity show --name ${KUBELET_IDENTITY_NAME} --resource-group ${RESOURCE_GROUP} --query 'principalId' -o tsv)

Предоставление разрешений AcrPull для удостоверения Kubelet

az role assignment create --role AcrPull --scope ${REGISTRY_ID} --assignee-object-id ${KUBELET_IDENTITY_PRINCIPAL_ID} --assignee-principal-type ServicePrincipal

После настройки этих ресурсов можно продолжить создание изолированного кластера AKS сети с помощью BYO ACR.

Шаг 6. Создание изолированного сетевого кластера с помощью ACR BYO

При создании изолированного кластера AKS сети можно выбрать один из следующих режимов частного кластера — приватный канал или интеграция виртуальной сети сервера API.

Независимо от выбранного режима, вы задаете --bootstrap-artifact-source и --outbound-type параметры.

--bootstrap-artifact-source для извлечения изображений можно задать значение Direct Cache или соответствующее ему значение с помощью direct MCR (НЕ изолированная сеть) и частного ACR (изолированного сети) для извлечения изображений соответственно.

Для --outbound-type parameter этого можно задать значение none или block. Если для типа исходящего трафика задано noneзначение, AKS не настраивает исходящие подключения для кластера, позволяя пользователю настраивать их самостоятельно. Если для типа исходящего трафика задано значение block, все исходящие подключения блокируются.

Создайте изолированный сетевой кластер на основе приватного канала, который обращается к ACR, выполнив команду az aks create с необходимыми параметрами.

az aks create --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --kubernetes-version 1.30.3 --vnet-subnet-id ${SUBNET_ID} --assign-identity ${CLUSTER_IDENTITY_RESOURCE_ID} --assign-kubelet-identity ${KUBELET_IDENTITY_RESOURCE_ID} --bootstrap-artifact-source Cache --bootstrap-container-registry-resource-id ${REGISTRY_ID} --outbound-type none --network-plugin azure --enable-private-cluster

Интеграция виртуальной сети сервера API

Для изолированного сетевого кластера с интеграцией виртуальной сети сервера API сначала создайте подсеть и назначьте правильную роль со следующими командами:

az network vnet subnet create --name ${APISERVER_SUBNET_NAME} --vnet-name ${VNET_NAME} --resource-group ${RESOURCE_GROUP} --address-prefixes 192.168.3.0/24

export APISERVER_SUBNET_ID=$(az network vnet subnet show --resource-group ${RESOURCE_GROUP} --vnet-name ${VNET_NAME} --name ${APISERVER_SUBNET_NAME} --query id -o tsv)
az role assignment create --scope ${APISERVER_SUBNET_ID} --role "Network Contributor" --assignee-object-id ${CLUSTER_IDENTITY_PRINCIPAL_ID} --assignee-principal-type ServicePrincipal

Создайте изолированный сетевой кластер AKS, настроенный с помощью интеграции виртуальной сети API Server и доступ к ACR, выполнив команду az aks create с необходимыми параметрами.

az aks create --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --kubernetes-version 1.30.3 --vnet-subnet-id ${SUBNET_ID} --assign-identity ${CLUSTER_IDENTITY_RESOURCE_ID} --assign-kubelet-identity ${KUBELET_IDENTITY_RESOURCE_ID} --bootstrap-artifact-source Cache --bootstrap-container-registry-resource-id ${REGISTRY_ID} --outbound-type none --network-plugin azure --enable-apiserver-vnet-integration --apiserver-subnet-id ${APISERVER_SUBNET_ID}

Обновление существующего кластера AKS

Если вы предпочитаете включить сетевую изоляцию в существующем кластере AKS вместо создания нового кластера, используйте команду az aks update .

При создании частной конечной точки и частной зоны DNS для ACR BYO используйте существующую виртуальную сеть и подсети существующего кластера AKS. При назначении разрешения AcrPull удостоверению kubelet используйте существующее удостоверение kubelet существующего кластера AKS.

Чтобы включить изолированную сеть функцию в существующем кластере AKS, используйте следующую команду:

az aks update --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --bootstrap-artifact-source Cache --bootstrap-container-registry-resource-id ${REGISTRY_ID} --outbound-type none

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

az aks upgrade --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --node-image-only

Внимание

Не забудьте повторно создать пулы узлов кластера после включения функции изолированного сетевого кластера. В противном случае функция не вступит в силу для кластера.

Обновление идентификатора ACR

Можно обновить частный ACR, используемый с изолированным сетевым кластером AKS. Чтобы определить идентификатор ресурса ACR, используйте az aks show команду.

az aks show --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME}

Обновление идентификатора ACR выполняется с помощью az aks update команды с параметрами и --bootstrap-container-registry-resource-id параметрами--bootstrap-artifact-source.

az aks update --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --bootstrap-artifact-source Cache --bootstrap-container-registry-resource-id <New BYO ACR resource ID>

При обновлении идентификатора ACR в существующем кластере необходимо вручную восстановить все существующие узлы.

az aks upgrade --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --node-image-only

Внимание

Не забудьте повторно создать пулы узлов кластера после включения функции изолированного сетевого кластера. В противном случае функция не вступит в силу для кластера.

Проверка включения изолированного сетевого кластера

Чтобы проверить функцию изолированного кластера сети, используйте команду az aks show

az aks show --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME}

В следующих выходных данных показано, что функция включена в зависимости от значений outboundType свойства (ни одного или заблокированного) и artifactSource свойства (Cached).

"kubernetesVersion": "1.30.3",
"name": "myAKSCluster"
"type": "Microsoft.ContainerService/ManagedClusters"
"properties": {
  ...
  "networkProfile": {
    ...
    "outboundType": "none",
    ...
  },
  ...
  "bootstrapProfile": {
    "artifactSource": "Cache",
    "containerRegistryId": "/subscriptions/my-subscription-id/my-node-resource-group-name/providers/Microsoft.ContainerRegistry/registries/my-registry-name"
  },
  ...
}

Отключение изолированного сетевого кластера

Отключите функцию изолированного сетевого кластера, выполнив az aks update команду с параметрами и --outbound-type параметрами--bootstrap-artifact-source.

az aks update --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --bootstrap-artifact-source Direct --outbound-type LoadBalancer

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

az aks upgrade --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --node-image-only

Внимание

Не забудьте повторно создать пулы узлов кластера после отключения функции изолированного сетевого кластера. В противном случае функция не вступит в силу для кластера.

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

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

Если вы хотите настроить конфигурацию исходящего ограничения с помощью Брандмауэр Azure, посетите трафик исходящего трафика с помощью Брандмауэр Azure в AKS.

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