이전 글
https://braindisk.tistory.com/141
IPC namespace란
우선 IPC는 inter-process-communication의 약자이며 프로세스 간 통신을 위한 경로를 의미합니다. Linux에서 사용되는 대표적인 IPC 방식은 Pipe, Signal, Message queue 등이 있습니다. 외부 프로세스와의 통신은 주로 Socket을 사용합니다. (아직 표준화되지 않은 측면이 있어서 모든 시스템이 공통적으로 지원하는 것은 아니니 참고 부탁드립니다) 따라서 IPC namespace는 이러한 IPC resource를 격리 시키는 기능입니다.
Clone()을 이용한 IPC namespace 구성 방법
저번 포스팅에서 UTS namespace를 구성할 때 clone() 함수를 사용하는 예제를 다뤄보았습니다. 이번에는 IPC namespace를 구성할 것이기 때문에 clone()에 CLONE_NEWIPC 플래그를 사용해주시면 간단하게 구성할 수 있습니다.
int pid = clone(child_main, child_stack+STACK_SIZE, CLONE_NEWIPC | SIGCHLD, NULL);
플래그는 or 연산자를 통해 여러 플래그를 함께 사용할 수 있습니다.
IPC namespace 사용 예시
쿠버네티스의 pod는 컨테이너들의 그룹을 의미하며 쿠버네티스의 배포 단위 중 가장 작은 단위입니다. pod에 속하는 컨테이너들은 같은 IPC namespace에 속하고, 같은 IPC resource를 사용하여 통신합니다. 즉 pod 단위로 IPC namespace가 구성되어 pod 내부의 컨테이너들은 같은 IPC resource를 이용합니다.
Ref
https://intrepidgeeks.com/tutorial/pods-k8s-driven-container
https://www.joinc.co.kr/w/Site/system_programing/IPC/systemv_IPC
'리눅스' 카테고리의 다른 글
리눅스 UTS namespace (0) | 2022.10.01 |
---|---|
리눅스 namespace (1) | 2022.09.30 |
리눅스 Cgroup (0) | 2022.09.30 |
리눅스 chroot (0) | 2022.09.29 |
리눅스 하드웨어 용량 확인 및 swap 메모리 확보 (0) | 2022.08.19 |