7.9.7. 안전하지 않은 sysctl 활성화
클러스터 관리자는 고성능 또는 실시간 애플리케이션 튜닝과 같이 매우 특별한 상황에 대해 안전하지 않은 특정 sysctl을 허용할 수 있습니다.
안전하지 않은 sysctl을 사용하려면 클러스터 관리자가 특정 유형의 노드에 대해 개별적으로 활성화해야 합니다. sysctl에 네임스페이스가 지정되어 있어야 합니다.
보안 컨텍스트 제약 조건의 allowedUnsafeSysctls 필드에 sysctl 또는 sysctl 패턴 목록을 지정하여 Pod에 설정된 sysctl을 추가로 제어할 수 있습니다.
-
allowedUnsafeSysctls옵션은 고성능 또는 실시간 애플리케이션 튜닝과 같은 특정 요구 사항을 제어합니다.
안전하지 않은 상태의 특성으로 인해 안전하지 않은 sysctl을 사용하는 경우 사용자가 위험을 감수해야 하고 부적절한 컨테이너 동작, 리소스 부족 또는 노드 중단과 같은 심각한 문제가 발생할 수 있습니다.
프로세스
OpenShift Container Platform 클러스터의 기존 MachineConfig 개체를 나열하여 다음 명령을 실행하여 머신 구성에 레이블을 지정하는 방법을 결정합니다.
$ oc get machineconfigpool출력 예
NAME CONFIG UPDATED UPDATING DEGRADED MACHINECOUNT READYMACHINECOUNT UPDATEDMACHINECOUNT DEGRADEDMACHINECOUNT AGE master rendered-master-bfb92f0cd1684e54d8e234ab7423cc96 True False False 3 3 3 0 42m worker rendered-worker-21b6cb9a0f8919c88caf39db80ac1fce True False False 3 3 3 0 42m안전하지 않은 sysctl이 있는 컨테이너가 다음 명령을 실행하여 실행되는 머신 구성 풀에 레이블을 추가합니다.
$ oc label machineconfigpool worker custom-kubelet=sysctlKubeletConfigCR(사용자 정의 리소스)을 정의하는 YAML 파일set-sysctl-worker.yaml을 생성합니다.apiVersion: machineconfiguration.openshift.io/v1 kind: KubeletConfig metadata: name: custom-kubelet spec: machineConfigPoolSelector: matchLabels: custom-kubelet: sysctl1 kubeletConfig: allowedUnsafeSysctls:2 - "kernel.msg*" - "net.core.somaxconn"다음 명령을 실행하여 오브젝트를 생성합니다.
$ oc apply -f set-sysctl-worker.yamlMachine Config Operator가 새로 렌더링된 구성을 생성하고 다음 명령을 실행하여 머신에 적용할 때까지 기다립니다.
$ oc get machineconfigpool worker -w잠시 후
UPDATING상태가 True에서 False로 변경됩니다.NAME CONFIG UPDATED UPDATING DEGRADED MACHINECOUNT READYMACHINECOUNT UPDATEDMACHINECOUNT DEGRADEDMACHINECOUNT AGE worker rendered-worker-f1704a00fc6f30d3a7de9a15fd68a800 False True False 3 2 2 0 71m worker rendered-worker-f1704a00fc6f30d3a7de9a15fd68a800 False True False 3 2 3 0 72m worker rendered-worker-0188658afe1f3a183ec8c4f14186f4d5 True False False 3 3 3 0 72m다음 예와 같이 예제 Pod를 정의하는 YAML 파일
sysctl-example-safe-unsafe.yaml을 생성합니다.apiVersion: v1 kind: Pod metadata: name: sysctl-example-safe-unsafe spec: containers: - name: podexample image: centos command: ["bin/bash", "-c", "sleep INF"] securityContext: runAsUser: 2000 runAsGroup: 3000 allowPrivilegeEscalation: false capabilities: drop: ["ALL"] securityContext: runAsNonRoot: true seccompProfile: type: RuntimeDefault sysctls: - name: kernel.shm_rmid_forced value: "0" - name: net.core.somaxconn value: "1024" - name: kernel.msgmax value: "65536"다음 명령을 실행하여 Pod를 생성합니다.
$ oc apply -f sysctl-example-safe-unsafe.yaml예상 출력
Warning: would violate PodSecurity "restricted:latest": forbidden sysctls (net.core.somaxconn, kernel.msgmax) pod/sysctl-example-safe-unsafe created다음 명령을 실행하여 Pod가 생성되었는지 확인합니다.
$ oc get pod출력 예
NAME READY STATUS RESTARTS AGE sysctl-example-safe-unsafe 1/1 Running 0 19s다음 명령을 실행하여 Pod에 로그인합니다.
$ oc rsh sysctl-example-safe-unsafe구성된 sysctl 플래그의 값을 확인합니다. 예를 들어 다음 명령을 실행하여
net.core.somaxconn값을 찾습니다.sh-4.4# sysctl net.core.somaxconn예상 출력
net.core.somaxconn = 1024
안전하지 않은 sysctl이 허용되고 값이 업데이트된 Pod 사양의 securityContext 사양에 정의된 대로 설정됩니다.