Windows 컨테이너 네트워크 드라이버
적용 대상: Windows Server 2025, 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 옵션을 사용하여 ping
또는 Test-NetConnection
같은 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 네트워크는 다음과 같은 2가지 방법으로 구성할 수 있습니다.
- L2bridge 네트워크는 컨테이너 호스트와 동일한 IP 서브넷으로 구성됩니다.
- 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 Cloud Stack(Azure)만 사용해야 합니다. l2bridge의 유일한 차이점은 모든 컨테이너 트래픽이 SDN 정책이 적용되는 가상화 호스트로 전송되어 컨테이너에 Azure 네트워크 보안 그룹 같은 기능을 사용하도록 설정한다는 것입니다.
네트워크 토폴로지 및 IPAM
아래 표에서는 각 네트워크 드라이버에 대한 내부(컨테이너 간) 및 외부 연결에 대해 네트워크 연결이 제공되는 방법을 보여 줍니다.
네트워킹 모드/Docker 드라이버
Docker Windows 네트워크 드라이버 | 일반적인 용도 | 컨테이너 간 통신 (단일 노드) | 컨테이너 - 외부 (단일 노드 + 다중 노드) | 컨테이너 간 통신(멀티 노드) |
---|---|---|---|---|
NAT(기본값) | 개발자에게 적합 |
|
관리 vNIC를 통해 라우팅됨(WinNAT에 바인딩됨) | 직접 지원되지 않음: 호스트를 통해 포트를 노출해야 함 |
투명 | 개발자 또는 소규모 배포에 적합 |
|
(물리적) 네트워크 어댑터에 직접 액세스하여 컨테이너 호스트를 통해 라우팅됨 | (물리적) 네트워크 어댑터에 직접 액세스하여 컨테이너 호스트를 통해 라우팅됨 |
오버레이 | 다중 노드에 적합합니다. Kubernetes에서 사용할 수 있는 Docker Swarm에 필요 |
|
직접 지원되지 않음 - Windows Server 2016의 NAT 네트워크에 연결된 두 번째 컨테이너 엔드포인트 또는 Windows Server 2019의 VFP NAT 규칙이 필요합니다. | 동일/교차 서브넷: 네트워크 트래픽은 VXLAN을 사용하여 캡슐화되고 Mgmt vNIC를 통해 라우팅됩니다. |
L2Bridge | Kubernetes 및 Microsoft SDN에 사용됨 |
|
입구 및 출구에서 다시 작성된 컨테이너 MAC 주소 |
|
L2Tunnel | Azure 전용 | 동일/교차 서브넷: 정책이 적용되는 물리적 호스트의 Hyper-V 가상 스위치로 트래픽이 되돌아가도록 설정됨 | 트래픽은 Azure 가상 네트워크 게이트웨이를 통과해야 합니다. | 동일/교차 서브넷: 정책이 적용된 물리적 호스트의 Hyper-V 가상 스위치에 연결된 상태 |
IPAM
IP 주소는 각 네트워크 드라이버에 따라 다르게 배정되고 할당됩니다. Windows는 HNS(호스트 네트워킹 서비스)를 사용하여 nat 드라이버에 IPAM을 제공하고 Docker Swarm 모드(내부 KVS)와 함께 작동하여 오버레이용 IPAM을 제공합니다. 다른 모든 네트워크 드라이버는 외부 IPAM을 사용합니다.
네트워킹 모드/드라이버 | IPAM |
---|---|
네트워크 주소 변환 (NAT) | 내부 NAT 서브넷 접두사에서 HNS(Host Networking Service)에 의한 동적 IP 할당 및 지정 |
투명한 | 컨테이너 호스트의 네트워크 접두사 내 IP 주소에서 고정 IP 또는 동적 IP(외부 DHCP 서버 사용)의 할당 및 배정 |
오버레이 | Docker 엔진 Swarm 모드에서 관리하는 접두사로부터의 동적 IP 할당 및 HNS를 통한 할당 |
L2Bridge | 제공된 서브넷 접두사에서 호스트 네트워킹 서비스(HNS)에 의한 동적 IP 할당 및 배정 |
L2Tunnel | Azure 전용 - 플러그인에서 동적 IP 할당 및 지정 |
서비스 검색
서비스 검색은 특정 Windows 네트워크 드라이버에 대해서만 지원됩니다.
드라이버 이름 | 로컬 서비스 검색 | 글로벌 서비스 검색 |
---|---|---|
nat | 예 | Docker EE로 가능 |
오버레이 | 예 | 네, Docker EE 또는 kube-dns를 사용할 수 있습니다. |
투명한 | 아니요 | 아니요 |
l2bridge | YES with kube-dns | YES with kube-dns |