Изолировать сеть модулей k8s между пространствами имен

Мне нужно изолировать сеть модулей k8s между пространствами имен.

pod-1 работающий в пространстве имен ns-1 не может получить доступ к сети из pod-2 в пространстве имен ns-2.

Целью этого является создание песочницы между пространствами имен и предотвращение сетевого взаимодействия между конкретными модулями на основе их меток.

Я пытался сделать это с помощью сетевая политика, но мои знания о k8s немного "сыры".

Это возможно? Может ли кто-нибудь привести пример?


Я пытаюсь заблокировать все коммуникации внутри сети и разрешить доступ в Интернет, используя это:

spec:
  egress:
  - ports:
    - port: 53
      protocol: UDP
    to:
    - ipBlock:
    cidr: 0.0.0.0/0
        except:
        - 10.0.0.0/8
        - 192.168.0.0/16
        - 172.16.0.0/12
        - 172.40.0.0/16
    - namespaceSelector: {}
      podSelector:
        matchLabels:
          k8s-app: kube-dns
  podSelector:
    matchExpressions:
    - key: camel.apache.org/integration
      operator: Exists
  policyTypes:
  - Egress

Но когда я получаю доступ к чему-то вроде google.com, он правильно разрешает DNS, но не подключается, что приводит к тайм-ауту.

Намерение политики состоит в том, чтобы:

  • заблокировать доступ ко всем частным сетям
  • разрешить только преобразователь имен серверов kube-dns на порт 53
  • но разрешить всем доступ к интернету

Что я делаю не так?

Какую версию Kubernetes вы использовали и как настроили кластер (ваш файл конфигурации)? Вы использовали установку на «голое железо» или какого-то облачного провайдера? Важно воспроизвести вашу проблему.

Mykola 16.03.2022 09:28

Я использую minikube для локального тестирования, а prod env — это AWS EKS.

Beto Neto 17.03.2022 18:43
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
1
2
68
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Настройки Сетевые политики очень гибкие, и вы можете настроить их по-разному. Если мы посмотрим на ваш случай, то вы должны создать 2 политики для своего кластера. Во-первых, это сетевая политика пространства имен для вашего производства, а во-вторых, для вашей песочницы. Конечно, прежде чем приступить к изменению вашей сети, убедитесь, что вы выбрали, установили и настроили сеть провайдер.. Это пример файла NetworkPolicy .yaml для изоляции вашего имени NameSpace:

# You can create a "default" policy for a namespace which prevents all ingress
# AND egress traffic by creating the following NetworkPolicy in that namespace.
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default-deny-all
  namespace: YourSandbox
spec:
  podSelector: {}
  policyTypes:
  - Ingress
  - Egress

И после этого вы можете создать свой pod в этом NameSpace и он будет изолирован. Просто добавьте в файл конфигурации строку с именем NameSpace:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: service-c
  namespace: YourSandbox

И в этом примере мы добавляем доступ для подключения снаружи и внутри к определенному NameSpace и сервису:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: access-service-c
  namespace: YourSandbox
spec:
  podSelector:
    matchLabels:
      app: YourSandboxService
  ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          env: YourProdactionNameSpase
    - podSelector:
        matchLabels:
          app: NameOfYourService
   egress:
   - to:
     - namespaceSelector:
         matchLabels:
           name: YourProdactionNameSpase
     - podSelector:
         matchLabels:
           app: NameOfYourService

Используйте эту сетевую политику ip Block, чтобы настроить выход, блокирующий IP-адреса локальной частной сети по умолчанию, и разрешить остальную часть доступа в Интернет.

egress:
  - to:
    - ipBlock:
        cidr: 0.0.0.0/0
        except: 192.168.40.0/24 #Your pul of local private network IPs

Если вы используете длину префикса подсети /32, это означает, что вы ограничиваете область действия правила только этим одним IP-адресом.

Можете ли вы привести пример, как использовать ipBlock для настройки egress блокировки IP-адресов локальной частной сети по умолчанию и разрешить остальным доступ в Интернет?

Beto Neto 21.03.2022 12:32

Не могли бы вы мне ответить, помогло ли вам мое решение? Если да, вы можете следовать рекомендациям Переполнение стека по оценке ответов.

Mykola 24.03.2022 13:30

Извините за задержку... Я пытаюсь изолировать свои модули в своей интрасети и освободить Интернет с помощью этого pastebin.com/TU8GTC40, но это не работает. Вы можете помочь?

Beto Neto 01.04.2022 16:24

Другие вопросы по теме