네임스페이스를 유지하려면 /proc/PID?에 바인드 마운트 지점을 생성하세요.

네임스페이스를 유지하려면 /proc/PID?에 바인드 마운트 지점을 생성하세요.

에서https://man7.org/linux/man-pages/man1/n.1.html:

기본적으로 새 네임스페이스는 멤버 프로세스가 하나 이상 있는 동안에만 존재합니다. 네임스페이스는 해당 /proc/PID/ns/ns-type 파일을 바인드 마운트하여 영구적으로 만들 수 있습니다. 즉, 멤버 프로세스가 없는 경우에도 존재하도록 고정할 수 있습니다.

바인드 마운트 소스의 파일 경로에 어떤 PID가 사용됩니까? 네임스페이스가 PID의 존재에 의존하지 않는 네임스페이스를 생성할 때 바인드 마운트 지점의 요점이 아닌가요?

clone()플래그를 사용하여 네트워크 네임스페이스를 생성 CLONE_NEWNET한 다음 생성된 새 프로세스의 PID를 사용하여 바인드 마운트를 생성한 다음 새 프로세스를 종료하면 파일이 사라진다고 생각 /proc/PID/ns/net하지만 파일 /var/run/netns/<netns name>도 삭제되고 네트워크 네임스페이스는 지속되지 않습니다.

답변1

프로세스에서 실행되는 Userland 소프트웨어는 프로세스 외부에 네임스페이스를 생성할 수 없습니다.

따라서 네임스페이스 생성 프로세스(또는 해당 하위 프로세스 중 하나)의 PID를 사용합니다.

CLONE_NEWNET 플래그를 사용하여 clone()으로 네트워크 네임스페이스를 생성한 다음 생성된 새 프로세스의 PID를 사용하여 바인드 마운트를 생성한 다음 새 프로세스를 종료하면 /proc/PID/ns/ 넷 파일이 사라지고,

여기서는 큰 따옴표가 있는 "파일"을 살펴보겠습니다. 가상 파일 시스템 항목은 사라지지만...

하지만 /var/run/netns/도 삭제됩니다.

"삭제"는 실제 파일에 수행하는 작업이며 여기서는 해당되지 않습니다. PID는 사라지지만 해당 PID가 포함된 경로 아래의 일부 가상 파일 시스템 항목으로 액세스할 수 있는 항목에는 액세스할 수 없게 됩니다.저것방법. 하지만:

하지만 그러면 /var/run/netns/도 삭제되고 네트워크 네임스페이스가 유지되지 않습니다.

바인드 마운트가 네임스페이스에 커널 내부 참조를 추가하여 사용되지 않고 지속되기 때문에 잘못된 것입니다.

관련 정보