13장. 인터페이스 수준 네트워크 sysctl 구성
Linux에서 sysctl을 사용하면 관리자가 런타임에 커널 매개변수를 수정할 수 있습니다. 튜닝 CNI(Container Network Interface) 메타 플러그인을 사용하여 인터페이스 수준 네트워크 sysctl을 수정할 수 있습니다. 튜닝 CNI 메타 플러그인은 설명된 대로 기본 CNI 플러그인이 있는 체인에서 작동합니다.
기본 CNI 플러그인은 인터페이스를 할당하고 런타임 시 튜닝 CNI 메타 플러그인에 이를 전달합니다. 튜닝 CNI 메타 플러그인을 사용하여 네트워크 네임스페이스에서 일부 sysctl 및 여러 인터페이스 속성(프로미스 모드, all-multicast 모드, MTU 및 MAC 주소)을 변경할 수 있습니다. 튜닝 CNI 메타 플러그인 구성에서 인터페이스 이름은 IFNAME
토큰으로 표시되고 런타임 시 인터페이스 이름으로 교체됩니다.
OpenShift Container Platform에서 튜닝 CNI 메타 플러그인은 인터페이스 수준 네트워크 sysctl 변경만 지원합니다.
13.1. 튜닝 CNI 구성
다음 절차에서는 인터페이스 수준 네트워크 net.ipv4.conf.IFNAME.accept_redirects
sysctl을 변경하기 위해 튜닝 CNI를 구성합니다. 이 예제에서는 ICMP 리디렉션 패킷을 수락하고 전송할 수 있습니다.
프로세스
다음 콘텐츠를 사용하여
tuning-example.yaml
과 같은 네트워크 연결 정의를 생성합니다.apiVersion: "k8s.cni.cncf.io/v1" kind: NetworkAttachmentDefinition metadata: name: <name> 1 namespace: default 2 spec: config: '{ "cniVersion": "0.4.0", 3 "name": "<name>", 4 "plugins": [{ "type": "<main_CNI_plugin>" 5 }, { "type": "tuning", 6 "sysctl": { "net.ipv4.conf.IFNAME.accept_redirects": "1" 7 } } ] }
yaml 파일의 예는 다음과 같습니다.
apiVersion: "k8s.cni.cncf.io/v1" kind: NetworkAttachmentDefinition metadata: name: tuningnad namespace: default spec: config: '{ "cniVersion": "0.4.0", "name": "tuningnad", "plugins": [{ "type": "bridge" }, { "type": "tuning", "sysctl": { "net.ipv4.conf.IFNAME.accept_redirects": "1" } } ] }'
다음 명령을 실행하여 yaml을 적용합니다.
$ oc apply -f tuning-example.yaml
출력 예
networkattachmentdefinition.k8.cni.cncf.io/tuningnad created
다음과 유사한 네트워크 연결 정의를 사용하여
examplepod.yaml
과 같은 Pod를 생성합니다.apiVersion: v1 kind: Pod metadata: name: tunepod namespace: default annotations: k8s.v1.cni.cncf.io/networks: tuningnad 1 spec: containers: - name: podexample image: centos command: ["/bin/bash", "-c", "sleep INF"] securityContext: runAsUser: 2000 2 runAsGroup: 3000 3 allowPrivilegeEscalation: false 4 capabilities: 5 drop: ["ALL"] securityContext: runAsNonRoot: true 6 seccompProfile: 7 type: RuntimeDefault
- 1
- 구성된
NetworkAttachmentDefinition
의 이름을 지정합니다. - 2
Run
AsUser는 컨테이너가 실행되는 사용자 ID를 제어합니다.- 3
runAsGroup
은 컨테이너가 실행되는 기본 그룹 ID를 제어합니다.- 4
allowPrivilegeEscalation
은 Pod에서 권한 에스컬레이션을 허용하도록 요청할 수 있는지 여부를 결정합니다. 지정되지 않은 경우 기본값은 true입니다. 이 부울은 컨테이너 프로세스에no_new_privs
플래그가 설정되는지 여부를 직접 제어합니다.- 5
기능을
사용하면 전체 루트 액세스 권한을 부여하지 않고 권한 있는 작업을 수행할 수 있습니다. 이 정책은 모든 기능이 Pod에서 삭제되도록 합니다.- 6
runAsNonRoot: true
를 사용하려면 컨테이너가 0이 아닌 다른 UID와 함께 컨테이너를 실행해야 합니다.- 7
RuntimeDefault
는 Pod 또는 컨테이너 워크로드에 대한 기본 seccomp 프로필을 활성화합니다.
다음 명령을 실행하여 yaml을 적용합니다.
$ oc apply -f examplepod.yaml
다음 명령을 실행하여 Pod가 생성되었는지 확인합니다.
$ oc get pod
출력 예
NAME READY STATUS RESTARTS AGE tunepod 1/1 Running 0 47s
다음 명령을 실행하여 Pod에 로그인합니다.
$ oc rsh tunepod
구성된 sysctl 플래그 값을 확인합니다. 예를 들어 다음 명령을 실행하여
net.ipv4.conf.net1.accept_redirects
값을 찾습니다.sh-4.4# sysctl net.ipv4.conf.net1.accept_redirects
예상 출력
net.ipv4.conf.net1.accept_redirects = 1