сетевая политика в kubernetes для разрешения порта из пространства имен

#kubernetes #kubernetes-networkpolicy

#kubernetes #kubernetes-сетевая политика

Вопрос:

Создайте новую сетевую политику с именем allow-port-from-namespace в существующем snafu пространства имен. Убедитесь, что новая сетевая политика позволяет модулям в пространстве имен internal подключаться к порту 8080 модулей в неразберихе пространства имен.Кроме того, убедитесь, что новая сетевая политика: не разрешает доступ к модулям, которые не прослушивают порт 8080, не разрешает доступ из модулей, которые не находятся во внутреннем пространстве имен.

Пожалуйста, помогите мне с этим вопросом.

Также, пожалуйста, проверьте правильность приведенного ниже yaml (в разделе комментариев) и помогите мне понять вторую часть вопроса (далее убедитесь, что новая NetworkPolicy: не разрешает доступ к модулям, которые не прослушивают порт 8080, не разрешает доступ из модулей, которые не находятся во внутреннем пространстве имен)

 apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-port-from-namespace
  namespace: snafu
spec:
  podSelector:
    matchLabels:
      role: db
  policyTypes:
  - Ingress
  ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          name: internal
    ports:
    - protocol: TCP
      port: 8080 
  


 
 

Комментарии:

1. Похоже на вопрос с экзамена CKAD / CKA

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

3. Да, я установил плагин n / w @mario

4. Вам удалось найти решение?

Ответ №1:

Вторая часть означает, что вы должны по умолчанию изолировать все модули в путанице пространства имен, что означает, что вам нужно изменить свое podSelector поле на:

 ...
spec:
  podSelector: {}
...
 

Ответ №2:

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

 - namespaceSelector:
        matchLabels:
          purpose: production
 

Здесь цель: производство — это метка внутреннего пространства
имен https://github.com/ahmetb/kubernetes-network-policy-recipes/blob/master/06-allow-traffic-from-a-namespace.md

Ответ №3:

Я думаю, что это может быть примерно так:

apiVersion: networking.k8s.io/v1 вид: метаданные сетевой политики: имя: разрешить-порт-из-пространства имен пространство имен: спецификация snafu: подСелектор: {}
Типы политик:

  • Вход вход:
  • От:
    • namespaceSelector: сопоставление меток: ключ: значение портов:
    • протокол: TCP порт: 8080

Br,

Ответ №4:

 first check label of your namespace e.g. 

[root@master ~]# kg ns --show-labels
NAME              STATUS   AGE    LABELS
default           Active   54d    kubernetes.io/metadata.name=default
kube-node-lease   Active   54d    kubernetes.io/metadata.name=kube-node-lease
kube-public       Active   54d    kubernetes.io/metadata.name=kube-public
kube-system       Active   54d    kubernetes.io/metadata.name=kube-system
my-app            Active   171m   kubernetes.io/metadata.name=my-app

here my namespace is my-app and I want to allow traffic at port 80 for all the pods in namespace my-app , but don't want to allow any traffic from other namespace (e.g. default) 

so use 
matchLabels
 kubernetes.io/metadata.name: my-app

[root@master ~]# cat networkpolicy.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-port-from-namespace
  namespace: my-app
spec:
  podSelector: {}
  policyTypes:
    - Ingress
  ingress:
    - from:
        - namespaceSelector:
            matchLabels:
              kubernetes.io/metadata.name: my-app
      ports:
        - protocol: TCP
          port: 80
    enter code here