Yandex.Cloud
  • Сервисы
  • Почему Yandex.Cloud
  • Сообщество
  • Решения
  • Тарифы
  • Документация
  • Связаться с нами
Подключиться
Yandex Managed Service for Kubernetes
  • Начало работы
  • Пошаговые инструкции
    • Все инструкции
    • Подключение к узлу по SSH
    • Создание файла конфигурации
    • Сетевые сценарии
      • Обеспечение доступа к приложению, запущенному в кластере Kubernetes
      • Работа с сетевыми политиками кластера Kubernetes
    • Шифрование секретов
    • Работа с постоянными томами
      • Динамическая подготовка тома
      • Статическая подготовка тома
      • Управление классами хранилищ
      • Увеличение размера тома
      • Подключение тома в блочном режиме
    • Управление кластером Kubernetes
      • Добавление учетных данных кластера Kubernetes в конфигурационный файл kubectl
      • Получение информации о кластере Kubernetes
      • Создание кластера Kubernetes
      • Изменение кластера Kubernetes
      • Удаление кластера Kubernetes
    • Управление группой узлов
      • Получение информации о группе узлов
      • Создание группы узлов
      • Изменение группы узлов
      • Удаление группы узлов
  • Сценарии использования
    • Интеграция с Container Registry
    • Запуск рабочих нагрузок с GPU
    • Резервное копирование в Object Storage
  • Концепции
    • Взаимосвязь ресурсов сервиса
    • Релизные каналы и обновления
    • Использование объектов API Kubernetes
      • Том
      • Сервис
    • Группа узлов
      • Автоматическое масштабирование группы узлов
      • Расселение подов с узла
      • Динамическое резервирование ресурсов для узла
      • Группы узлов с GPU
    • Сетевые политики кластера Kubernetes
    • Квоты и лимиты
  • Управление доступом
  • Правила тарификации
  • Справочник API
    • Аутентификация в API
    • gRPC
      • Обзор
      • ClusterService
      • NodeGroupService
      • VersionService
      • OperationService
    • REST
      • Обзор
      • Cluster
        • Обзор
        • create
        • delete
        • get
        • list
        • listNodeGroups
        • listOperations
        • update
      • NodeGroup
        • Обзор
        • create
        • delete
        • get
        • list
        • listOperations
        • update
      • Version
        • Обзор
        • list
  • Вопросы и ответы
  1. Пошаговые инструкции
  2. Сетевые сценарии
  3. Работа с сетевыми политиками кластера Kubernetes

Работа с сетевыми политиками кластера Kubernetes

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

Чтобы проверить работу сетевых политик Kubernetes, выполните следующие действия.

Создайте кластер Kubernetes

При создании кластера Kubernetes необходимо включить использование сетевых политик, чтобы задействовать контроллер сетевых политик Calico:

  • В консоли управления, выбрав опцию Включить сетевые политики.
  • С помощью CLI, указав флаг --enable-network-policy.
  • С помощью метода create для ресурса Cluster.
Как создать кластер Kubernetes
Консоль управления
CLI
API
  1. В консоли управления выберите каталог, в котором будет создан кластер Kubernetes.
  2. В списке сервисов выберите Managed Service for Kubernetes.
  3. Нажмите кнопку Создать кластер.
  4. Введите имя кластера Kubernetes.
  5. Укажите Сервисный аккаунт для ресурсов, который будет использоваться для создания ресурсов.
  6. Укажите Сервисный аккаунт для узлов, который будет использоваться узлами для доступа к реестру Docker-образов.
  7. Укажите релизный канал.
  8. В блоке Конфигурация мастера:
    • В поле Версия Kubernetes выберите версию Kubernetes, которая будет установлена на мастере.

    • В поле Публичный адрес выберите способ назначения адреса:

      • Автоматически — чтобы назначить случайный IP-адрес из пула адресов Yandex.Cloud.
      • Без адреса — чтобы не назначать публичный IP-адрес.
    • В поле Тип мастера выберите тип мастера:

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

      Шаг доступен только для зонального мастера.

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

    • В поле Подсеть выберите подсеть, в которой будет создан мастер.

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

  9. В блоке Настройки окна обновлений:
    • В поле Частота обновлений / Отключение настройте окно для обновлений:
      • Отключено — отключение автоматических обновлений.
      • В любое время — обновления разрешены в любое время.
      • Ежедневно — обновления будут происходить во временном интервале, указанном в поле Время (UTC) и продолжительность.
      • В выбранные дни — обновления будут происходить во временном интервале, указанном в поле Расписание по дням.
  10. В блоке Сетевые настройки кластера:
    • Выберите опцию Включить сетевые политики для кластера Kubernetes, чтобы задействовать контроллер сетевых политик Calico.
  11. Нажмите кнопку Создать кластер.

Если у вас еще нет интерфейса командной строки Yandex.Cloud, установите и инициализируйте его.

По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name или --folder-id.

Создайте кластер Kubernetes:

yc managed-kubernetes cluster create 
  --name cluster-np \
  --service-account-name k8s \
  --node-service-account-name docker \
  --zone ru-central1-a \     
  --network-name network \
  --enable-network-policy

Где:

  • --name — имя кластера Kubernetes.
  • --service-account-id — уникальный идентификатор сервисного аккаунта для ресурсов. От его имени будут создаваться ресурсы, необходимые кластеру Kubernetes.
  • --node-service-account-id — уникальный идентификатор сервисного аккаунта для узлов. От его имени узлы будут скачивать из реестра необходимые Docker-образы.
  • --zone — зона доступности.
  • --network-name — имя сети.
  • --enable-network-policy — опция включения сетевых политик.

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

done (8m52s)
id: abcdef1ghi23jklmno4
folder_id: p5q67rs89tuv1wxyzab
created_at: "2020-09-14T15:56:31Z"
name: k8s-np
status: RUNNING
health: HEALTHY
network_id: cdefghig01klmnopqrs1
master:
  zonal_master:
    zone_id: ru-central1-a
    internal_v4_address: 10.130.0.24
  version: "1.17"
  endpoints:
    internal_v4_endpoint: https://10.130.0.24
  master_auth:
    cluster_ca_certificate: |
      -----BEGIN CERTIFICATE-----
      MIICyDCCAbCgAwIBAgIBADANBgkqhkiG9w0BAQsFADAVMRMwEQYDVQQDEwprdWJl
      ...
      IyO849nznkMKNHzxvQKnXSNNTmbPu9DmPx8MsdI2vcklBbtkiHtc6U3y25I=
      -----END CERTIFICATE-----
  version_info:
    current_version: "1.17"
  maintenance_policy:
    auto_upgrade: true
    maintenance_window:
      anytime: {}
ip_allocation_policy:
  cluster_ipv4_cidr_block: 10.112.0.0/16
  node_ipv4_cidr_mask_size: "24"
  service_ipv4_cidr_block: 10.96.0.0/16
service_account_id: ajedclfluactb5868n99
node_service_account_id: ajeo8f063dmnicot7t7j
release_channel: REGULAR
network_policy:
  provider: CALICO

Чтобы создать кластер Kubernetes, воспользуйтесь методом create для ресурса Cluster.

Создайте пространство имен Kubernetes

Создайте пространство имен с помощью объект API Kubernetes Namespace:

kubectl create ns policy-test

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

namespace/policy-test created

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

Чтобы создать под, используйте объект API Kubernetes Deployment.

  1. Создайте под с веб-сервером nginx в пространстве имен policy-test:

    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>
    <title>Welcome to nginx!</title>
    <style>
        body {
            width: 35em;
            margin: 0 auto;
            font-family: Tahoma, Verdana, Arial, sans-serif;
        }
    </style>
    </head>
    <body>
    <h1>Welcome to nginx!</h1>
    <p>If you see this page, the nginx web server is successfully installed and
    working. Further configuration is required.</p>
    
    <p>For online documentation and support please refer to
    <a href="http://nginx.org/">nginx.org</a>.<br/>
    Commercial support is available at
    <a href="http://nginx.com/">nginx.com</a>.</p>
    
    <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/default-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
      ingress:
        - from:
          - podSelector:
              matchLabels:
                run: access
    EOF
    

    Примечание

    Сетевые политики разрешат трафик от подов с меткой run: access к подам с меткой 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 разрешено подключаться подам с меткой 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
    
В этой статье:
  • Создайте кластер Kubernetes
  • Создайте пространство имен Kubernetes
  • Создайте сервис nginx
  • Изолируйте поды с помощью сетевых политик
  • Протестируйте изоляцию
  • Создайте сетевые политики, разрешающие доступ к сервису
  • Проверьте, что сетевая изоляция для других подов работает
Language
Вакансии
Политика конфиденциальности
Условия использования
© 2021 ООО «Яндекс.Облако»