Создание изолированного сетевого кластера Служба 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 соответствует следующим требованиям:
- Анонимные доступ на вытягивание должны быть включены для ACR.
- ACR должен иметь уровень служб SKU уровня "Премиум"
(Необязательно) Если вы хотите использовать любую дополнительную функцию 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 и включение кэша артефактов
Создайте 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)
Создайте правило кэша 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.io
REST реестра и конечной точки {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".
Azure Kubernetes Service