Advanced
Тема интерфейса

Настройка сетевых политик для ограничения доступа к подам

Эта статья полезна?
Язык статьи: Русский
Показать оригинал
Страница переведена автоматически и может содержать неточности. Рекомендуем сверяться с английской версией.

Сетевые политики, разработанные Kubernetes, ограничивают доступ к подам. Это эквивалентно межсетевому экрану на уровне приложений для повышения сетевой безопасности. Возможности, поддерживаемые сетевыми политиками, зависят от возможностей сетевых дополнений кластера.

По умолчанию, если в пространстве имён нет политики, поды в этом пространстве имён принимают трафик из любого источника и отправляют трафик в любой пункт назначения.

Для сетевых политик доступны следующие селекторы:

  • namespaceSelector: выбирает определённые пространства имён, для которых все поды разрешены в качестве источников входящего трафика или пунктов назначения исходящего трафика.
  • podSelector: выбирает определённые поды в том же пространстве имён, что и сетвая политика, которые должны быть разрешены в качестве источников входящего трафика или пунктов назначения исходящего трафика.
  • IPBlock: выбирает определённые IP‑блоки, разрешённые в качестве источников входящего трафика или пунктов назначения исходящего трафика.

Связи между сетевыми политиками и типами кластеров

Тип кластера

CCE Standard Cluster

CCE Turbo Cluster

Сетевая модель

Tunnel

Cloud Native Network 2.0

NetworkPolicy

Включено по умолчанию

Отключено по умолчанию (Чтобы использовать сетевые политики, включите DataPlane V2 при создании кластера.)

Реализация плоскости данных

OpenvSwitch

eBPF

Версия кластера для входящих правил

Все версии

v1.27.16-r10, v1.28.15-r0, v1.29.10-r0, v1.30.6-r0, or later

Версия кластера для исходящих правил

v1.23 and later

Селектор для входящих правил

namespaceSelector

podSelector

namespaceSelector

podSelector

IPBlock

Селектор для исходящих правил

namespaceSelector

podSelector

IPBlock

Поддерживаемые ОС

EulerOS

CentOS

HCE OS 2.0

HCE OS 2.0

Сетевые политики IPv6

Не поддерживается

Поддерживается

Защищённые контейнеры

Не поддерживается

Не поддерживается

Объём IPBlock

Не ограничено

CIDR‑блоки и IP‑адреса узлов в контейнерном CIDR‑блоке не могут быть сконфигурированы.

Ограничить доступ к ClusterIP через метки рабочей нагрузки

Не поддерживается

Поддерживается

Ограничить внутренний CIDR‑блок облачного сервера 100.125.0.0/16

Поддерживается

Не поддерживается

SCTP

Не поддерживается

Не поддерживается

Всегда разрешать доступ к подам на узле с других узлов

Поддерживается

Поддерживается

Настроить EndPort в сетевых политиках

Не поддерживается

Не поддерживается

Note
  • CCE DataPlane V2 выпускается с ограничениями. Чтобы использовать эту функцию, отправьте сервис‑заявку в CCE.
  • Защищённые контейнеры (например Kata в качестве среды выполнения) не поддерживаются сетевыми политиками.
  • Если вы обновляете CCE стандартный кластер с туннельной сетью до версии, поддерживающей правила egress в режиме in-place, правила не будут работать, потому что ОС узла не обновлена. В этом случае сбросьте узел.
  • Когда сетевая политика включена для кластера, использующего туннельную сеть, IP‑адрес источника пода, обращающегося к CIDR‑блоку Service, будет записан в необязательное поле данных о reported IP address. Это позволяет настроить правила сетевой политики на целевом поде, учитывая IP‑адрес источника пода.

Использование входящих правил через YAML

  • Сценарий 1: Использовать сетевую политику для ограничения доступа к поду только подами с определёнными метками.

    Рисунок 1 podSelector


    Под с меткой role=db разрешает доступ к своему порту 6379 только подам с меткой role=frontend. Чтобы выполнить это, выполните следующие операции:

    1. Создайте access-demo1.yaml файл.
      vim access-demo1.yaml

      Содержание файла:

      apiVersion: networking.k8s.io/v1
      kind: NetworkPolicy
      metadata:
      name: access-demo1
      namespace: default
      spec:
      podSelector: # The rule takes effect for pods with the role=db label.
      matchLabels:
      role: db
      ingress: # This is an ingress rule.
      - from:
      - podSelector: # Only allow the access of the pods labeled with role=frontend.
      matchLabels:
      role: frontend
      ports: # Only TCP can be used to access port 6379.
      - protocol: TCP
      port: 6379
    2. Выполните следующую команду, чтобы создать сетевую политику на основе access-demo1.yaml файл:
      kubectl apply -f access-demo1.yaml

      Ожидаемый вывод:

      networkpolicy.networking.k8s.io/access-demo1 created
  • Сценарий 2: Использовать сетевую политику для ограничения доступа к поду только подами в определённом пространстве имён.

    Рисунок 2 namespaceSelector


    Под с меткой role=db разрешает доступ к своему порту 6379 только подам в пространстве имён с меткой project=myproject. Чтобы выполнить это, выполните следующие операции:

    1. Создайте access-demo2.yaml файл.
      vim access-demo2.yaml

      Содержание файла:

      apiVersion: networking.k8s.io/v1
      kind: NetworkPolicy
      metadata:
      name: access-demo2
      spec:
      podSelector: # The rule takes effect for pods with the role=db label.
      matchLabels:
      role: db
      ingress: # This is an ingress rule.
      - from:
      - namespaceSelector: # Only allow the access of the pods in the namespace labeled with project=myproject.
      matchLabels:
      project: myproject
      ports: # Only TCP can be used to access port 6379.
      - protocol: TCP
      port: 6379
    2. Выполните следующую команду, чтобы создать сетевую политику на основе access-demo2.yaml file:
      kubectl apply -f access-demo2.yaml

      Expected output:

      networkpolicy.networking.k8s.io/access-demo2 created

Использование правил Egress через YAML

Note

Кластеры версии v1.23 и более поздних, использующие туннельную сеть, поддерживают правила egress. Поддерживаются только узлы с CentOS 7.x или HCE OS 2.0.

Правила egress поддерживаются только кластерами CCE Turbo версии v1.27.16-r10, v1.28.15-r0, v1.29.10-r0, v1.30.6-r0 и более поздними при включённом DataPlane V2. Кроме того, узлы в этих кластерах должны работать только под HCE OS 2.0.

  • Сценарий 1: Использовать сетевую политику для ограничения доступа Под к определённым адресам.

    Figure 3 IPBlock


    Под с меткой role=db разрешает доступ только к CIDR‑блоку 172.16.0.0/16, исключая 172.16.0.40/32 внутри него. Для этого выполните следующие операции:

    1. Создайте access-demo3.yaml файл.
      vim access-demo3.yaml

      Содержимое файла:

      apiVersion: networking.k8s.io/v1
      kind: NetworkPolicy
      metadata:
      name: access-demo3
      namespace: default
      spec:
      policyTypes: # Must be specified for an egress rule.
      - Egress
      podSelector: # The rule takes effect for pods with the role=db label.
      matchLabels:
      role: db
      egress: # Egress rule
      - to:
      - ipBlock:
      cidr:172.16.0.0/16 # Allow access to this CIDR block in the outbound direction.
      except:
      - 172.16.0.40/32 # Block access to this address in the CIDR block.
    2. Выполните следующую команду, чтобы создать сетевую политику на основе access-demo3.yaml file:
      kubectl apply -f access-demo3.yaml

      Expected output:

      networkpolicy.networking.k8s.io/access-demo3 created
  • Сценарий 2: Использовать сетевую политику, чтобы ограничить доступ к Поду только Подами с определёнными метками, и этот Под может получать доступ только к определённым Подам.

    Figure 4 Использование как ingress, так и egress


    Под с меткой role=db разрешает доступ к порту 6379 только от Подов с меткой role=frontend, и этот Под может получать доступ только к Подам с меткой role=web. Вы можете использовать то же правило для настройки как ingress, так и egress в сетевой политике. Для этого выполните следующие операции:

    1. Создайте access-demo4.yaml файл.
      vim access-demo4.yaml

      Содержимое файла:

      apiVersion: networking.k8s.io/v1
      kind: NetworkPolicy
      metadata:
      name: access-demo4
      namespace: default
      spec:
      policyTypes:
      - Ingress
      - Egress
      podSelector: # The rule takes effect for pods with the role=db label.
      matchLabels:
      role: db
      ingress: # This is an ingress rule.
      - from:
      - podSelector: # Only allow the access of the pods labeled with role=frontend.
      matchLabels:
      role: frontend
      ports: # Only TCP can be used to access port 6379.
      - protocol: TCP
      port: 6379
      egress: # Egress rule
      - to:
      - podSelector: # Only pods with the role=web label can be accessed.
      matchLabels:
      role: web
    2. Выполните следующую команду, чтобы создать сетевую политику на основе access-demo4.yaml file:
      kubectl apply -f access-demo4.yaml

      Expected output:

      networkpolicy.networking.k8s.io/access-demo4 created

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

  1. Войдите в консоль CCE и нажмите название кластера, чтобы перейти в консоль кластера.
  2. Выберите Политики в навигационной панели, нажмите Сетевые политики вкладку и нажмите Создать сетевую политику в правом верхнем углу.

    • Имя политики: Укажите имя сетевой политики.
    • Пространство имен: Выберите пространство имен, в котором будет применяться сетевая политика.
    • Селектор: Введите метку, выберите Под, к которому будет привязка, и нажмите Добавить. Вы также можете нажать Reference Workload Label чтобы использовать метку существующей рабочей нагрузки.
    • Входящее правило: Нажмите чтобы добавить входящее правило. Подробную информацию о параметрах см. в Table 1.

      Table 1 Добавление входящего правила

      Параметр

      Описание

      Протокол и порт

      Выберите тип протокола и порт. В настоящее время поддерживаются TCP и UDP.

      Исходный CIDR‑блок

      Для кластеров версии v1.27.16-r10, v1.28.15-r0, v1.29.10-r0, v1.30.6-r0 и более поздних версий с включённым DataPlane V2 можно настроить исходный CIDR‑блок.

      Указанный исходный CIDR‑блок разрешает трафик из целевого CIDR‑блока (можно указать несколько исключающих CIDR‑блоков). Разделяйте целевой и исключающие CIDR‑блоки вертикальной чертой (|). Если указано несколько исключающих CIDR‑блоков, разделяйте их запятыми (,). Например, 172.17.0.0/16|172.17.1.0/24,172.17.2.0/24 означает, что доступен 172.17.0.0/16, но недоступны 172.17.1.0/24 и 172.17.2.0/24.

      Исходное пространство имен

      Выберите пространство имен, объекты которого могут быть доступны. Если параметр не указан, объект принадлежит тому же пространству имен, что и текущая политика.

      Исходная метка Пода

      Разрешить доступ к Подам с этой меткой. Если параметр не указан, доступ возможен ко всем Подам в пространстве имен.

    • Исходящее правило: Нажмите чтобы добавить исходящее правило. Подробную информацию о параметрах см. в Table 2.

      Table 2 Добавление исходящего правила

      Параметр

      Описание

      Протокол и порт

      Выберите тип протокола и порт. В настоящее время поддерживаются TCP и UDP. Если параметр не указан, тип протокола не ограничивается.

      Целевой CIDR‑блок

      Позволяет направлять запросы в указанный CIDR‑блок (и не в исключающие CIDR‑блоки). Разделяйте целевой и исключающие CIDR‑блоки вертикальной чертой (|). Если указано несколько исключающих CIDR‑блоков, разделяйте их запятыми (,). Например, 172.17.0.0/16|172.17.1.0/24,172.17.2.0/24 означает, что доступен 172.17.0.0/16, но недоступны 172.17.1.0/24 и 172.17.2.0/24.

      Целевое пространство имен

      Выберите пространство имен, объекты которого могут быть доступны. Если параметр не указан, объект принадлежит тому же пространству имен, что и текущая политика.

      Целевая метка Пода

      Разрешить доступ к pod'ам с этой меткой. Если этот параметр не указан, доступ будет разрешен ко всем pod'ам в пространстве имён.

  3. Нажмите OK.