Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • Машинное обучение
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Истории успеха
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Документация
  • Блог
Проект Яндекса
© 2025 ООО «Яндекс.Облако»
Yandex Managed Service for Kubernetes
  • Сопоставление с другими сервисами Yandex Cloud
  • Начало работы
    • Все инструкции
    • Подключение к узлу по SSH
    • Подключение к узлу через OS Login
    • Обновление Kubernetes
    • Настройка автомасштабирования
      • Обеспечение доступа к приложению, запущенному в кластере Kubernetes
      • Настройка контроллера сетевых политик Calico
      • Настройка контроллера сетевых политик Cilium
      • Настройка NodeLocal DNS для контроллера сетевых политик Cilium
      • Создание сетевого балансировщика с помощью Ingress-контроллера NGINX
    • Подключение внешних узлов к кластеру
  • Управление доступом
  • Правила тарификации
  • Справочник Terraform
  • Метрики Monitoring
  • Аудитные логи Audit Trails
  • История изменений
  • Обучающие курсы

В этой статье:

  • Перед началом работы
  • Создайте сервис nginx
  • Изолируйте поды с помощью сетевых политик
  • Протестируйте изоляцию
  • Создайте сетевые политики, разрешающие доступ к сервису
  • Проверьте, что сетевая изоляция для других подов работает
  • Удалите созданные ресурсы
  1. Пошаговые инструкции
  2. Сетевые сценарии
  3. Настройка контроллера сетевых политик Calico

Настройка контроллера сетевых политик Calico

Статья создана
Yandex Cloud
Обновлена 2 декабря 2024 г.
  • Перед началом работы
  • Создайте сервис nginx
  • Изолируйте поды с помощью сетевых политик
    • Протестируйте изоляцию
  • Создайте сетевые политики, разрешающие доступ к сервису
    • Проверьте, что сетевая изоляция для других подов работает
  • Удалите созданные ресурсы

Calico — это плагин для Kubernetes с открытым исходным кодом, с помощью которого можно управлять сетевыми политиками Kubernetes. Calico расширяет стандартные возможности сетевых политик Kubernetes, что позволяет:

  • Применять политики к любому объекту: поду, контейнеру, виртуальной машине или интерфейсу.
  • Указывать в правилах политики конкретное действие: запретить, разрешить, логировать.
  • Указывать в качестве цели или источника: порт, диапазон портов, протоколы, HTTP- и ICMP-атрибуты, IP-адрес или подсеть и другие объекты.
  • Регулировать прохождение трафика с помощью настроек DNAT и политик проброса трафика.

Чтобы настроить контроллер сетевых политик Calico:

  1. Создайте сервис nginx.
  2. Изолируйте поды с помощью сетевых политик.
  3. Создайте сетевые политики, разрешающие доступ к сервису.

Если созданные ресурсы вам больше не нужны, удалите их.

Перед началом работыПеред началом работы

  1. Создайте инфраструктуру:

    Вручную
    Terraform
    1. Создайте облачную сеть и подсеть.

    2. Создайте группы безопасности для кластера Managed Service for Kubernetes и входящих в него групп узлов.

      Важно

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

    3. Создайте кластер Managed Service for Kubernetes и группу узлов любой подходящей конфигурации. При создании укажите сеть, подсеть и группы безопасности, подготовленные заранее. Также в кластере задействуйте контроллер сетевых политик Calico:

      • В консоли управления, выбрав опцию Включить сетевые политики.
      • С помощью CLI, указав флаг --enable-network-policy.
      • С помощью метода create для ресурса Cluster.
    1. Если у вас еще нет Terraform, установите его.

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

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

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

    5. Скачайте в ту же рабочую директорию файл конфигурации кластера Managed Service for Kubernetes k8s-calico.tf. В файле описаны:

      • Сеть.

      • Подсеть.

      • Кластер Managed Service for Kubernetes.

      • Сервисный аккаунт, необходимый для работы кластера Managed Service for Kubernetes и группы узлов.

      • Группы безопасности, которые содержат необходимые правила для кластера Managed Service for Kubernetes и входящих в него групп узлов.

        Важно

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

    6. Укажите в файле конфигурации:

      • Идентификатор каталога.
      • Версию Kubernetes для кластера Managed Service for Kubernetes и групп узлов.
      • CIDR кластера Managed Service for Kubernetes.
      • Имя сервисного аккаунта кластера Managed Service for Kubernetes.
    7. Выполните команду terraform init в директории с конфигурационными файлами. Эта команда инициализирует провайдер, указанный в конфигурационных файлах, и позволяет работать с ресурсами и источниками данных провайдера.

    8. Проверьте корректность файлов конфигурации Terraform с помощью команды:

      terraform validate
      

      Если в файлах конфигурации есть ошибки, Terraform на них укажет.

    9. Создайте необходимую инфраструктуру:

      1. Выполните команду для просмотра планируемых изменений:

        terraform plan
        

        Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.

      2. Если вас устраивают планируемые изменения, внесите их:

        1. Выполните команду:

          terraform apply
          
        2. Подтвердите изменение ресурсов.

        3. Дождитесь завершения операции.

      В указанном каталоге будут созданы все требуемые ресурсы. Проверить появление ресурсов и их настройки можно в консоли управления.

  2. Установите kubectl и настройте его на работу с созданным кластером.

  3. Создайте пространство имен policy-test в кластере Managed Service for Kubernetes.

Создайте сервис nginxСоздайте сервис nginx

  1. Создайте под с веб-сервером nginx в пространстве имен policy-test. Используйте объект API Kubernetes Deployment:

    kubectl create deployment --namespace=policy-test nginx --image=nginx
    

    Результат:

    deployment.apps/nginx created
    
  2. Запустите под с nginx как сервис Kubernetes:

    kubectl expose --namespace=policy-test deployment nginx --port=80
    

    Результат:

    service/nginx exposed
    
  3. Убедитесь, что веб-сервер nginx доступен. Для этого создайте под access:

    kubectl run --namespace=policy-test access --rm -ti --image busybox /bin/sh
    

    На поде access откроется shell-сессия:

    If you don't see a command prompt, try pressing enter.
    / #
    
  4. Подключитесь к веб-серверу nginx через сессию на поде access:

    wget -q nginx -O -
    

    Веб-сервер nginx доступен:

    <!DOCTYPE html>
    <html>
    <head>
    ...
    <p><em>Thank you for using nginx.</em></p>
    </body>
    </html>
    
  5. Выйдите из пода:

    / # exit
    

    Под удален:

    Session ended, resume using 'kubectl attach access -c access -i -t' command when the pod is running
    pod "access" deleted
    

Изолируйте поды с помощью сетевых политикИзолируйте поды с помощью сетевых политик

Изолируйте пространство имен policy-test. После этого контроллер сетевых политик Calico предотвратит подключения к подам в этом пространстве имен:

kubectl create -f - <<EOF
kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
  name: deny
  namespace: policy-test
spec:
  podSelector:
    matchLabels: {}
EOF

Сетевые политики созданы:

networkpolicy.networking.k8s.io/deny created

Протестируйте изоляциюПротестируйте изоляцию

  1. Сетевые политики изолировали веб-сервер nginx. Чтобы это проверить, создайте под access:

    kubectl run --namespace=policy-test access --rm -ti --image busybox /bin/sh
    

    На поде access откроется shell-сессия:

    If you don't see a command prompt, try pressing enter.
    / #
    
  2. Проверьте, есть ли у пода access доступ к веб-серверу nginx:

    wget -q --timeout=5 nginx -O -
    

    Соединение не установлено:

    wget: download timed out
    / #
    
  3. Выйдите из пода:

    / # exit
    

    Под удален:

    Session ended, resume using 'kubectl attach access -c access -i -t' command when the pod is running
    pod "access" deleted
    

Создайте сетевые политики, разрешающие доступ к сервисуСоздайте сетевые политики, разрешающие доступ к сервису

Разрешите доступ к веб-серверу nginx с помощью сетевых политик. Сетевые политики разрешат подключаться только поду access.

  1. Создайте сетевые политики access-nginx:

    kubectl create -f - <<EOF
    kind: NetworkPolicy
    apiVersion: networking.k8s.io/v1
    metadata:
      name: access-nginx
      namespace: policy-test
    spec:
      podSelector:
        matchLabels:
          app: nginx
      policyTypes:
      - Ingress
      - Egress
      ingress:
        - from:
          - podSelector:
              matchLabels:
                run: access
      egress:
        - to:
          - podSelector:
              matchLabels:
                app: nginx
    EOF
    

    Примечание

    Сетевые политики разрешат трафик от подов с Kubernetes-меткой run: access к подам с Kubernetes-меткой app: nginx. Метки автоматически добавляются утилитой kubectl и основаны на имени ресурса.

    Сетевые политики созданы:

    networkpolicy.networking.k8s.io/access-nginx created
    
  2. Создайте под access:

    kubectl run --namespace=policy-test access --rm -ti --image busybox /bin/sh
    

    На поде access откроется shell-сессия:

    If you don't see a command prompt, try pressing enter.
    / #
    
  3. Проверьте, есть ли у пода access доступ к веб-серверу nginx:

    wget -q --timeout=5 nginx -O -
    

    Соединение установлено:

    <!DOCTYPE html>
    <html>
    <head>
    <title>Welcome to nginx!</title>
    ...
    
  4. Выйдите из пода:

    / # exit
    

    Под удален:

    Session ended, resume using 'kubectl attach access -c access -i -t' command when the pod is running
    pod "access" deleted
    

Проверьте, что сетевая изоляция для других подов работаетПроверьте, что сетевая изоляция для других подов работает

В созданных сетевых политиках access-nginx разрешено подключаться подам с Kubernetes-меткой run: access.

  1. Создайте под без метки run: access:

    kubectl run --namespace=policy-test cant-access --rm -ti --image busybox /bin/sh
    

    На поде cant-access откроется shell-сессия:

    If you don't see a command prompt, try pressing enter.
    / #
    
  2. Проверьте, есть ли у пода cant-access доступ к веб-серверу nginx:

    wget -q --timeout=5 nginx -O -
    

    Соединение не установлено:

    wget: download timed out
    / #
    
  3. Выйдите из пода:

    / # exit
    

    Под удален:

    Session ended, resume using 'kubectl attach access -c access -i -t' command when the pod is running
    pod "cant-access" deleted
    
  4. Чтобы удалить данные примера, удалите пространство имен:

    kubectl delete ns policy-test
    

    Результат выполнения команды:

    namespace "policy-test" deleted
    

Удалите созданные ресурсыУдалите созданные ресурсы

Удалите ресурсы, которые вы больше не будете использовать, чтобы за них не списывалась плата:

Вручную
Terraform
  1. Удалите кластер Managed Service for Kubernetes.
  2. Если вы зарезервировали для кластера Managed Service for Kubernetes публичный статический IP-адрес, удалите его.
  1. В терминале перейдите в директорию с планом инфраструктуры.

    Важно

    Убедитесь, что в директории нет Terraform-манифестов с ресурсами, которые вы хотите сохранить. Terraform удаляет все ресурсы, которые были созданы с помощью манифестов в текущей директории.

  2. Удалите ресурсы:

    1. Выполните команду:

      terraform destroy
      
    2. Подтвердите удаление ресурсов и дождитесь завершения операции.

    Все ресурсы, которые были описаны в Terraform-манифестах, будут удалены.

Была ли статья полезна?

Предыдущая
Обеспечение доступа к приложению, запущенному в кластере Kubernetes
Следующая
Настройка контроллера сетевых политик Cilium
Проект Яндекса
© 2025 ООО «Яндекс.Облако»