Как kube-proxy выполняет команды iptables на главном узле, работая внутри изолированного контейнера процесса?

Я работаю в разработке Kube-прокси, и я нахожусь в стадии понимания цели и выполнения Kube-прокси.

Я знаю, что kube-proxy добавит правила iptables, чтобы пользователь мог получить доступ к открытым модулям (это сервис kubernetes в режиме iptables).

меня удивляет тот факт, что эти правила добавляются в узел узла, где работает модуль kube-proxy, и неясно, как этот модуль способен получить доступ к этим привилегиям узла узла.

Я безуспешно взглянул на кодекс kubernetes, чтобы найти эту конкретную часть, поэтому, если у вас есть идея, ресурс или документация, которая поможет мне разобраться в этом, это будет оценено.

2 ответа

Решение

Кубэ-proxy.yaml

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 достаточно привилегий.

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