Как kube-proxy выполняет команды iptables на главном узле, работая внутри изолированного контейнера процесса?
Я работаю в разработке Kube-прокси, и я нахожусь в стадии понимания цели и выполнения Kube-прокси.
Я знаю, что kube-proxy добавит правила iptables, чтобы пользователь мог получить доступ к открытым модулям (это сервис kubernetes в режиме iptables).
меня удивляет тот факт, что эти правила добавляются в узел узла, где работает модуль kube-proxy, и неясно, как этот модуль способен получить доступ к этим привилегиям узла узла.
Я безуспешно взглянул на кодекс kubernetes, чтобы найти эту конкретную часть, поэтому, если у вас есть идея, ресурс или документация, которая поможет мне разобраться в этом, это будет оценено.
2 ответа
apiVersion: v1
kind: Pod
metadata:
name: kube-proxy
namespace: kube-system
spec:
hostNetwork: true
containers:
- name: kube-proxy
image: gcr.io/google_containers/hyperkube:v1.0.6
command:
- /hyperkube
- proxy
- --master=http://127.0.0.1:8080
securityContext:
privileged: true
volumeMounts:
- mountPath: /etc/ssl/certs
name: ssl-certs-host
readOnly: true
volumes:
- hostPath:
path: /usr/share/ca-certificates
name: ssl-certs-host
Согласно документу Pod Security Policies:
Привилегированный - определяет, может ли какой-либо контейнер в модуле включать привилегированный режим. По умолчанию контейнеру не разрешен доступ к каким-либо устройствам на хосте, но "привилегированному" контейнеру предоставляется доступ ко всем устройствам на хосте. Это предоставляет контейнеру практически все те же права доступа, что и процессам, запущенным на хосте. Это полезно для контейнеров, которые хотят использовать возможности linux, такие как управление сетевым стеком и доступ к устройствам.
Другими словами, он дает контейнеру или модулю (в зависимости от контекста) большинство привилегий root.
В разделе securityContext есть еще много параметров для управления возможностями модулей.
- Повышение привилегий
- Возможности Linux
- SELinux
- тома
- Пользователи и группы
- сетей
Вы можете прочитать полную статью для деталей и фрагментов кода.
В моем kube-proxy.yaml есть конфигурация привилегий, например:
securityContext:
privileged: true
Я думаю, что это даст kube-proxy достаточно привилегий.