контейнер инициализации "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
.
Чтобы это работало, вам необходимо использовать привилегированный режим для контейнера инициализации, а затем:
- Используйте sysctls в кластере Kubernetes, указав правильный
securityContext
для стручка. Например:
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
вы рискуете и может привести к серьезным проблемам, таким как неправильное поведение контейнеров, нехватка ресурсов или полная поломка узла.