#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