Container Management

XenServer에는 XenServer의 Docker Container 배포를 개선하기 위한 두 가지 새로운 기능이 포함되어 있습니다.

  • CoreOS Linux VM에 대한 지원 및 Cloud Config Drive 구성

  • CoreOS, Debian 8, Ubuntu 14.04 및 RHEL/CentOS/OEL 7.0용 Container Management

  • Windows Server 2016 Technology Preview에서 Windows Server Container용 Container Management 미리 보기

CoreOS는 Docker 응용 프로그램 호스팅에 널리 사용되는 최소 Linux 배포판입니다. CoreOS Cloud Config Drive를 통해 다양한 운영 체제 구성 옵션을 사용자 지정할 수 있습니다. Container Management를 VM에서 사용할 수 있도록 구성한 경우 XenServer는 VM에서 실행 중인 Docker Container를 인식하게 됩니다.

참고

CoreOS 게스트 설치 방법, Cloud-Config 매개 변수 구성 방법 및 Docker Container 관리 방법에 대해 자세한 내용은 XenCenter 온라인 도움말을 참조하십시오. F1 키를 누르거나 Help(도움말)를 클릭하십시오.

Container Management Supplemental Pack을 사용하면 XenServer에서 VM을 쿼리하고 Cloud Config Drive와 상호 작용하며 응용 프로그램 컨테이너를 검색하고 XenCenter의 Infrastructure(인프라) 보기 내에 이들을 표시할 수 있습니다. 또한 XenCenter를 사용하면 컨테이너와의 상호 작용을 통해 시작, 중지 및 일시 중지 작업 그리고 기타 모니터링 기능을 사용할 수 있습니다. 자세한 내용은 Container Management Supplemental Pack을 참조하십시오.

Docker란?

Docker는 개발자 및 시스템 관리자가 배포된 응용 프로그램을 빌드, 제공 및 실행할 수 있는 개방형 플랫폼입니다. Docker Container는 오직 응용 프로그램과 해당 종속 항목으로만 구성되어 있습니다. Docker Container는 호스트 운영 체제의 사용자 공간에서 분리된 프로세스로 실행되어 커널 및 기본 파일 시스템을 다른 컨테이너와 공유합니다. 자세한 내용은 https://www.docker.com/whatisdocker 항목을 참조하십시오.

참고

XenServer Container Management 기능은 Docker 에코시스템을 보완하되 대체하지는 않습니다. VM의 개별 Docker Engine 인스턴스는 사용할 수 있는 Docker 관리 도구 중 하나로 관리될 수 있습니다.

Container Management Supplemental Pack

Container Management Supplemental Pack은 다음을 제공합니다.

  • Monitoring and Visibility(모니터링 및 가시성): Docker 호스팅에 사용되는 VM 그리고 VM에서 실행 중인 컨테이너를 확인할 수 있습니다.

  • Diagnostics(진단): 전달된 네트워크 포트, 원래 Docker 이미지 이름과 같은 기본 컨테이너 정보에 간편하게 액세스할 수 있습니다. 이를 통해 인프라 및 응용 프로그램 계층에 영향을 미쳤을 수 있는 문제에 대해 더 빠르게 조사할 수 있습니다.

  • Performance(성능): 해당 VM에서 실행 중인 컨테이너에 대한 정보를 확인할 수 있습니다. 운영 체제에서 제공한 정보에 따라, 컨테이너에서 실행 중인 프로세스 및 응용 프로그램에 대한 정보와 사용된 CPU 리소스에 대한 정보가 제공됩니다.

  • Control Applications(응용 프로그램 제어): 운영 체제에서 지원하는 경우 XenCenter를 사용하여 응용 프로그램 컨테이너를 시작, 중지 및 일시 중지하고 문제가 있는 응용 프로그램을 빠르게 종료할 수 있습니다.

참고

XenServer는 XenCenter를 사용한 보조 팩 설치를 지원합니다. XenCenter를 사용한 보조 팩 설치 방법에 대한 정보는 XenCenter 도움말을 참조하십시오. xe CLI를 사용하여 설치하려는 경우 XenServer Supplemental Packs and the DDK(XenServer 보조 팩 및 DDK) 가이드를 참조하십시오.

XenCenter를 사용한 Docker Container 관리

이 섹션에는 XenCenter를 사용한 CoreOS VM 관리에 대한 정보가 수록되어 있습니다. CoreOS VM을 관리하려면 다음을 수행해야 합니다.

  1. 호스트를 XenServer 7.1에 설치하거나 업그레이드합니다.

  2. XenServer 7.1과 함께 제공된 XenCenter를 설치합니다.

  3. Citrix 웹 사이트에서 받을 수 있는 Container Management Supplemental Pack을 설치합니다.

  4. CoreOS VM을 생성하고 VM용 구성 드라이브를 포함합니다.

    XenCenter에서 CoreOS VM을 생성하면 New VM(새 VM) 마법사에 VM용 cloud-config 매개 변수를 지정하라는 메시지가 나타납니다. 구성 드라이브는 VM 인스턴스에 사용자 데이터를 제공합니다. XenServer를 사용하여 VM 내에 실행 중인 컨테이너를 관리하려면 구성 드라이브를 생성해야 합니다.

    기본적으로 XenCenter의 Cloud-Config Parameters(Cloud-Config 매개 변수) 페이지에 사전 정의된 집합의 매개 변수가 포함되어 있습니다. 필요에 따라 이러한 매개 변수를 수정할 수 있습니다. 지원되는 구성 매개 변수에 대한 자세한 내용은 CoreOS 설명서를 참조하십시오.

    경고

    VM에 대한 구성 드라이브를 생성하지 않으면 Container Management가 작동하지 않을 수 있습니다.

  5. VM의 Container Management를 사용하도록 설정합니다. XenCenter에서 VM의 Properties(속성) 탭에서 이 설정을 업데이트할 수 있습니다.

참고

Ubuntu 14.04, Debian 8, RHEL/CentOS/Oracle Linux 7, Windows Server 2016 TP VM을 사용하여 Docker Container를 관리하려면 먼저 CLI를 사용하여 Container Management를 사용하도록 설정해야 합니다. 이러한 VM에서 Container Management를 사용하도록 설정하면 XenCenter를 사용하여 컨테이너 시작, 중지, 일시 중지, 다시 시작 등의 수명 주기 작업을 수행할 수 있습니다.

다른 Linux 게스트에서 컨테이너 관리

기본 Cloud Config Drive 구성으로 생성된 CoreOS VM은 Container Management에 대해 자동으로 준비되므로 기능을 사용하도록 설정하기만 하면 됩니다. 다른 Linux 게스트는 수동으로 준비할 수 있습니다. 이는 Debian 8, Ubuntu 14.04 및 RHEL/CentOS/OEL 7.x VM에 대해서만 지원됩니다.

Linux 게스트를 수동으로 준비하려면:

  1. VM에 XenServer PV Tools가 설치되어 있는지 확인하고 네트워크 요구 사항 및 보안에 설명된 대로 VM 네트워크가 구성되어 있는지 확인합니다.

  2. VM 내에 Docker, ncat 및 SSHD를 설치합니다.

    Ubuntu 14.04의 경우 다음을 입력합니다. apt-get install docker.io nmap openssh-server

    RHEL/CentOS/OEL 7.x의 경우 다음을 입력합니다. yum install docker nmap openssh-server

  3. 다음과 같이 docker.service에 대해 자동 시작을 사용하도록 설정합니다.

systemctl enable docker.service

  1. docker.service를 시작합니다.

systemctl start docker.service

Container Management에 대해 루트 사용자가 아닌 사용자를 사용해야 합니다. Docker에 대한 액세스를 제공할 수 있도록 사용자를 'docker' 그룹에 추가합니다.
  1. Container Management에 사용할 수 있도록 VM을 준비하고 풀에 있는 호스트 중 하나의 제어 도메인(dom0)에서 다음 명령을 실행합니다.

xscontainer-prepare-vm -v vm-uuid -u username

여기서 vm-uuid는 준비할 VM이고 username은 Container Management에서 관리 액세스에 사용할 VM의 사용자 이름입니다.

준비 스크립트를 실행하면 프로세스가 안내되고 해당 VM에 대해 Container Management가 자동으로 사용하도록 설정됩니다.

Docker Container 콘솔 및 로그 액세스

Linux VM의 경우 고객은 XenCenter를 통해 컨테이너 콘솔에 액세스하고 로그를 확인하여 Docker Container에서 실행되는 응용 프로그램을 관리 및 모니터링할 수 있습니다. XenCenter를 사용하여 컨테이너 콘솔 및 로그에 액세스하려면:

  1. Resources(리소스) 창에서 컨테이너를 선택합니다.

  2. Container General Properties(컨테이너 일반 속성) 섹션에서 View Console(콘솔 보기)을 클릭하여 컨테이너 콘솔을 표시합니다. 콘솔 로그를 보려면 View Log(로그 보기)를 클릭합니다. 그러면 XenCenter를 실행하는 컴퓨터에서 SSH 클라이언트가 열립니다.

  3. 메시지가 나타나면 VM 사용자 이름 및 암호를 사용하여 SSH 클라이언트에 로그인합니다.

    참고

    고객은 공개/개인 SSH 키를 구성하여 인증 프로세스를 자동화할 수 있습니다. 자세한 내용은 다음 섹션을 참조하십시오.

인증 프로세스 자동화(선택 사항)

컨테이너 콘솔 및 로그에 액세스하려면 VM 로그인 자격 증명을 입력하여 SSH 연결을 인증해야 합니다. 하지만 인증 프로세스를 자동화하여 자격 증명의 수동 입력을 방지할 수 있습니다. 아래 지침에 따라 자동 인증 프로세스를 구성하십시오.

  1. 공개/개인 키 쌍을 생성합니다.

  2. 컨테이너를 실행하는 VM에서 사용자 디렉터리에 공개 SSH 키를 추가합니다.

    예를 들어 CoreOS VM에서 실행하는 컨테이너의 경우 XenCenter에 있는 VM의 General(일반) 탭에서 Cloud-Config Parameters(Cloud-Config 매개 변수) 섹션에 공개 키를 추가해야 합니다. Ubuntu 14.04, RHEL/CentOS/Oracle Linux 7.x 및 Debian 8의 경우 공개 키를 ~/.ssh/authorized_keys에 수동으로 추가해야 합니다.

  3. XenCenter를 실행하는 컴퓨터의 %userprofile% 디렉터리에 개인 SSH 키를 추가하고 키 이름을 ContainerManagement.ppk로 바꿉니다.

Windows Server 컨테이너 관리

Windows Server 컨테이너는 Windows Server 2016 게스트 운영 체제의 일부분입니다. 따라서 프로세스를 자체 네임스페이스로 분리하여 Windows 응용 프로그램을 캡슐화할 수 있습니다. XenServer Container Management는 Windows Server 2016 게스트 운영체제의 Windows Server 컨테이너 모니터링 및 관리를 지원합니다.

참고

이 기능을 사용하려면 TLS 서버 인증서가 특정 IP 주소에 바인딩되므로 TLS 통신을 위해 하나 이상의 정적 IP 주소로 Windows Server 2016 VM을 구성해야 합니다.

Container Management에 사용할 수 있도록 Windows Server 컨테이너를 준비하려면

  1. VM에 XenServer PV Tools가 설치되어 있는지 확인하고 네트워크 요구 사항 및 보안에 설명된 대로 VM 네트워크가 구성되어 있는지 확인합니다.

  2. Microsoft 설명서에 설명된 대로 VM 내에서 Windows Server 컨테이너 지원을 설치합니다. Windows Server 컨테이너는 HyperV 컨테이너가 아닙니다.

  3. ‘C:\ProgramData\docker\config’ 폴더에 다음과 같은 내용으로 ‘daemon.json’ 파일을 생성합니다.

          {
            "hosts": ["tcp://0.0.0.0:2376", "npipe://"],
            "tlsverify": true,
            "tlscacert": "C:\\ProgramData\\docker\\certs.d\\ca.pem",
            "tlscert": "C:\\ProgramData\\docker\\certs.d\\server-cert.pem",
            "tlskey": "C:\\ProgramData\\docker\\certs.d\\server-key.pem"
          }
    
  4. Container Management에 사용할 수 있도록 VM을 준비하고 풀에 있는 호스트 중 하나의 제어 도메인(dom0)에서 다음 명령 중 하나를 실행합니다.

    옵션 1(단일 사용자 VM의 경우): XenServer를 통해 이 VM에 대한 TLS 인증서를 생성합니다.

    중요

    이 옵션은 단일 사용자가 VM에 대한 액세스 권한이 있는 경우에만 안전합니다. TLS 서버 및 클라이언트 키는 가상 CD를 사용하여 VM에 삽입되며, 이는 준비하는 동안 악의적 사용자에 의해 복사될 수 있습니다.

    xscontainer-prepare-vm -v vm-uuid -u root --mode tls --generate-certs
    

    여기서 vm-uuid는 준비할 VM입니다. 화면의 지시에 따라 Windows Server 컨테이너 준비 프로세스를 완료합니다. 이 작업을 수행하려면 dom0 및 VM과의 상호 작용이 필요합니다.

    옵션 2: 외부에서 생성된 TLS 인증서로 XenServer를 구성합니다.

    xscontainer-prepare-vm -v vm-uuid -u root --mode tls --client-cert client-cert
        --client-key client-key --ca-cert ca-cert
    

    여기서 vm-uuid는 준비할 VM이고, client-cert는 TLS 클라이언트 인증서이며, client-key는 TLS 클라이언트 키이고 ca-cert는 CA 인증서입니다. 이 옵션은 Docker가 이미 VM 내의 TLS에 대해 구성되어 있다고 가정합니다.

네트워크 요구 사항 및 보안

중요

Container Management가 작동하려면 네트워크 격리와 관련하여 보안 요구 사항을 완화해야 할 수도 있습니다.

가상화 환경의 보안을 극대화하기 위해 Citrix에서는 XenServer의 관리 네트워크(XenServer 제어 도메인, dom0 포함)를 VM으로부터 격리하여 네트워크를 분할할 것을 권장합니다.

Container Management를 사용하도록 설정하려면 이 두 네트워크 간을 라우팅해야 하는데, 이 경우 악의적인 VM이 관리 네트워크(즉, dom0)를 공격할 위험이 증가합니다. VM과 관리 네트워크 간의 트래픽을 허용하는 경우 위험을 완화하려면 신뢰할 수 있는 소스만 두 네트워크 간의 연결을 시작할 수 있도록 허용하는 방화벽 규칙을 구성하는 것이 좋습니다.

이 권장된 네트워크 구성이 사용자의 위험 프로필과 일치하지 않는 경우 또는 사용자만의 사용 사례에 맞게 이러한 라우팅 보안을 충분히 보장하는 데 필요한 네트워크 또는 방화벽 전문 지식이 부족한 경우 Citrix에서는 프로덕션 환경에 이 기능을 사용하는 것을 권장하지 않습니다.

네트워크 분할 및 방화벽

다른 VM과 마찬가지로, 컨테이너 관리형 VM은 필요한 격리 조치를 위해 XenServer의 관리 네트워크와 직접 연결되어서는 안 됩니다.

Container Management가 작동하려면 XenServer의 제어 도메인(dom0)에서 관리되는 VM에 연결할 수 있어야 합니다. Linux 기반 운영 체제에서 컨테이너를 모니터링하려면 네트워크 토폴로지 및 방화벽이 dom0(XenServer 관리 네트워크)와 컨테이너 관리형 VM(VM 네트워크) 간의 아웃바운드 SSH(대상 TCP 포트 22) 연결을 허용해야 합니다. Windows Server 컨테이너를 모니터링하려면 네트워크 토폴로지 및 방화벽이 dom0(XenServer 관리 네트워크)와 컨테이너 관리형 VM(VM 네트워크) 간의 아웃바운드 Docker TLS(대상 TCP 포트 2376) 연결을 허용해야 합니다.

VM과 관리 네트워크 간의 트래픽을 허용하는 경우 위험을 완화하려면 모든 트래픽이 외부 상태 저장 방화벽을 통과해야 합니다. 이러한 방화벽은 사용자 환경의 비즈니스 및 보안 요구 사항에 따라 전문가가 수동으로 설정 및 구성해야 합니다.

다음 섹션에는 구성 예가 나와 있습니다.

네트워크 간의 연결에 대해 보안을 설정하려면:

  • XenServer 관리 네트워크(dom0 포함)와 VM 네트워크(컨테이너 관리형 VM 포함) 간의 모든 연결을 방향에 관계없이 차단합니다.

Container Management를 사용하도록 설정하기 위해 예외를 추가합니다.

  • Linux 기반 운영 체제를 모니터링하려면 dom0에서 컨테이너 관리형 VM으로의 아웃바운드 SSH(TCP 포트 22) 연결을 신규 연결이든, 이미 설정된 연결이든 상관없이 모두 허용하십시오.

  • Windows Server 컨테이너를 모니터링하려면 dom0에서 컨테이너 관리형 VM으로의 아웃바운드 Docker TLS(TCP 포트 2376) 연결을 신규 연결이든, 이미 설정된 연결이든 상관없이 모두 허용하십시오.

  • dom0로 시작된 Docker TLS 연결 또는 (설정된) SSH에 대해 컨테이너 관리형 VM이 회신하도록 허용합니다.

Linux 기반 운영 체제의 인증

XenServer의 Container Management는 컨테이너 관리형 VM에서 풀 관련 4096비트 개인/공개 RSA 키 쌍을 사용하여 인증합니다. 개인 키는 XenServer 제어 도메인(dom0)에 저장됩니다. 각 공개 키는 준비되는 동안 Cloud Config Drive 또는 ~user/.ssh/authorized_keys 파일을 사용하여 컨테이너 관리형 VM에 등록됩니다. 모든 개인/공개 키 쌍과 마찬가지로, 개인 키는 모든 컨테이너 관리형 VM에 대해 암호가 없는 액세스를 허용하므로 안전하게 보관되어야 합니다. 이는 현재 관리되는 VM과 과거에 관리되던 VM에 모두 해당합니다.

XenServer의 Container Management는 VM 내에서 실행 중인 XenServer PV Tools에 의해 공개된 모든 IP 주소를 통해 컨테이너 관리형 VM에 연결하려 합니다. 초기 연결 이후 XenServer는 컨테이너 관리형 VM의 공개 키를 저장하고, 이후 모든 연결에 대해 키가 일치하는지 검증합니다. 네트워크 토폴로지가 오직 컨테이너 관리형 VM만 해당 공개된 IP(IP Source Guard 또는 유사 방법)를 통해 연결되도록 보장할 수 없는 경우 Citrix에서는 관리자가 최초 VM 연결 시 Container Management에서 받은 SSH 호스트 키를 확인할 것을 권장합니다.

다음 명령을 사용하여 키에 액세스할 수 있습니다.

xe vm-parm-get-uuid=vm-uuid param-name=other-config  /
  param-key=xscontainer-sshhostkey

여기서 vm-uuid는 VM의 UUID입니다.

Windows Server 컨테이너에 대한 인증

XenServer는 SSL 또는 TLS를 사용하여 Windows Server 컨테이너를 모니터링 및 제어합니다. 이 경우 XenServer는 SSL/TLS 클라이언트 역할을 하고 Windows Server VM은 SSL/TLS 서버 역할을 합니다. 키는 Dom0 및 VM 모두에 저장됩니다.

중요

  • 클라이언트 키는 VM의 Docker에 대해 암호가 없는 액세스를 허용하므로 안전하게 보관되어야 합니다.

  • 서버 키는 VM에 대한 모니터링 연결을 인증하는 데 사용되므로 안전하게 보관되어야 합니다.

–generate-certs 옵션을 사용하여 XenServer Container Management에서 TLS 인증서 및 키를 생성하는 경우 특히 특정 풀 및 VM에 대해 임시 CA, serverclient 인증서가 생성됩니다. 인증서는 sha256 해시를 사용하고 최장 2*365일 동안 유효하므로, 그 이후에는 준비 작업을 반복해야 합니다. TLS 연결은 항상 AES128-SHA 암호화를 사용하여 설정됩니다.