1장. 튜닝 플러그인을 사용하여 시스템 제어 및 인터페이스 속성 구성
OpenShift Container Platform에서 런타임 시 커널 매개변수 및 인터페이스 속성을 수정하려면 CNI(Container Network Interface) 메타 플러그인을 사용할 수 있습니다. 플러그인은 기본 CNI 플러그인과 함께 체인에서 작동하며, 무차별 모드, 멀티 캐스트 모드, MTU 및 MAC 주소와 같은 sysctl 및 인터페이스 속성을 변경할 수 있습니다.
1.1. 튜닝 CNI를 사용하여 시스템 제어 구성 링크 복사링크가 클립보드에 복사되었습니다!
OpenShift Container Platform에서 인터페이스 수준 네트워크 sysctl을 구성하려면 네트워크 연결 정의에 CNI 메타 플러그인을 사용할 수 있습니다. ICMP 리디렉션 패킷을 수락하고 전송하도록 net.ipv4.conf.IFNAME.accept_redirects sysctl을 구성합니다.
프로세스
다음 콘텐츠를 사용하여
tuning-example.yaml과 같은 네트워크 연결 정의를 생성합니다.apiVersion: "k8s.cni.cncf.io/v1" kind: NetworkAttachmentDefinition metadata: name: <name> namespace: default spec: config: '{ "cniVersion": "0.4.0", "name": "<name>", "plugins": [{ "type": "<main_CNI_plugin>" }, { "type": "tuning", "sysctl": { "net.ipv4.conf.IFNAME.accept_redirects": "1" } } ] }다음과 같습니다.
metadata.name- 생성할 추가 네트워크 연결의 이름을 지정합니다. 이름은 지정된 네임스페이스 내에서 고유해야 합니다.
metadata.namespace- 오브젝트가 연결된 네임스페이스를 지정합니다.
spec.config.cniVersion- CNI 사양 버전을 지정합니다.
spec.config.name- 구성 이름을 지정합니다. 구성 이름과 네트워크 연결 정의의 name 값과 일치하는 것이 좋습니다.
spec.config.plugins.type- 구성할 기본 CNI 플러그인의 이름을 지정합니다.
spec.config.plugins.tuning.sysctl-
설정할 sysctl을 지정합니다. 인터페이스 이름은
IFNAME토큰으로 표시되고 런타임 시 인터페이스의 실제 이름으로 교체됩니다.
네트워크 연결 정의 예
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 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다음과 같습니다.
metadata.annotations.k8s.v1.cni.cncf.io/networks-
구성된
NetworkAttachmentDefinition의 이름을 지정합니다. spec.containers.securityContext.runAsUser- 컨테이너가 실행되는 사용자 ID를 지정합니다.
spec.containers.securityContext.runAsGroup- 컨테이너가 실행되는 기본 그룹 ID를 지정합니다.
spec.containers.securityContext.allowPrivilegeEscalation-
Pod에서 권한 에스컬레이션을 허용하도록 요청할 수 있는지 여부를 지정합니다. 지정되지 않은 경우 기본값은 true입니다. 이 부울은
no_new_privs플래그가 컨테이너 프로세스에 설정되는지 여부를 직접 제어합니다. spec.containers.securityContext.capabilities- 전체 루트 액세스 권한을 부여하지 않고 권한 있는 작업을 지정합니다. 이 정책은 모든 기능이 Pod에서 삭제되도록 합니다.
spec.securityContext.runAsNonRoot: true- 컨테이너가 0 이외의 UID가 있는 사용자로 실행되도록 지정합니다.
spec.securityContext.seccompProfile- 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