У меня есть кластер Kubernetes с установленным в нем сетевым оверлеем Calico. Как настроить объект сетевой политики, чтобы модули не подключались к порту 10250 (kubelet API) на узлах? У меня есть что-то в этом роде:
kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
name: deny-egress-to-nodes
namespace: dev
spec:
podSelector: {}
policyTypes:
- Egress
- Ingress
egress:
- to:
- ipBlock:
cidr: 0.0.0.0/0
except:
- 172.20.0.0/16
ingress:
- {}
Однако это специально не блокирует порт 10250. Он блокирует все исходящие соединения с узлами, что также блокирует связь между службами приложений, работающими в кластере. Есть ли способ заблокировать только исходящие подключения к порту 10250 в узлах кластера? Я знаю, что это можно сделать через IPTABLES, но я бы предпочел сделать это через Calico, используя объект сетевой политики.
Ссылка: https://raesene.github.io/blog/2018/03/25/kubernetes-network-policies/
Мне удалось заставить его работать, создав еще один объект сетевой политики со следующим содержимым:
kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
name: allow-egress-to-nodes-on-ports-80-and-443
namespace: dev
spec:
podSelector: {}
policyTypes:
- Egress
egress:
- to:
- ipBlock:
cidr: 172.20.0.0/16
ports:
- protocol: TCP
port: 80
- protocol: TCP
port: 443
Мне пришлось включить исходящие соединения из модулей на портах 80 и 443, потому что модули общаются друг с другом через HTTP / S. Я не уверен, почему мне нужно открывать эти порты в блоке CIDR узлов, потому что модули как службы работают на собственном блоке CIDR, отличном от блока. Поэтому я не собираюсь отмечать это как принятый ответ на случай, если кто-то предоставит лучший ответ, но это разблокировало меня.
Проект Калико - это подход чистого уровня 3 к виртуальной сети для высокомасштабируемых центров обработки данных, популярный в качестве микробрандмауэра в стеке Kubernetes.
Вы можете указать порт и протокол с исходящим пулом IP-адресов. Попробуйте применить эту конфигурацию:
kubectl create -f - <<EOF
kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
name: deny-egress-to-nodes
namespace: dev
spec:
podSelector: {}
policyTypes:
- Egress
- Ingress
egress:
- to:
- ipBlock:
cidr: 0.0.0.0/0
except:
- 172.20.0.0/16
ports:
- protocol: TCP
port: 10250
ingress:
- {}
EOF
Я скорректировал конфигурацию на основе Project Calico руководство.