Назад | Перейти на главную страницу

Kubernetes Calico: сетевая политика для блокировки подключения к порту 10250 на узлах

У меня есть кластер 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 руководство.