Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Организации обычно имеют строгие требования к безопасности и соответствию требованиям для регулирования исходящего трафика (исходящего) сетевого трафика из кластера для устранения рисков кражи данных. По умолчанию стандартные кластеры SKU Службы Azure Kubernetes (AKS) имеют неограниченный исходящий доступ к Интернету. Такой уровень сетевого доступа позволяет работающим узлам и службам обращаться к внешним ресурсам по мере необходимости. Если вы хотите ограничить исходящий трафик, нужно сохранить доступ для ограниченного числа портов и адресов, чтобы обеспечить работоспособность для задач обслуживания кластера. Концептуальный документ по правилам исходящего трафика и полного доменного имени (FQDN) для кластеров AKS предоставляет список обязательных конечных точек для кластера AKS, а также его дополнительных надстроек и функций.
Одним из распространенных решений по ограничению исходящего трафика из кластера является использование устройства брандмауэра для ограничения трафика на основе правил брандмауэра. Брандмауэр применим, если приложению требуется исходящий доступ, но при необходимости проверки и защиты исходящих запросов. Настройка брандмауэра вручную с необходимыми правилами исходящего трафика и FQDN является трудоемким процессом, особенно если ваша единственная потребность — создать изолированный кластер AKS без исходящих зависимостей для начальной загрузки кластера.
Чтобы снизить риск кражи данных, сетевой изолированный кластер позволяет загружать кластер AKS без каких-либо зависимостей исходящей сети, даже для получения компонентов или образов кластера из Реестра артефактов Майкрософт (MAR). Оператор кластера может постепенно настроить разрешенный исходящий трафик для каждого сценария, который требуется включить. В этой статье описаны шаги по созданию изолированного сетевого кластера.
Перед тем как начать
- Ознакомьтесь с концептуальным обзором этой функции, которая содержит описание работы изолированных сетевых кластеров. Кроме того, в этой статье приведены общие сведения:
- Объясняет два варианта частного ресурса Реестра контейнеров Azure (ACR), используемого для начальной загрузки кластера — управляемый AKS ACR или собственный ACR.
- Объясняет два режима частного кластера для обеспечения частного доступа к серверу API — на основе приватной ссылки или интеграции виртуальной сети сервера API.
- Объясняет два типа исходящего трафика для управления исходящим трафиком кластера -
noneилиblock(предварительная версия). - Описывает текущие ограничения изолированных сетевых кластеров.
Замечание
Общедоступный исходящий тип none.
Тип исходящего трафикаblock доступен в режиме предварительного просмотра.
Это важно
Предварительные версии функций AKS доступны на условиях самообслуживания и добровольного выбора. Предварительные версии предоставляются "как есть" и "при наличии". На них не распространяются соглашения об уровне обслуживания и ограниченная гарантия. Предварительные версии AKS сопровождаются частичной поддержкой клиентов на основе принципа лучших усилий. Как таковые, эти функции не предназначены для использования в производстве. Для получения дополнительной информации ознакомьтесь со следующими статьями поддержки:
Используйте среду Bash в Azure Cloud Shell. Дополнительные сведения см. в статье "Начало работы с Azure Cloud Shell".
Если вы предпочитаете запускать справочные команды CLI локально, установите Azure CLI. Если вы работаете в Windows или macOS, подумайте о запуске Azure CLI в контейнере Docker. Дополнительные сведения см. в статье Как запустить Azure CLI в контейнере Docker.
Если вы используете локальную установку, войдите в Azure CLI с помощью команды az login . Чтобы завершить процесс аутентификации, следуйте шагам, отображаемым в вашем терминале. Сведения о других параметрах входа см. в статье "Проверка подлинности в Azure с помощью Azure CLI".
Когда вас попросят, установите расширение Azure CLI при первом использовании. Дополнительные сведения о расширениях см. в статье Использование расширений и управление ими с помощью Azure CLI.
Выполните команду az version, чтобы узнать установленную версию и зависимые библиотеки. Чтобы обновиться до последней версии, выполните команду az upgrade.
- Для этой статьи требуется версия 2.71.0 или более поздняя версия Azure CLI. Если вы используете Azure Cloud Shell, последняя версия уже установлена там.
- Если вы используете исходящий тип
aks-preview(предварительная версия), необходимо установить расширение Azure CLI версииblockили более позднюю.- Если у вас еще нет
aks-previewрасширения, установите его с помощьюaz extension addкоманды.az extension add --name aks-preview - Если у вас уже есть
aks-previewрасширение, обновите его, чтобы убедиться, что у вас установлена последняя версия с помощьюaz extension updateкоманды.az extension update --name aks-preview
- Если у вас еще нет
- Изолированные кластеры сети поддерживаются на кластерах AKS с Kubernetes версии 1.30 и выше.
- Если вы выбираете использовать собственный реестр контейнеров Azure (BYO) (ACR), необходимо убедиться, что ACR — это уровень служб SKU уровня "Премиум".
- Если вы используете изолированный сетевой кластер, настроенный с интеграцией виртуальной сети API Server, необходимо следовать предварительным требованиям и рекомендациям в этом документе.
Развертывание изолированного сетевого кластера с помощью ACR, управляемого AKS
AKS создает, управляет и согласовывает ресурс ACR в этом параметре. Вам не нужно назначать разрешения или управлять ACR. AKS управляет правилами кэша, приватным каналом и частной конечной точкой, используемой в изолированном сетевом кластере.
Создание изолированного сетевого кластера
При создании изолированного сетевого кластера AKS можно выбрать один из следующих режимов частного кластера — на основе частного канала связи или интеграция сервера API с виртуальной сетью.
Независимо от выбранного режима, следует задать --bootstrap-artifact-source и --outbound-type параметры.
Можно задать --bootstrap-artifact-source значение как Direct для использования прямого MAR (без изоляции сети) или Cache для использования частного ACR (с изоляцией сети) при извлечении изображений.
Можно задать значение для --outbound-type parameter, выбрав none или block (предварительная версия). Если для типа исходящего трафика задано noneзначение, AKS не настраивает исходящие подключения для кластера, позволяя пользователю настраивать их самостоятельно. Если для типа исходящего трафика задано значение block, все исходящие подключения блокируются.
Основанный на закрытых ссылках
Создайте изолированный кластер сети на основе приватной ссылки, выполнив команду 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
Создайте изолированный сетевой кластер, настроенный с помощью интеграции виртуальной сети 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 .
Чтобы включить функцию изолированной сети в существующем кластере AKS, сначала выполните следующую команду, чтобы обновить bootstrap-artifact-source:
az aks update --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --bootstrap-artifact-source Cache
Затем необходимо вручную восстановить изображение всех существующих пулов узлов.
az aks upgrade --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --node-image-only
Замечание
Необходимо убедиться, что исходящий трафик существует до завершения первой повторной работы. Чтобы проверить завершение повторного создания образа, выполните следующую команду:
NODEPOOLS=$(az aks nodepool list \
--resource-group "${RESOURCE_GROUP}" \
--cluster-name "${AKS_NAME}" \
--query "[].name" -o tsv)
for NODEPOOL in $NODEPOOLS; do
echo "Waiting for node pool $NODEPOOL to finish upgrading..."
az aks nodepool wait \
--resource-group "${RESOURCE_GROUP}" \
--cluster-name "${AKS_NAME}" \
--name "$NODEPOOL" \
--updated
echo "Node pool $NODEPOOL upgrade succeeded."
done
Подождите и убедитесь, что повторное создание образа завершится, а затем выполните следующую команду, чтобы обновить outbound-type:
az aks update --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --outbound-type none
Это важно
Не забудьте пересоздать образ пулов узлов кластера сразу после обновления источника артефактов для кэширования. В противном случае функция не вступит в силу для кластера.
Разверните изолированный сетевой кластер с использованием собственного ACR
AKS поддерживает возможность использования собственного (BYO) ACR. Для поддержки сценария ACR byO необходимо настроить частную конечную точку ACR и частную зону DNS перед созданием кластера AKS.
Ниже показано, как подготовить эти ресурсы:
- Настраиваемая виртуальная сеть и подсети для AKS и ACR.
- ACR, правило кэша ACR, частная конечная точка и частная зона DNS.
- Пользовательское удостоверение для управляющего узла и удостоверение kubelet.
Шаг 1. Создание виртуальной сети и подсетей
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
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. Отключение исходящего подключения виртуальной сети (необязательно)
Существует несколько способов отключения исходящего подключения виртуальной сети.
Шаг 3. Создание ACR и включение кэша артефактов
Создайте ACR с частной ссылкой.
az acr create --resource-group ${RESOURCE_GROUP} --name ${REGISTRY_NAME} --sku Premium --public-network-enabled false REGISTRY_ID=$(az acr show --name ${REGISTRY_NAME} -g ${RESOURCE_GROUP} --query 'id' --output tsv)Создайте правило кэша ACR, выполнив приведенную ниже команду, чтобы разрешить пользователям кэшировать образы контейнеров MAR и двоичные файлы в новом ACR, обратите внимание, что имя правила кэша и имена репозитория должны быть строго согласованы с приведенными ниже рекомендациями.
az acr cache create -n aks-managed-mcr -r ${REGISTRY_NAME} -g ${RESOURCE_GROUP} --source-repo "mcr.microsoft.com/*" --target-repo "aks-managed-repository/*"
Замечание
При использовании ACR BYO вы несете ответственность за создание и правильное обслуживание правила кэша ACR, как описано выше. Этот шаг является критически важным для создания кластера, функционирования и обновления. Это правило кэша не должно быть изменено.
Шаг 4. Создание частной конечной точки для 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)
Шаг 5. Создание частной зоны 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}
Шаг 6. Создание контрольной плоскости и идентичностей 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.
Шаг 7. Создание изолированного сетевого кластера с помощью BYO ACR
При создании изолированного сетевого кластера можно выбрать один из следующих режимов частного кластера — на основе приватного подключения или интеграция виртуальной сети с сервером API.
Независимо от выбранного режима, следует задать --bootstrap-artifact-source и --outbound-type параметры.
Для --bootstrap-artifact-source можно задать значение Direct или Cache, чтобы использовать прямой реестр артефактов Майкрософт (MAR) (НЕ изолированная сеть) и частный 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 с VNet, сначала создайте подсеть и назначьте правильную роль с помощью следующих команд:
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
Создайте изолированный сетевой кластер, настроенный с интеграцией виртуальной сети 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, сначала выполните следующую команду, чтобы обновить bootstrap-artifact-source:
az aks update --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --bootstrap-artifact-source Cache --bootstrap-container-registry-resource-id ${REGISTRY_ID}
Затем необходимо вручную восстановить изображение всех существующих пулов узлов.
az aks upgrade --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --node-image-only
Замечание
Необходимо убедиться, что исходящий трафик существует до завершения первой повторной работы. Чтобы проверить завершение повторного создания образа, выполните следующую команду:
NODEPOOLS=$(az aks nodepool list \
--resource-group "${RESOURCE_GROUP}" \
--cluster-name "${AKS_NAME}" \
--query "[].name" -o tsv)
for NODEPOOL in $NODEPOOLS; do
echo "Waiting for node pool $NODEPOOL to finish upgrading..."
az aks nodepool wait \
--resource-group "${RESOURCE_GROUP}" \
--cluster-name "${AKS_NAME}" \
--name "$NODEPOOL" \
--updated
echo "Node pool $NODEPOOL upgrade succeeded."
done
Подождите и убедитесь, что повторное создание образа завершится, а затем выполните следующую команду, чтобы обновить outbound-type:
az aks update --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME} --outbound-type none
Это важно
Не забудьте пересоздать образ пулов узлов кластера сразу после обновления источника артефактов для кэширования. В противном случае функция не вступит в силу для кластера.
Обновление идентификатора ACR
Возможно обновить частный ACR, который используется с кластером, изолированным от сети. Чтобы определить идентификатор ресурса ACR, используйте az aks show команду.
az aks show --resource-group ${RESOURCE_GROUP} --name ${AKS_NAME}
Обновление идентификатора ACR выполняется запуском команды az aks update с параметрами --bootstrap-artifact-source и --bootstrap-container-registry-resource-id.
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 (кэшировано).
"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 с параметрами --bootstrap-artifact-source и --outbound-type.
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 Kubernetes (AKS).
Дальнейшие шаги
Если вы хотите настроить конфигурацию ограничений на исходящий трафик с помощью брандмауэра Azure, посетите Контроль исходящего трафика с помощью брандмауэра Azure в AKS.
Если вы хотите ограничить обмен данными pod между собой и East-West ограничениями трафика в кластере, см. раздел "Безопасный трафик между модулями pod с помощью политик сети в AKS".