Выделение модуля 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) таким же образом.