Как сделать развертывание Kubernetes доступным только из определенного развертывания?

У меня есть два развертывания Kubernetes (DeploymentA и DeploymentB), и мне интересно, есть ли способ занести в белый список весь входящий трафик от DeploymentB в DeploymentA? Так что доступ к DeploymentA можно получить только через DeploymentB.

Службу ClusterIP можно использовать для доступа к развертываниям для внутренней связи в Kubernetes, но как я могу внести в белый список все запросы, поступающие из определенного развертывания (или его модулей) в другом развертывании? Есть ли способ, например, получить все возможные IP-адреса модулей определенного развертывания, чтобы внести их в белый список?

Изменить 1:

У меня есть веб-приложение, открытое для Интернета, но определенная его часть должна быть доступна только из определенного развертывания. Чтобы реализовать это, мне нужно указать IP-адреса или как-то иначе имена развертываний, к которым должен быть доступ.

Спасибо!




Ответы (2)


Вы можете использовать политику сети

Сетевая политика - это спецификация того, как группам модулей разрешено взаимодействовать друг с другом и с другими конечными точками сети.

Ресурсы NetworkPolicy используют метки для выбора модулей и определяют правила, определяющие, какой трафик разрешен для выбранных модулей.

person hoque    schedule 04.06.2020
comment
Спасибо за ваш ответ. Это могло быть возможным решением, но не совсем то, что я ищу. Пожалуйста, проверьте редактирование 1 для получения дополнительной информации. - person Patric; 04.06.2020

Приведенная ниже сетевая политика должна помочь разрешить трафик только от определенных модулей развертывания (depA) к модулям depB, поскольку ваш вопрос касается конкретной маршрутизации трафика от развертывания к развертыванию или будет разрешать трафик обратно в Интернет, поскольку у нас есть правило выхода, которое разрешает трафик на UDP и TCP

apiVersion: networking.k8s.io/v1
metadata:
  name: foo-allow-to-hello
spec:
  policyTypes:
  - Ingress
  - Egress 
  podSelector:
    matchLabels:
      app: depbB
  ingress:
  - from:
    - podSelector:
        matchLabels:
          app: depA
  egress:
  - to:
    - podSelector:
        matchLabels:
          app: depA
    - ports
      - protocol: UDP
        port: 53
     - protocol: TCP 
       port: 53

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

controllers/nginx-deployment.yaml 

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: deploymentA
spec:
  replicas: 3
  selector:
    matchLabels:
      app: depA 
  template:
    metadata:
      labels:
        app: depA 
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80

person DBSand    schedule 01.08.2020