Windows 컨테이너 네트워크 드라이버

적용 대상: Windows Server 2022, Windows Server 2019, Windows Server 2016

사용자는 Windows에서 Docker에서 만든 기본 'nat' 네트워크를 활용하는 것 외에도 사용자 지정 컨테이너 네트워크를 정의할 수 있습니다. Docker CLI docker network create -d <NETWORK DRIVER TYPE> <NAME> 명령을 사용하여 사용자 정의 네트워크를 만들 수 있습니다. Windows에서는 다음과 같은 네트워크 드라이버 유형을 사용할 수 있습니다.

NAT 네트워크 드라이버

'nat' 드라이버로 만든 네트워크에 연결된 컨테이너는 내부 Hyper-V 스위치에 연결되고 사용자가 지정한(--subnet) IP 접두사에서 IP 주소를 받습니다. 컨테이너 호스트에서 컨테이너 엔드포인트으로의 포트 전달/매핑이 지원됩니다.

Docker 디먼 구성 파일의 설정을 통해 fixed-cidr 기본 'nat' 네트워크에서 사용하는 서브넷을 사용자 지정할 수 있습니다.

참고

Windows Server 2019 이상에서 만든 NAT 네트워크는 다시 부팅 후 더 이상 유지되지 않습니다.

NAT 네트워크 만들기

서브넷 10.244.0.0/24을 사용하여 새 NAT 네트워크를 만들려면:

docker network create -d "nat" --subnet "10.244.0.0/24" my_nat

투명한 네트워크 드라이버

'투명' 드라이버로 만든 네트워크에 연결된 컨테이너는 외부 Hyper-V 스위치를 통해 물리적 네트워크에 직접 연결됩니다. 물리적 네트워크의 IP는 정적으로 할당하거나(사용자 지정 --subnet 옵션 필요) 외부 DHCP 서버를 사용하여 동적으로 할당할 수 있습니다.

참고

다음 요구 사항으로 인해 투명한 네트워크를 통해 컨테이너 호스트를 연결하는 것은 Azure VM에서 지원되지 않습니다.

필요: 가상화 시나리오에서 이 모드를 사용하는 경우(컨테이너 호스트는 VM임) MAC 주소 스푸핑이 필요합니다.

투명한 네트워크 만들기

서브넷 10.244.0.0/24, 게이트웨이 10.244.0.1, DNS 서버 10.244.0.7 및 VLAN ID 7를 사용하여 새 투명 네트워크를 만들려면:

docker network create -d "transparent" --subnet 10.244.0.0/24 --gateway 10.244.0.1 -o com.docker.network.windowsshim.vlanid=7 -o com.docker.network.windowsshim.dnsservers="10.244.0.7" my_transparent

오버레이 네트워크 드라이버

Docker Swarm 및 Kubernetes와 같은 컨테이너 오케스트레이터에서 널리 사용되는 오버레이 네트워크에 연결된 컨테이너는 여러 컨테이너 호스트에서 동일한 네트워크에 연결된 다른 컨테이너와 통신할 수 있습니다. 각 오버레이 네트워크는 개인 IP 접두사로 정의된 자체 IP 서브넷으로 만들어집니다. 오버레이 네트워크 드라이버는 VXLAN 캡슐화를 사용하여 테넌트 컨테이너 네트워크 간의 네트워크 트래픽 격리를 달성하고 오버레이 네트워크에서 IP 주소를 다시 사용할 수 있도록 합니다.

요구 사항: 환경이 오버레이 네트워크를 만들기 위한 이러한 필수 구성 요소를 충족하는지 확인합니다.

필요: Windows Server 2019에서는 KB4489899가 필요합니다.

필요: Windows Server 2016 KB4015217이 필요합니다.

참고

Windows Server 2019 이상에서는 Docker Swarm에서 만든 오버레이 네트워크가 아웃바운드 연결을 위해 VFP NAT 규칙을 활용합니다. 즉, 지정된 컨테이너는 1개의 IP 주소를 받습니다. 디버깅 상황에서 TCP/UDP 옵션을 사용하여 또는 Test-NetConnection 와 같은 ping ICMP 기반 도구를 구성해야 한다는 의미이기도 합니다.

오버레이 네트워크 만들기

서브넷 10.244.0.0/24, DNS 서버 168.63.129.16및 VSID 4096를 사용하여 새 오버레이 네트워크를 만들려면:

docker network create -d "overlay" --attachable --subnet "10.244.0.0/24" -o com.docker.network.windowsshim.dnsservers="168.63.129.16" -o com.docker.network.driver.overlay.vxlanid_list="4096" my_overlay

L2bridge 네트워크 드라이버

'l2bridge' 드라이버로 만든 네트워크에 연결된 컨테이너는 외부 Hyper-V 스위치를 통해 물리적 네트워크에 연결됩니다. l2bridge에서 컨테이너 네트워크 트래픽은 수신 및 송신에 대한 계층 2 주소 변환(MAC 다시 쓰기) 작업으로 인해 호스트와 동일한 MAC 주소를 갖습니다. 데이터 센터에서는 수명이 짧은 컨테이너의 MAC 주소를 학습해야 하는 스위치의 스트레스를 완화하는 데 도움이 됩니다. L2bridge 네트워크는 다음과 같은 두 가지 방법으로 구성할 수 있습니다.

  1. L2bridge 네트워크는 컨테이너 호스트와 동일한 IP 서브넷으로 구성됩니다.
  2. L2bridge 네트워크는 새 사용자 지정 IP 서브넷으로 구성됩니다.

구성 2에서 사용자는 게이트웨이 역할을 하는 호스트 네트워크 구획에 엔드포인트를 추가하고 지정된 접두사에 대한 라우팅 기능을 구성해야 합니다.

l2bridge 네트워크 만들기

서브넷 10.244.0.0/24, 게이트웨이 10.244.0.1, DNS 서버 10.244.0.7 및 VLAN ID 7을 사용하여 새 l2bridge 네트워크를 만들려면 다음을 수행합니다.

docker network create -d "l2bridge" --subnet 10.244.0.0/24 --gateway 10.244.0.1 -o com.docker.network.windowsshim.vlanid=7 -o com.docker.network.windowsshim.dnsservers="10.244.0.7" my_l2bridge

L2bridge 네트워크는 고도로 프로그래밍할 수 있습니다. l2bridge를 구성하는 방법에 대한 자세한 내용은 여기에서 확인할 수 있습니다.

L2tunnel 네트워크 드라이버

만들기는 l2bridge와 동일합니다. 그러나 이 드라이버는 Microsoft 클라우드 스택(Azure)에서만 사용해야 합니다. l2bridge의 유일한 차이점은 모든 컨테이너 트래픽이 SDN 정책이 적용되는 가상화 호스트로 전송되어 컨테이너에 대한 Azure 네트워크 보안 그룹과 같은 기능을 사용하도록 설정하는 것입니다.

네트워크 토폴로지 및 IPAM

아래 표에서는 각 네트워크 드라이버에 대한 내부(컨테이너 간) 및 외부 연결에 대해 네트워크 연결을 제공하는 방법을 보여 줍니다.

네트워킹 모드/Docker 드라이버

Docker Windows 네트워크 드라이버 일반적인 사용 용도 컨테이너 간(단일 노드) 컨테이너-외부(단일 노드 + 다중 노드) 컨테이너-컨테이너(다중 노드)
NAT(기본값) 개발자에게 적합
  • 동일 서브넷: Hyper-V 가상 스위치를 통한 브리지 연결
  • 크로스 서브넷: 지원되지 않음(NAT 내부 접두사 하나만)
관리 vNIC를 통해 라우팅됨(WinNAT에 바인딩됨) 직접 지원되지 않음: 호스트를 통해 포트를 노출해야 함
투명 개발자 또는 소규모 배포에 적합
  • 동일 서브넷: Hyper-V 가상 스위치를 통한 브리지 연결
  • 크로스 서브넷: 컨테이너 호스트를 통해 라우팅됨
(물리적) 네트워크 어댑터에 직접 액세스하는 컨테이너 호스트를 통해 라우팅됨 (물리적) 네트워크 어댑터에 직접 액세스하는 컨테이너 호스트를 통해 라우팅됨
Overlay 다중 노드에 적합, Docker Swarm에 필요, Kubernetes에서 사용 가능
  • 동일 서브넷: Hyper-V 가상 스위치를 통한 브리지 연결
  • 크로스 서브넷: 네트워크 트래픽이 캡슐화되고 Mgmt vNIC를 통해 라우팅됨
직접 지원되지 않음 - Windows Server 2016에서 NAT 네트워크에 연결된 두 번째 컨테이너 엔드포인트 또는 Windows Server 2019의 VFP NAT 규칙이 필요합니다. 동일/크로스 서브넷: 네트워크 트래픽은 VXLAN을 사용하여 캡슐화되고 Mgmt vNIC를 통해 라우팅됨
L2Bridge Kubernetes 및 Microsoft SDN에 사용됨
  • 동일 서브넷: Hyper-V 가상 스위치를 통한 브리지 연결
  • 크로스 서브넷: 수신 및 송신에 대해 재작성되고 라우팅된 컨테이너 MAC 주소
수신 및 송신에 대해 재작성된 컨테이너 MAC 주소
  • 동일 서브넷: 브리지 연결
  • 크로스 서브넷: WSv1809 이상의 Mgmt vNIC를 통해 라우팅됨
L2Tunnel Azure 전용 동일/크로스 서브넷: 정책이 적용되는 실제 호스트의 Hyper-V 가상 스위치로 전환되어 고정됨 트래픽은 Azure 가상 네트워크 게이트웨이를 통과해야 함 동일/크로스 서브넷: 정책이 적용되는 실제 호스트의 Hyper-V 가상 스위치로 전환되어 고정됨

IPAM

IP 주소는 각 네트워킹 드라이버에 대해 할당되고 다르게 할당됩니다. Windows는 HNS(호스트 네트워킹 서비스)를 사용하여 nat 드라이버에 대한 IPAM을 제공하고 Docker Swarm 모드(내부 KVS)에서 작동하여 오버레이에 대한 IPAM을 제공합니다. 다른 모든 네트워크 드라이버는 외부 IPAM을 사용합니다.

네트워킹 모드/드라이버 IPAM
NAT 내부 NAT 서브넷 접두사에서 HNS(호스트 네트워킹 서비스)에 의한 동적 IP 할당 및 할당
투명 컨테이너 호스트의 네트워크 접두사 내 IP 주소에서 고정 또는 동적(외부 DHCP 서버 사용) IP 할당 및 할당
오버레이 Docker 엔진 Swarm 모드 관리 접두사에서 동적 IP 할당 및 HNS를 통한 할당
L2Bridge 제공된 서브넷 접두사에서 HNS(호스트 네트워킹 서비스)에 의한 동적 IP 할당 및 할당
L2Tunnel Azure 전용 - 플러그 인에서 동적 IP 할당 및 할당

서비스 검색

서비스 검색은 특정 Windows 네트워크 드라이버에 대해서만 지원됩니다.

드라이버 이름 로컬 서비스 검색 글로벌 서비스 검색
nat YES Docker EE를 사용하여 예
오버레이 YES Docker EE 또는 kube-dns를 사용한 예
transparent 아니요 아니요
l2bridge 예( kube-dns 사용) 예( kube-dns 사용)