LXC의 설치를 호스트에 노출

LXC의 설치를 호스트에 노출

저는 독점 POSIX 클라이언트를 사용하여 네트워크 디렉터리를 마운트하고 있습니다. 공급업체에서 제공하는 패키지가 형편없기 때문에(설치 후에 이런 일이 발생할까요 ln -sf /usr/bin/fusermount?!) LXC 컨테이너에 격리하려고 합니다. 컨테이너가 실행 중이고 설치가 제대로 작동합니다.

이제 호스트 컴퓨터에서 사용할 수 있는 컨테이너의 설치를 만들어야 합니다.

호스트에서 컨테이너로 sshfs를 사용하여 이 작업을 수행할 수 있다는 것을 알고 있지만 이는 지나치게 복잡해 보입니다. SSH를 사용하지 않고 이 설치를 가능하게 할 수 있다면 좋을 것입니다.

어떤 제안이 있으십니까?

답변1

사용을 고려해보세요네임스페이스때로는 다음과 같은 일이 포함될 수도 있습니다.기타 마운트그리고 mount 네임스페이스에 들어가면 모든 명령은 더 이상 호스트 명령이 아닙니다.마운트 네임스페이스다른 사람들만큼 다루기가 쉽지 않습니다. 대신 다음을 통해 직접 액세스할 수 있습니다./proc:

  • /proc/[pid]/root
    UNIX와 Linux는 chroot(2) 시스템 호출로 설정되는 파일 시스템에 대한 프로세스별 루트 개념을 지원합니다. 이 파일은 프로세스의 루트 디렉터리를 가리키는 심볼릭 링크이며 exe 및 fd/*와 동일한 방식으로 동작합니다. 하지만 참고하세요파일은 단순한 심볼릭 링크 그 이상입니다. 이는 프로세스 자체(네임스페이스 및 프로세스별 마운트 세트 포함)와 동일한 파일 시스템 보기를 제공합니다.

다음은 마운트 네임스페이스 예시입니다.

따라서 컨테이너에 속한 프로세스(보다 정확하게는 마운트 네임스페이스 구성 요소)를 살펴봐야 합니다. 이름이 있는 사람의 경우컨테이너, LXC는 컨테이너(보다 정확하게는 pid 네임스페이스)의 init(pid 1) 프로세스 뷰(관리 네임스페이스 내)를 제공합니다 lxc-info -H -p -n container.

PID1=$(lxc-info -H -p -n container)
CONTAINERMOUNT=/proc/$PID1/root

컨테이너가 실행되는 동안 이 디렉터리를 사용하여 마운트 네임스페이스에 액세스할 수 있습니다. 예를 들어 동적 부분 없이 컨테이너를 백업하려면 다음을 수행합니다.

cd $CONTAINERMOUNT
tar -cf /root/backup.tar --exclude='./dev/*' --exclude='./proc/*' --exclude='./run/*' --exclude='./sys/*' .

몇 가지 테스트 후 세 가지 의견:

  • 이 디렉터리를 바인드 마운트하려고 하면 작동하지 않습니다.
  • 위의 백업과 같은 파일에 액세스하기 전에 활동을 하지 않고 컨테이너를 중지할 수 있습니다. 이후에는 cd "$CONTAINERMOUNT"마운트 네임스페이스 리소스가 실제로 유지되지 않습니다. 컨테이너가 사라지면(있는 경우에도 kill -KILL $PID1) 마운트 네임스페이스는 계속 사라집니다.
  • 무엇하다전용 설치 프로그램에서 작동nsfs 의사 파일 시스템컨테이너를 종료하기 전에 네임스페이스 참조를 탑재합니다(컨테이너 종료 시 단계적 탑재 해제를 사용 lxc-stop -k -n container하거나 kill -KILL $PID1방지).

    cd $CONTAINERMOUNT
    mkdir /root/ns
    touch /root/ns/mnt
    mount --bind /proc/$PID1/ns/mnt /root/ns/mnt
    lxc-stop -k -n container
    

    컨테이너의 마운트 네임스페이스는 umount /root/ns/mnt디렉토리를 떠나 마운트 네임스페이스에 다시 액세스할 수 있지만 nsenter --mount=/root/ns/mnt ...명령은 컨테이너에서 제공됩니다. sleep여기서 실행할 수 있으면 다음과 같이 작동합니다.

    nsenter --mount=/root/ns/mnt sleep 10 & sleep 1; cd /proc/$!/root
    

관련 정보