контейнер инициализации "sysctl: ключ установки ошибки 'net.ipv4.ip_local_port_range': файловая система только для чтения"

Я пытаюсь удалить привилегированный режим из контейнера инициализации, когда я установил Priviliged: false. Я получаю сообщение об ошибке выше. Я установил readOnlyRootFilesystem: false и строки ниже на уровне pod securityContext

  securityContext:
    sysctls:
    - name: net.ipv4.ip_local_port_range
      value: 0 65535

1 ответ

Проблема в том, что вы не можете запустить sysctlбез привилегированного режима из соображений безопасности. Это ожидается, поскольку докер ограничивает доступ к /proc и /sys.

Чтобы это работало, вам необходимо использовать привилегированный режим для контейнера инициализации, а затем:


  securityContext:
    sysctls:
    - name: kernel.shm_rmid_forced
      value: "0"
    - name: net.core.somaxconn
      value: "1024"
    - name: kernel.msgmax
      value: "65536"
  • Используйте PodSecurityPolicy, чтобы контролировать, какие sysctls можно задать в модулях, указав списки sysctls или же sysctl шаблоны в forbiddenSysctls и / или allowedUnsafeSysctls поля PodSecurityPolicy. Например:

apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
  name: sysctl-psp
spec:
  allowedUnsafeSysctls:
  - kernel.msg*
  forbiddenSysctls:
  - kernel.shm_rmid_forced

Заметить, что:

Если вы позволите небезопасно sysctls через allowedUnsafeSysctls поле вPodSecurityPolicy, любой модуль, использующий такой sysctl не запустится, если sysctl не допускается через --allowed-unsafe-sysctls kubelet на этом узле.

  • Вы также можете установить ограниченное количество sysctls на контейнерной основе с docker run --sysctl.

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

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