Безопасный сетевой доступ к Kubernetes

Бастион Azure
Azure DNS
Служба Azure Kubernetes (AKS)
Приватный канал Azure
Виртуальная сеть Azure

В этой статье сравниваются сетевые режимы для Служба Azure Kubernetes (AKS) и Amazon Elastic Kubernetes Service (Amazon EKS). В этой статье описывается, как улучшить безопасность подключения к управляемому серверу API кластера AKS, а также различные варианты ограничения доступа к общедоступной сети.

Примечание.

Эта статья является частью серии статей, которые помогают специалистам, знакомым с Amazon EKS, чтобы понять AKS.

Сетевые режимы Amazon EKS

С помощью Amazon Virtual Private Cloud (Amazon VPC) можно запустить ресурсы Amazon Web Services (AWS) в виртуальной сети, состоящей из общедоступных и частных подсетей или диапазонов IP-адресов в VPC. Общедоступная подсеть размещает ресурсы, которые должны быть подключены к Интернету, а частная подсеть размещает ресурсы, которые не подключены к общедоступному Интернету. Amazon EKS может подготавливать управляемые группы узлов как в общедоступных, так и в частных подсетях.

Управление доступом к конечным точкам позволяет настроить доступ к конечной точке сервера API из общедоступного Интернета или через VPC. EKS предоставляет несколько способов управления доступом к конечной точке кластера. Вы можете включить общедоступную конечную точку по умолчанию, частную конечную точку или обе конечные точки одновременно. Если включить общедоступную конечную точку, можно добавить ограничения маршрутизации без классов (CIDR), чтобы ограничить IP-адреса клиента, которые могут подключаться к общедоступной конечной точке.

Как узлы Amazon EKS подключаются к управляемому плоскостю управления Kubernetes, определяется параметром конечной точки, настроенным для кластера. Параметры конечной точки можно изменить в любое время через консоль Amazon EKS или API. Дополнительные сведения см. в разделе "Управление доступом к конечной точке кластера Amazon EKS".

Только общедоступная конечная точка

Предоставление плоскости управления через общедоступную конечную точку — это режим по умолчанию для новых кластеров Amazon EKS. Если включена только общедоступная конечная точка кластера, API Kubernetes, поступающие из Amazon VPC, например рабочий узел для управления взаимодействием с плоскостью, оставьте VPC, но не покидайте сеть Amazon. Для подключения узлов к плоскости управления они должны использовать общедоступный IP-адрес и маршрут к интернет-шлюзу или маршрут к шлюзу преобразования сетевых адресов (NAT), где они могут использовать общедоступный IP-адрес шлюза NAT.

Общедоступные и частные конечные точки

Если включены общедоступные и частные конечные точки, api Kubernetes из VPC взаимодействует с плоскостью управления через управляемые Amazon EKS интерфейсы эластичных сетевых интерфейсов (ENIs) в VPC. Сервер API кластера доступен из Интернета.

Только частная конечная точка

Если включена только частная конечная точка, весь трафик на сервер API кластера, например kubectl или helm команды, должен поступать из VPC кластера или подключенной сети. Общедоступный доступ к серверу API из Интернета отключен. Этот режим доступа можно реализовать с помощью виртуальной частной сети AWS (AWS VPN) или AWS Direct Подключение в VPC. Чтобы ограничить доступ к конечной точке без VPN AWS или Direct Подключение можно добавить ограничения CIDR в общедоступную конечную точку, чтобы ограничить подключения без настройки дополнительных сетей.

Дополнительные сведения о параметрах подключения см. в разделе "Доступ к серверу только частного API".

Сетевой доступ AKS к серверу API

Существует два варианта защиты сетевого доступа к API Kubernetes в AKS, частном кластере AKS или авторизованных диапазонах IP-адресов.

Частный кластер AKS

Частный кластер AKS гарантирует, что сетевой трафик между сервером API и пулами узлов остается в виртуальной сети. В частном кластере AKS уровень управления или сервер API имеет внутренний IP-адрес, доступный только через частную конечную точку Azure, расположенную в той же виртуальной сети. Любая виртуальная машина в той же виртуальной сети может приватно взаимодействовать с плоскостем управления через частную конечную точку. Уровень управления или сервер API размещается в управляемой Azure подписке, а кластер AKS и пулы узлов находятся в подписке клиента.

На следующей схеме показана конфигурация частного кластера.

Схема с частным кластером AKS.

Скачайте файл Visio для этой архитектуры.

Чтобы подготовить частный кластер AKS, поставщик ресурсов AKS создает полное доменное имя (FQDN) для группы ресурсов узла в частной зоне DNS. При необходимости AKS также может создать общедоступное полное доменное имя с соответствующей записью адреса (A) в общедоступной зоне DNS Azure. Узлы агента используют A запись в частной зоне DNS для разрешения IP-адреса частной конечной точки для связи с сервером API.

Поставщик ресурсов AKS может создать частную зону DNS в группе ресурсов узла или создать частную зону DNS и передать его идентификатор ресурса в систему подготовки. Вы можете создать частный кластер при использовании Terraform с Azure, Bicep, шаблонами ARM, Azure CLI, модулем Azure PowerShell или REST API Azure для создания кластера.

Вы можете включить общедоступное полное доменное имя для сервера API во время подготовки или с помощью команды az aks update с --enable-public-fqdn параметром в существующих кластерах. Если вы включите общедоступное полное доменное имя, любая виртуальная машина, которая обращается к серверу, например локально размещенный агент Azure DevOps или локальный GitHub Actions, должна находиться в той же виртуальной сети, где размещен кластер, или в сети, подключенной через пиринг виртуальной сети или VPN типа "сеть — сеть".

Для частного кластера AKS отключите общедоступное полное доменное имя сервера API. Чтобы взаимодействовать с частной плоскостей управления, виртуальная машина должна находиться в одной виртуальной сети или в одноранговой виртуальной сети с подключением виртуальной сети к частной зоне DNS. Запись A в частной зоне DNS разрешает полное доменное имя сервера API на IP-адрес частной конечной точки, который взаимодействует с базовой плоскостей управления. Дополнительные сведения см. в статье Создание частного кластера службы Kubernetes Azure.

Варианты развертывания частного кластера

Поставщик ресурсов AKS предоставляет следующие параметры для настройки развертывания частного кластера AKS:

  • authorizedIpRanges (string) задает допустимые диапазоны IP-адресов в формате CIDR.
  • disableRunCommand (boolean) указывает, следует ли отключить run команду для кластера.
  • enablePrivateCluster (логическое значение) указывает, следует ли создавать кластер как закрытый.
  • enablePrivateClusterPublicFQDN (boolean) указывает, следует ли создавать другое общедоступное полное доменное имя для частного кластера.
  • privateDnsZone (string) указывает частную зону DNS в группе ресурсов узла. Если значение не указано, поставщик ресурсов создает зону. Можно указать следующие значения:
    • По умолчанию устанавливается значение System.
    • None по умолчанию используется общедоступный DNS, поэтому AKS не создает частную зону DNS.
    • <Your own private DNS zone resource ID> использует частную зону DNS, созданную в формате privatelink.<region>.azmk8s.io или <subzone>.privatelink.<region>.azmk8s.io.

В следующей таблице показаны параметры конфигурации DNS для развертывания частного кластера AKS:

параметры зоны Частная зона DNS enablePrivateClusterPublicFQDN: true enablePrivateClusterPublicFQDN: false
Системные Узлы агента и любые другие виртуальные машины в виртуальной сети кластера AKS или любой виртуальной сети, подключенной к частной зоне DNS, используйте запись частной зоны A DNS для разрешения частного IP-адреса частной конечной точки.

Любая другая виртуальная машина использует общедоступное полное доменное имя сервера API.
Узлы агента и любые другие виртуальные машины в виртуальной сети кластера AKS или любой виртуальной сети, подключенной к частной зоне DNS, используйте запись частной зоны A DNS для разрешения частного IP-адреса частной конечной точки.

Полное доменное имя сервера общедоступного API не доступно.
Не допускается Все виртуальные машины, включая узлы агента, используйте общедоступное полное доменное имя сервера API, доступного через A запись в общедоступной зоне DNS, управляемой Azure. Неправильная конфигурация. Для разрешения имен сервера API в частном кластере AKS требуется по крайней мере общедоступная или частная зона DNS.
<Собственный идентификатор ресурса частной зоны DNS> Узлы агента и любые другие виртуальные машины в виртуальной сети кластера AKS или любой виртуальной сети, подключенной к частной зоне DNS, используйте запись частной зоны A DNS для разрешения частного IP-адреса частной конечной точки.

Все остальные виртуальные машины используют общедоступное полное доменное имя сервера API.
Узлы агента и любые другие виртуальные машины в виртуальной сети кластера AKS или любой виртуальной сети, подключенной к частной зоне DNS, используйте запись частной зоны A DNS для разрешения частного IP-адреса частной конечной точки.

Полное доменное имя сервера общедоступного API не доступно.

Подключение к частному кластеру и управление ими

Существует несколько вариантов установки сетевого подключения к частному кластеру.

  • Создайте виртуальные машины в той же виртуальной сети, что и кластер AKS.

  • Используйте виртуальные машины в отдельной виртуальной сети и настройте пиринг виртуальных сетей с виртуальной сетью кластера AKS.

  • Используйте подключение Azure ExpressRoute или VPN.

  • Используйте команду Azure CLI az aks command invoke для выполнения kubectl и helm команд в частном кластере без прямого подключения к кластеру.

  • Используйте подключение к частной конечной точке Azure.

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

Бастион Azure можно использовать в той же виртуальной сети или одноранговой виртуальной сети для подключения к виртуальной машине управления прыжками. Бастион Azure — это полностью управляемая платформа как услуга (PaaS), которая позволяет подключаться к виртуальной машине с помощью браузера и портал Azure. Бастион Azure обеспечивает безопасный и простой протокол удаленного рабочего стола (RDP) или подключение к виртуальной машине Secure Shell (SSH) через tls непосредственно из портал Azure. Если виртуальные машины подключаются через Бастион Azure, они не нуждаются в общедоступном IP-адресе, агенте или специальном клиентском программном обеспечении.

Вы также можете использовать команду az aks для выполнения kubectl или helm команд в частном кластере AKS, не подключаясь к виртуальной машине jumpbox.

Авторизованные диапазоны IP-адресов

Второй вариант повышения безопасности кластера и минимизации атак на сервер API — использовать авторизованные диапазоны IP-адресов. Авторизованные IP-адреса ограничивают доступ к плоскости управления общедоступного кластера AKS известному списку IP-адресов и CIDR. При использовании этого параметра сервер API по-прежнему предоставляется публично, но доступ ограничен. Дополнительные сведения см. в разделе "Безопасный доступ к серверу API", используя авторизованные диапазоны IP-адресов в Служба Azure Kubernetes (AKS).

Следующая az aks update команда Azure CLI разрешает диапазоны IP-адресов:

 az aks update \
     --resource-group myResourceGroup \
     --name myAKSCluster \
     --api-server-authorized-ip-ranges  73.140.245.0/24

Рекомендации по подключению AKS

  • Частный кластер AKS обеспечивает более высокую безопасность и изоляцию, чем авторизованные IP-адреса. Однако нельзя преобразовать существующий общедоступный кластер AKS в частный кластер. Вы можете включить авторизованные IP-адреса для любого существующего кластера AKS.

  • Не удается применить авторизованные диапазоны IP-адресов к конечной точке частного сервера API. Авторизованные IP-адреса применяются только к общедоступному серверу API.

  • Частные кластеры не поддерживают агенты, размещенные в Azure DevOps. Рассмотрите возможность использования локальных агентов.

  • Чтобы включить Реестр контейнеров Azure для работы с частным кластером AKS, настройте приватный канал для реестра контейнеров в виртуальной сети кластера. Кроме того, настройте пиринг между виртуальной сетью реестра контейнеров и виртуальной сетью частного кластера.

  • Ограничения службы Приватного канала Azure применимы к частным кластерам.

  • Если удалить или изменить частную конечную точку в подсети клиента частного кластера, кластер перестанет работать.

Соавторы

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

Основные авторы:

Другие участник:

Чтобы просмотреть недоступные профили LinkedIn, войдите в LinkedIn.

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

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