Как создать сетевую политику, соответствующую API Kubernetes

#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

И, наконец, использовать 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
  

Пожалуйста, поправьте меня, если я что-то неправильно понял