Windows 컨테이너에 대한 네트워킹 개념

완료됨

표준 Windows 컴퓨터의 프로세서에는 커널 모드와 사용자 모드가 있습니다. 핵심 OS 구성 요소와 대부분의 디바이스 드라이버는 커널 모드에서 실행되며 앱은 사용자 모드에서 실행됩니다. 컴퓨터에서 컨테이너를 구현할 때 각 컨테이너는 격리된 경량 환경을 만들어 호스트 OS에서 앱을 실행합니다. 컨테이너는 파일 시스템 및 레지스트리에 액세스하기 위해 호스트 OS 커널의 대부분을 공유합니다.

Windows 컨테이너에는 컨테이너 OS가 필요합니다. 컨테이너는 파일 시스템, 네트워크, 프로세스 예약 및 메모리 관리와 같은 서비스를 관리하기 위해 OS 커널에 따라 달라집니다. 컨테이너 OS는 패키지된 런타임의 일부인 OS입니다. 컨테이너와 함께 다양한 버전의 Windows를 사용하여 특정 OS 기능 또는 기타 필수 소프트웨어에 액세스할 수 있습니다.

네트워크 격리 및 보안

Windows 컨테이너는 프로세스Hyper-V의 두 가지 유형의 런타임 격리를 지원합니다. 주요 차이점은 컨테이너, 호스트 OS 및 호스트의 다른 컨테이너 간에 생성된 격리 범위입니다.

프로세스 격리가 가장 일반적인 방법입니다. 동일한 호스트에서 실행되는 여러 컨테이너 인스턴스는 다른 프로세스 격리 함수와 함께 네임스페이스 및 리소스 제어 설정을 통해 격리됩니다.

  • 각 컨테이너는 호스트 OS 및 호스트의 다른 컨테이너와 동일한 커널을 공유합니다.
  • 각 컨테이너에는 가상 스위치에 연결하는 가상 네트워크 어댑터가 있습니다.
  • 각 컨테이너 엔드포인트는 자체 네트워크 네임스페이스에 배치됩니다. 기본 네트워크 네임스페이스는 호스트 가상 네트워크 어댑터 및 호스트 네트워크 스택의 위치입니다.

Hyper-V 격리는 향상된 보안과 호스트와 컨테이너 간의 광범위한 호환성을 제공합니다. 여러 컨테이너 인스턴스는 동일한 호스트에서 실행되지만 각 컨테이너는 최적화된 가상 머신에서 실행됩니다. 가상 머신은 각 컨테이너와 컨테이너 호스트 간에 하드웨어 수준 격리를 제공합니다.

  • 각 컨테이너에는 기본적으로 자체 커널이 있습니다.
  • 호스트의 컨테이너 간에 네트워크 격리를 적용하기 위해 각 컨테이너에 대해 네트워크 네임스페이스가 만들어집니다.
  • 컨테이너는 컨테이너에 대한 가상 네트워크 어댑터가 설치된 Hyper-V 격리에서 실행됩니다. Windows Server 컨테이너는 호스트 가상 네트워크 어댑터를 사용하여 가상 스위치에 연결합니다. Hyper-V 격리는 가상 머신 네트워크 어댑터(유틸리티 가상 머신에 노출되지 않음)를 사용하여 가상 스위치에 연결합니다.

Diagram showing how the virtual machine provides hardware-level isolation between each container and the container host.

호스트 네트워크 서비스(HNS)를 사용하여 네트워크 관리

Windows는 HNS(호스트 네트워킹 서비스) 및 HCS(Host Compute Service)를 사용하여 컨테이너를 만들고 엔드포인트를 네트워크에 연결합니다.

  • 네트워크: HNS는 각 네트워크에 대한 Hyper-V 가상 스위치를 만들고 HNS는 필요한 NAT 및 IP 풀을 만듭니다.
  • 엔드포인트: HNS는 각 컨테이너 엔드포인트에 대한 네트워크 네임스페이스를 만들고 HNS/HCS는 가상 네트워크 어댑터를 네임스페이스에 추가합니다. HNS는 가상 스위치 포트를 만듭니다. HNS는 구성된 네트워크 드라이버 모드에 따라 IP 주소, DO기본 DNS(이름 시스템) 정보, 경로 등을 엔드포인트에 할당합니다.
  • 정책: 기본 NAT 네트워크의 경우 HNS는 해당 Windows 방화벽 허용 규칙을 사용하여 WinNAT 포트 전달 규칙 및 매핑을 만듭니다. 다른 모든 네트워크의 경우 HNS는 VFP(가상 필터링 플랫폼)를 사용하여 부하 분산, ACL 및 캡슐화에 대한 정책을 만듭니다.

방화벽 상호 작용

컨테이너 구성 및 네트워크 드라이버 유형에 따라 포트 ACL은 Windows 방화벽 및 Azure VFP(가상 필터링 플랫폼)의 조합에 의해 적용됩니다. 다음 값은 Windows 호스트의 방화벽(네트워크 네임스페이스로 인식됨) 및 VFP를 사용합니다.

  • 기본 아웃바운드: 모두 허용.
  • 기본 인바운드: 모든(TCP, UDP, ICMP, IGMP) 원치 않는 네트워크 트래픽을 허용합니다. 이러한 프로토콜이 아닌 다른 모든 네트워크 트래픽을 거부합니다.

네트워크 드라이버

Windows는 DOCKER 컨테이너에 대한 5가지 네트워킹 드라이버 또는 모드(NAT, 투명, 오버레이, L2Bridge 및 L2Tunnel)를 지원합니다. Windows에서 Docker에서 만든 기본 NAT 네트워크 외에도 Docker CLI의 docker network create 명령을 사용하여 사용자 지정 컨테이너 네트워크를 정의할 수도 있습니다.

다음 표에서는 Windows의 Docker 컨테이너에 사용할 수 있는 네트워크 드라이버 유형을 요약합니다. 물리적 네트워크 인프라 및 호스트(단일 또는 여러 노드) 구성의 요구 사항을 충족하는 네트워크 드라이버를 선택합니다.

네트워크 드라이버 일반적인 사용 용도 컨테이너 간(단일 노드) 컨테이너-외부(단일 노드 + 다중 노드) 컨테이너-컨테이너(다중 노드)
NAT(기본값) 개발자에게 적합 동일 서브넷: Hyper-V 가상 스위치를 통한 브리지 연결

크로스 서브넷: 지원되지 않음(NAT 내부 접두사 하나만)
관리 가상 네트워크 어댑터를 통해 라우팅됨(WinNAT에 바인딩됨) 직접 지원되지 않음: 호스트를 통해 포트를 노출해야 함
Transparent 개발자 또는 소규모 배포에 적합 동일 서브넷: Hyper-V 가상 스위치를 통한 브리지 연결

크로스 서브넷: 컨테이너 호스트를 통해 라우팅됩니다.
(물리적) 네트워크 어댑터에 직접 액세스하는 컨테이너 호스트를 통해 라우팅됨 (물리적) 네트워크 어댑터에 직접 액세스하는 컨테이너 호스트를 통해 라우팅됨
Overlay 다중 노드에 적합, Docker Swarm에 필요, Kubernetes에서 사용 가능 동일 서브넷: Hyper-V 가상 스위치를 통한 브리지 연결

서브넷 간: 네트워크 트래픽은 관리 가상 네트워크 어댑터를 통해 캡슐화되고 라우팅됩니다.
직접 지원되지 않음 - Windows Server 2016에서 NAT 네트워크에 연결된 두 번째 컨테이너 엔드포인트 또는 Windows Server 2019의 VFP NAT 규칙이 필요합니다. 동일/교차 서브넷: 네트워크 트래픽은 VXLAN을 사용하여 캡슐화되고 관리 가상 네트워크 어댑터를 통해 라우팅됩니다.
L2Bridge Kubernetes 및 Microsoft SDN(Software Designed Network)에 사용됩니다. 동일 서브넷: Hyper-V 가상 스위치를 통한 브리지 연결

서브넷 간: 수신 및 송신에 대해 다시 작성되고 라우팅된 컨테이너 MAC 주소입니다.
컨테이너 MAC 주소
수신 및 송신에 다시 작성 동일 서브넷: 브리지 연결

크로스 서브넷: WSv1809 이상에서 관리 가상 네트워크 어댑터를 통해 라우팅됨
L2Tunnel Azure 전용 동일/교차 서브넷: 정책이 적용되는 물리적 호스트의 Hyper-V 가상 스위치에 고정됩니다. 트래픽은 Azure 가상 네트워크 게이트웨이를 통과해야 함 동일/크로스 서브넷: 정책이 적용되는 실제 호스트의 Hyper-V 가상 스위치로 전환되어 고정됨

고급 네트워킹 옵션

Windows 특정 기능 및 기능에 대해 여러 네트워크 드라이버 옵션을 활용할 수 있습니다. 다음 몇 가지 예를 참조하세요.

  • Windows 컨테이너에 대해 여러 네트워크 어댑터를 지정하여 컨테이너 호스트 네트워크에 대한 Access Switch Embedded Teaming을 사용합니다.
  • 네트워크에 연결하는 모든 컨테이너 엔드포인트에 대해 VLAN 격리를 구성하도록 네트워크에 대한 VLAN ID를 설정합니다.
  • 외부 세계에 대한 컨테이너 액세스를 허용하도록 네트워크에 대한 OutboundNAT 정책을 지정합니다.

자세한 내용은 Windows의 고급 네트워크 옵션을 참조 하세요.