#kubernetes #kubernetes-networkpolicy
#kubernetes #kubernetes-networkpolicy
Вопрос:
В нашем кластере EKS Kubernetes у нас есть общая сетевая политика calico, запрещающая весь трафик. Затем мы добавляем сетевые политики, чтобы разрешить весь трафик.
Один из наших модулей должен взаимодействовать с API Kubernetes, но, похоже, я не могу сопоставить этот трафик с чем-либо еще, кроме очень широких селекторов ipBlock. Есть ли другой способ сделать это?
В настоящее время это работает, но предоставляет слишком широкий доступ:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: test-network-policy
spec:
podSelector:
matchLabels:
run: my-test-pod
policyTypes:
- Egress
egress:
- to: # To access the actual kubernetes API
- ipBlock:
cidr: 192.168.0.0/16
ports:
- protocol: TCP
port: 443
В AWS EKS я не вижу модулей управления, но в моем кластере RPI я могу. В кластере RPI модули API имеют метки «component = kube-apiserver, tier = control-plane», поэтому я также попытался использовать подселектор с этими метками, но он не соответствует ни в EKS, ни в кластере RPI:
- to:
- namespaceSelector:
matchLabels:
name: kube-system
- podSelector:
matchLabels:
component: kube-apiserver
Любая помощь будет оценена.
Комментарии:
1. Для EKS вам также необходимо внести IP-адреса рабочих узлов в белый список в группе безопасности главных узлов
2. Я использую EKS access с частной связью, а узлы не имеют общедоступных IP-адресов, поэтому нет необходимости в белых списках. Это также означает, что она просто работает, если я разрешаю весь трафик из модуля с помощью 192.168.0.0 / 16, но это слишком широкая область.
Ответ №1:
Что, если вы:
-
найдите сервер API, выполнив
kubectl cluster-info
-
посмотрите на что-то вроде
Kubernetes master запущен на … допустим, из примера https://EXAMPLE0A04F01705DD065655C30CC3D.yl4.us-west-2.eks.amazonaws.com
- переведите это https://EXAMPLE0A04F01705DD065655C30CC3D.yl4.us-west-2.eks.amazonaws.com к ip-адресу, допустим, это будет
a.b.c.d
И, наконец, использовать a.b.c.d/32
внутри NetworkPolicy, например
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: test-network-policy
spec:
podSelector: {}
policyTypes:
- Egress
egress:
- to:
- ipBlock:
cidr: a.b.c.d/32
ports:
- protocol: TCP
port: 443
Пожалуйста, поправьте меня, если я что-то неправильно понял