Блокировать доступ между пространствами имен, но разрешить доступ для внешнего трафика - PullRequest
1 голос
/ 13 мая 2019

У меня есть два пространства имен: prod и default. Я хочу отключить доступ к ресурсам внутри этих пространств имен (ресурсы из default NS не может получить доступ к ресурсам из prod, а ресурсы из prod не могут получить доступ к ресурсам из default) НО дают возможность доступа к этим ресурсам для внешнего трафика (входов).

# namespaces.yaml

---
kind: Namespace
apiVersion: v1
metadata:
  name: prod
  labels:
    tier: prod

---
kind: Namespace
apiVersion: v1
metadata:
  name: default
  labels:
    tier: infra
# network-policies.yaml

---
kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
  name: network
  namespace: prod
spec:
  podSelector: {}
  ingress:
    - from:
      - podSelector: {}
---
kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
  name: network
  namespace: default
spec:
  podSelector: {}
  ingress:
    - from:
      - namespaceSelector:
          matchLabels:
            tier: dev
      - namespaceSelector:
          matchLabels:
            tier: rc
# services.yaml

---
apiVersion: v1
kind: Service
metadata:
  name: {{ include "conference.appService" . }}
  labels:
    app: {{ include "conference.name" . }}
    release: {{ .Release.Name }}
spec:
  type: NodePort
  ports:
    - name: http
      port: 80
      targetPort: http
      protocol: TCP
  selector:
    app: {{ include "conference.name" . }}
    release: {{ .Release.Name }}
    role: app

Модули из prod имеют доступ к другим модулям внутри данного пространства имен. Бобы из default не имеют доступа к бобам внутри prod.

Когда я пытаюсь получить доступ к сервису из браузера, он блокируется. Когда я пытаюсь использовать переадресацию портов на службу внутри prod - все работает нормально.

Ответы [ 2 ]

1 голос
/ 13 мая 2019

Проблема была частично в сетевой политике.

---
kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
  name: network
  namespace: default
spec:
  podSelector: {}
  ingress:
    - from:
      - ipBlock:
          cidr: 0.0.0.0/0
      - podSelector: {}
      - namespaceSelector:
          matchLabels:
            tier: dev
      - namespaceSelector:
          matchLabels:
            tier: rc
  egress:
    - {}

Основная идея этого селектора это: podSelector - для выбора модулей в текущем пространстве имен namespaceSelector - для выбора пространств имен namespaceSelector.podSelector - для выбора модулей внутри заданного пространства имен

и моей проблемы:

ipBlock - для выбора ВНЕШНИХ IP-адресов

это не работает для внутренних IP-адресов, поэтому вмой случай 0.0.0.0/0 будет в порядке.except не запрещает внутренний трафик.

0 голосов
/ 13 мая 2019

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

Развертывание другого пространства имен, называемого входным

Развертывание входного контроллера в входном пространстве имен

Затем определите сетевую политику, чтобы разрешить доступ из входного пространства имен в prod, и еще одно, чтобы разрешить доступ из входов вдефолт.Вы должны иметь доступ к продуктам и настройкам по умолчанию через входной контроллер

...