Выделение модуля kubernetes через NetworkPolicy и Calico, так что только прокси-сервер apiserver может общаться с ним

Я пытаюсь изолировать kubernetes-dashboard Развертывание через NetworkPolicy правила, так что нет капсулы, но apiserver может получить к нему доступ. Моя идея состоит в том, чтобы отключить аутентификацию в панели мониторинга и полагаться на правила RBAC, которые запрещают всем, кроме администраторов, использовать прокси-глагол для открытия панели мониторинга.

До сих пор мне не удавалось ограничить доступ. Я попробовал следующую политику:

- apiVersion: networking.k8s.io/v1
  kind: NetworkPolicy
  metadata:
    name: kubernetes-dashboard
    namespace: kube-system
  spec:
    ingress:
      - from:
          - namespaceSelector:
              matchLabels:
                name: kube-system
          - podSelector:
              matchLabels:
                component: kube-apiserver
    podSelector:
      matchLabels:
        k8s-app: kubernetes-dashboard
    policyTypes:
      - Ingress

Эта политика блокирует доступ из случайных модулей в других пространствах имен, но я не могу загрузить панель мониторинга через http://localhost:8001/api/v1/namespaces/kube-system/services/kubernetes-dashboard/proxy/ любой.

Вышеуказанная политика компилируется в следующую политику ситца:

- apiVersion: v1
  kind: policy
  metadata:
    name: knp.default.kube-system.kubernetes-dashboard
  spec:
    egress:
    - action: allow
      destination: {}
      source: {}
    ingress:
    - action: allow
      destination: {}
      source:
        selector: pcns.name == 'kube-system'
    - action: allow
      destination: {}
      source:
        selector: calico/k8s_ns == 'kube-system' && component == 'kube-apiserver'
    order: 1000
    selector: calico/k8s_ns == 'kube-system' && k8s-app == 'kubernetes-dashboard'

То, как это выглядит, меня немного смущает. Что такое pcns.name? Похоже, у меня есть два способа принимать трафик, либо из модулей пространства имен системы kube, либо из kube-apiserver. Но потом я попытался раскрутить новую оболочку curl в kube-system, и она тоже не может общаться с приборной панелью.

Какова будет правильная политика, чтобы разрешить только apiserver для запросов прокси к kubernetes-proxy в этой настройке? В чем разница между pcns.name а также calico/k8s_ns в данном контексте?

PS: я знаю, что могу включить аутентификацию на приборной панели, но я ожидал изолировать несколько других компонентов (heapster и influenxdb) таким же образом.

0 ответов

Другие вопросы по тегам