Interact 2017
2017/06/24
System Center User Group Japan
後藤 諭史(Satoshi GOTO)
 後藤 諭史( Satoshi GOTO )
 外資系になってしまった某 ISP 所属。
 仮想化製品が主な専門分野です。
 Microsoft MVP - Cloud and Datacenter Management
(Jul.2012 - Jun.2017)
 TwitterとBlogはこちら
◦ Twitter:@wind06106/Blog:Tech Notes(http://www.dob1.info :更新止まってます)
2
 セッションの目的
◦ Windows Server 2016 で実装された Windows Container に関して、
提供されるネットワーク接続機能をご理解いただく。
◦ Windows Container において利用可能なネットワーク仮想化技術とその機
能をご理解いただく。
 セッションのゴール
◦ Windows Container において、どのようなネットワーク接続が提供されて
いるかを説明できる。
3
 Windows Container Networking の実装
 Network Virtualization
- Docker Swarm/L2Bridge with Microsoft SDN v2 -
 まとめ
4
本セッション資料ですが、個人で準備した環境において、個人的に実施した検証/結果を基に記載しています。
あくまで個人の意見/見解であり、所属する会社/組織及びマイクロソフト社とは『まったく/なにも/全
然』関係がございません。
所属する会社/組織/マイクロソフト社の正式な回答/見解ではない事に留意してください。
また、本資料を閲覧した事により問題が生じた場合、または問題が発生しかけた場合、または生じた一切の不
利益について、発表者は一切の責任を負う事はできませんのでご了承ください。
5
本セッションでは、Windows Container もしくは Hyper-V Containerの実装そのものは全く扱っていない事に留
意してください。
この辺りは『 Windows コンテナー技術入門』を参考にしていただければ……。
6
真壁徹 (著)
インプレス (2017/3/16)
ISBN-10: 4295000957
ISBN-13: 978-4295000952
7
 『 Windows コンテナー技術入門』では....
◦ P.53 からコンテナーのIPアドレスの確認(1ページ)
◦ P.55 から『ネットワーク構成の理解』(3ページ)
◦ P.64 から WinNAT のコラム(1ページ)
◦ P.199 から Swarmモードに関するコラム(2ページ)
えぇ――――っ!!
ミ~ ̄ ̄ ̄\
/ ____亅
/ > ⌒ ⌒|
|/ (・) (・)|
(6――○-○-|
| つ |
| ___)/
\ (_/ /
/\__/
/ \><∧
/ / V||
/_/ |||
⊂ニu\__/Lu⊃
| / /
| / /
| / /
(ニフフ
8
 ちゃんと解説されています
◦ https://docs.microsoft.com/en-us/virtualization/windowscontainers/manage-containers/container-networking
ここを読めば、万事解決
9
10
 Hyper-V 仮想スイッチをベースとした VM ライクなネットワークアーキテクチャー
◦ それぞれのコンテナーが仮想ネットワークアダプター (vNIC) をもち、仮想スイッチに接続
◦ 仮想スイッチから物理ネットワークアダプター (pNIC) にパケットが転送され、物理ネットワークに送出
◦ したがって、それぞれのコンテナーが独自の MAC アドレスを持って通信を行う
11
コンテナーのIP
12
 コンテナーを物理ネットワークに接続するためには、コンテナーネットワークを作る必要
がある
◦ docker network create --driver=xxxx
 コンテナーネットワークを作る際、『--driver』オプションにて指定するネットワークドラ
イバーによって、どのようなネットワーク接続になるかが決定される
◦ nat :ネットワークアドレス変換接続(既定)
NAT の実装に関しては『 Windows コンテナー技術入門』のP.64を参照のこと
◦ transparent :透過接続
◦ overlay :仮想ネットワーク接続
◦ l2bridge :Hyper-V仮想スイッチを介したブリッジ接続。MAC アドレス変換 (MAC re-write) 接続
◦ l2tunnel :Microsoft Cloud Stack 環境限定(文書によっては『 Azure Only 』)。
Dynamic IP allocation による l2bridge 接続(?)
13
使用可能なネットワークドライバー
14
 使用するネットワークドライバーにより、仮想スイッチの機能拡張(エクステンション)
が有効になる
 Azure VFP が有効になるネットワークドライバーは次の通り
◦ overlay
◦ l2bridge
◦ l2tunnel
15
単一ノード上でのコンテナー間通信 複数ノード上でのコンテナー間通信 単一/複数ノード上での外部通信
NAT
開発環境に最適
・同一サブネットの場合、Hyper-V 仮想
Switchにてブリッジ接続
・異なるサブネット通信はWS2016では
サポート外(現在のNAT仕様による)
・WinNATを介して接続する必要があり、
接続先アドレス/ポート番号は、NAT
設定に依存
・NAT前のアドレスでは接続不可
・NATが適用され、WinNATを介してルー
ティングされる
Transparent
開発環境や小規模本番環境に
最適
・同一サブネットの場合、Hyper-V 仮想
Switchにてブリッジ接続
・異なるサブネットの場合は、外部の
ルーティングデバイスを経由して通信
する必要あり
・物理ネットワークへ直接アクセス ・物理ネットワークへ直接アクセス
Overlay
Docker Swarmやマルチノード
環境で利用
・同一サブネットの場合、Hyper-V 仮想
Switchにてブリッジ接続
・同一サブネットであれば VXLAN によ
る L2 接続が可能
・物理ネットワークへの直接アクセスは
不可
・NAT Network に別途接続し、WinNAT
経由で接続する
L2bridge
KubernetesやMicrosoft SDNで
利用
・同一サブネットの場合、Hyper-V 仮想
Switchにてブリッジ接続
・MAC re-writeにて物理ネットワークに
接続、外部のルーティングデバイスを
経由して通信する必要あり
・同一サブネットの場合、ブリッジ接続
・異なるサブネットの場合は、WS2016
ではサポート外
・MAC re-writeにて物理ネットワークへ
直接アクセス
L2Tunnel
Azure Only
・物理ホストのHyper-V 仮想スイッチに
て折り返し通信を実施
・物理ホストのHyper-V 仮想スイッチに
て折り返し通信を実施
・仮想ネットワークゲートウェイが必須
16
 L2Bridge は、MAC アドレスをホストの MACアドレスに書き換えたのちに、ネットワー
クに送出
◦ ネットワークから見ると、ホスト上に存在するコンテナーの全てが同一MACアドレス
→ 10 台のコンテナー が存在しても、MAC アドレスは 1 個
◦ MAC re-write のために、Azure VFP が有効化される
 Transparent は、コンテナーに採番されたMAC アドレスが、そのままのネットワークに送
出される
◦ ネットワークから見ると、コンテナーの MAC アドレスは全て個別にみえる
→ 10 台のコンテナーが存在した場合、10 個の MAC アドレスがみえる
◦ コンテナーホストが仮想マシンの場合、ネットワークアダプターの設定にて
『MAC address spoofing』を有効化する必要がある
17
L2Bridge
Transparent
PS C:UsersAdministrator> docker network create -d l2bridge --subnet=172.16.10.0/24 --gateway=172.16.10.250 -o com.dock
er.network.windowsshim.interface="Eth1" l2bridge_network
08e348c6718660121e01d6f33f9345073629980dd80a8d0354627588e7f88aab
PS C:UsersAdministrator> docker network create -d transparent --subnet=172.16.10.0/24 --gateway=172.16.10.250 -o com.d
ocker.network.windowsshim.interface="Eth2" transparent_network
08ae6180225a44c8ee334d17743f758d35126e6e0bcebd6ddd963a37aceede4b
PS C:UsersAdministrator> docker run -d --network=l2bridge_network --ip 172.16.10.41 --dns 172.16.10.254 --name testsv
microsoft/iis:windowsservercore
071514b68c4b742f1317963474a99368e711f5829df76340f13dad020c87a76f
PS C:UsersAdministrator> docker run -d --network=transparent_network --ip 172.16.10.42 --dns 172.16.10.254 --name test
sv2 microsoft/iis:windowsservercore
47056051657f7e3e5d73b10ab4af9a0bddf5accef7010d1e961cd47e0b89ec17
PS C:UsersAdministrator>
C:Windowssystem32>arp -a
Internet Address Physical Address Type
172.16.10.34 00-15-5d-d9-8c-06 dynamic
172.16.10.35 00-15-5d-d9-8c-07 dynamic
172.16.10.41 00-15-5d-d9-8c-06 dynamic
172.16.10.42 00-15-5d-24-a2-b5 dynamic
Eth1
Eth2
18
19
20
 複数のコンテナーホスト上で稼働するコンテナー間にて、NAT等を実施しないネイティブ
な通信(L2接続/L3接続)を実施したい際に利用
 仮想ネットワーク接続が可能なネットワークドライバーは次の通り
◦ overlay
◦ l2bridge
◦ l2tunnel
 仮想ネットワークのトランスポートプロトコルはVXLAN
21
 Docker クラスター管理ツール
 Docker ホストをクラスター化し、稼働するコンテナーからは、あたかも1台のホスト上で
稼働しているように見せる
◦ リソースプールとして扱うことが可能
◦ クラスターメンバーは、Windows Server 2016の他、Linux ホストも追加可能
 クラスターやネットワーク、クラスターコンテナー(サービス)の作成/管理は、
すべて Docker コマンドで実施
◦ docker swarm init / join
◦ docker network create --driver=overlay
◦ docker service create
◦ docker service scale
 異なるホスト上で稼働するコンテナー間の L2 接続に VXLAN が使用される
◦ VXLANのカプセリングはAzure VFPが担当
22
23
 Swarm mode は以下の条件を満たしていないと動かないので注意
◦ Windows Server 2016 の場合: KB4015217 ( 2017/04/11 累積アップデート)以降が適用されていること
◦ Windows10 の場合: Creators Update 以降であること
 ルーティングメッシュ(コンテナーが未応答だった場合の、dockerホストによるリクエス
ト転送(再分配)機能)は未対応
◦ なので、『 docker service create --endpoint-mode dnsrr 』( DNS ラウンドロビン)のみ対応
◦ 今後実装予定との事( but will be coming soon. )
◦ 外部ロードバランサー( NGINX 等)を利用し、 Publish port を設定することにより、代替機能として利用可能
-> --publish mode=host,target=80,published=8080
 Data-plane encryption (仮想ネットワーク区間におけるデータの暗号化)は未対応
24
 Microsoft SDN v2 環境下でもコンテナーは利用可能
 テナント VM の NIC に Multiple IP Address を設定し、その IP Address をコンテナーで
使用する事により、テナントネットワークの各種リソース( SLBMUX 等)を利用可能
 ネットワークドライバーは『l2bridge』を使用
 実装方法は以下のURLを参照のこと
◦ https://docs.microsoft.com/en-us/windows-server/networking/sdn/manage/connect-container-endpoints-to-a-tenant-virtual-network
25
https://kubernetes.io/docs/getting-started-guides/windows/
https://blogs.technet.microsoft.com/networking/2017/04/04/windows-networking-for-kubernetes/
26
27
 コンテナーのネットワーク接続は NAT 接続だけにあらず
 用途によって使い分けが可能です
 Microsoft Azure Stack におけるコンテナーのネットワーク実装も、おそらくは
l2brige/l2tunnelによる実装になっているのではないかと想像しています
 とりあえず、使ってみてくださいませ
28
 Windows Container Networking
https://docs.microsoft.com/en-us/virtualization/windowscontainers/manage-containers/container-networking
 Getting Started with Swarm Mode
https://docs.microsoft.com/en-us/virtualization/windowscontainers/manage-containers/swarm-mode
 Connect container endpoints to a tenant virtual network
https://docs.microsoft.com/en-us/windows-server/networking/sdn/manage/connect-container-endpoints-to-a-tenant-virtual-network
 github
https://github.com/Microsoft/SDN
29

Interact2017:Windows Container "Overlay" Networking

  • 1.
    Interact 2017 2017/06/24 System CenterUser Group Japan 後藤 諭史(Satoshi GOTO)
  • 2.
     後藤 諭史(Satoshi GOTO )  外資系になってしまった某 ISP 所属。  仮想化製品が主な専門分野です。  Microsoft MVP - Cloud and Datacenter Management (Jul.2012 - Jun.2017)  TwitterとBlogはこちら ◦ Twitter:@wind06106/Blog:Tech Notes(http://www.dob1.info :更新止まってます) 2
  • 3.
     セッションの目的 ◦ WindowsServer 2016 で実装された Windows Container に関して、 提供されるネットワーク接続機能をご理解いただく。 ◦ Windows Container において利用可能なネットワーク仮想化技術とその機 能をご理解いただく。  セッションのゴール ◦ Windows Container において、どのようなネットワーク接続が提供されて いるかを説明できる。 3
  • 4.
     Windows ContainerNetworking の実装  Network Virtualization - Docker Swarm/L2Bridge with Microsoft SDN v2 -  まとめ 4
  • 5.
  • 6.
    本セッションでは、Windows Container もしくはHyper-V Containerの実装そのものは全く扱っていない事に留 意してください。 この辺りは『 Windows コンテナー技術入門』を参考にしていただければ……。 6 真壁徹 (著) インプレス (2017/3/16) ISBN-10: 4295000957 ISBN-13: 978-4295000952
  • 7.
    7  『 Windowsコンテナー技術入門』では.... ◦ P.53 からコンテナーのIPアドレスの確認(1ページ) ◦ P.55 から『ネットワーク構成の理解』(3ページ) ◦ P.64 から WinNAT のコラム(1ページ) ◦ P.199 から Swarmモードに関するコラム(2ページ) えぇ――――っ!! ミ~ ̄ ̄ ̄\ / ____亅 / > ⌒ ⌒| |/ (・) (・)| (6――○-○-| | つ | | ___)/ \ (_/ / /\__/ / \><∧ / / V|| /_/ ||| ⊂ニu\__/Lu⊃ | / / | / / | / / (ニフフ
  • 8.
  • 9.
  • 10.
    10  Hyper-V 仮想スイッチをベースとしたVM ライクなネットワークアーキテクチャー ◦ それぞれのコンテナーが仮想ネットワークアダプター (vNIC) をもち、仮想スイッチに接続 ◦ 仮想スイッチから物理ネットワークアダプター (pNIC) にパケットが転送され、物理ネットワークに送出 ◦ したがって、それぞれのコンテナーが独自の MAC アドレスを持って通信を行う
  • 11.
  • 12.
    12  コンテナーを物理ネットワークに接続するためには、コンテナーネットワークを作る必要 がある ◦ dockernetwork create --driver=xxxx  コンテナーネットワークを作る際、『--driver』オプションにて指定するネットワークドラ イバーによって、どのようなネットワーク接続になるかが決定される ◦ nat :ネットワークアドレス変換接続(既定) NAT の実装に関しては『 Windows コンテナー技術入門』のP.64を参照のこと ◦ transparent :透過接続 ◦ overlay :仮想ネットワーク接続 ◦ l2bridge :Hyper-V仮想スイッチを介したブリッジ接続。MAC アドレス変換 (MAC re-write) 接続 ◦ l2tunnel :Microsoft Cloud Stack 環境限定(文書によっては『 Azure Only 』)。 Dynamic IP allocation による l2bridge 接続(?)
  • 13.
  • 14.
    14  使用するネットワークドライバーにより、仮想スイッチの機能拡張(エクステンション) が有効になる  AzureVFP が有効になるネットワークドライバーは次の通り ◦ overlay ◦ l2bridge ◦ l2tunnel
  • 15.
    15 単一ノード上でのコンテナー間通信 複数ノード上でのコンテナー間通信 単一/複数ノード上での外部通信 NAT 開発環境に最適 ・同一サブネットの場合、Hyper-V仮想 Switchにてブリッジ接続 ・異なるサブネット通信はWS2016では サポート外(現在のNAT仕様による) ・WinNATを介して接続する必要があり、 接続先アドレス/ポート番号は、NAT 設定に依存 ・NAT前のアドレスでは接続不可 ・NATが適用され、WinNATを介してルー ティングされる Transparent 開発環境や小規模本番環境に 最適 ・同一サブネットの場合、Hyper-V 仮想 Switchにてブリッジ接続 ・異なるサブネットの場合は、外部の ルーティングデバイスを経由して通信 する必要あり ・物理ネットワークへ直接アクセス ・物理ネットワークへ直接アクセス Overlay Docker Swarmやマルチノード 環境で利用 ・同一サブネットの場合、Hyper-V 仮想 Switchにてブリッジ接続 ・同一サブネットであれば VXLAN によ る L2 接続が可能 ・物理ネットワークへの直接アクセスは 不可 ・NAT Network に別途接続し、WinNAT 経由で接続する L2bridge KubernetesやMicrosoft SDNで 利用 ・同一サブネットの場合、Hyper-V 仮想 Switchにてブリッジ接続 ・MAC re-writeにて物理ネットワークに 接続、外部のルーティングデバイスを 経由して通信する必要あり ・同一サブネットの場合、ブリッジ接続 ・異なるサブネットの場合は、WS2016 ではサポート外 ・MAC re-writeにて物理ネットワークへ 直接アクセス L2Tunnel Azure Only ・物理ホストのHyper-V 仮想スイッチに て折り返し通信を実施 ・物理ホストのHyper-V 仮想スイッチに て折り返し通信を実施 ・仮想ネットワークゲートウェイが必須
  • 16.
    16  L2Bridge は、MACアドレスをホストの MACアドレスに書き換えたのちに、ネットワー クに送出 ◦ ネットワークから見ると、ホスト上に存在するコンテナーの全てが同一MACアドレス → 10 台のコンテナー が存在しても、MAC アドレスは 1 個 ◦ MAC re-write のために、Azure VFP が有効化される  Transparent は、コンテナーに採番されたMAC アドレスが、そのままのネットワークに送 出される ◦ ネットワークから見ると、コンテナーの MAC アドレスは全て個別にみえる → 10 台のコンテナーが存在した場合、10 個の MAC アドレスがみえる ◦ コンテナーホストが仮想マシンの場合、ネットワークアダプターの設定にて 『MAC address spoofing』を有効化する必要がある
  • 17.
    17 L2Bridge Transparent PS C:UsersAdministrator> dockernetwork create -d l2bridge --subnet=172.16.10.0/24 --gateway=172.16.10.250 -o com.dock er.network.windowsshim.interface="Eth1" l2bridge_network 08e348c6718660121e01d6f33f9345073629980dd80a8d0354627588e7f88aab PS C:UsersAdministrator> docker network create -d transparent --subnet=172.16.10.0/24 --gateway=172.16.10.250 -o com.d ocker.network.windowsshim.interface="Eth2" transparent_network 08ae6180225a44c8ee334d17743f758d35126e6e0bcebd6ddd963a37aceede4b PS C:UsersAdministrator> docker run -d --network=l2bridge_network --ip 172.16.10.41 --dns 172.16.10.254 --name testsv microsoft/iis:windowsservercore 071514b68c4b742f1317963474a99368e711f5829df76340f13dad020c87a76f PS C:UsersAdministrator> docker run -d --network=transparent_network --ip 172.16.10.42 --dns 172.16.10.254 --name test sv2 microsoft/iis:windowsservercore 47056051657f7e3e5d73b10ab4af9a0bddf5accef7010d1e961cd47e0b89ec17 PS C:UsersAdministrator> C:Windowssystem32>arp -a Internet Address Physical Address Type 172.16.10.34 00-15-5d-d9-8c-06 dynamic 172.16.10.35 00-15-5d-d9-8c-07 dynamic 172.16.10.41 00-15-5d-d9-8c-06 dynamic 172.16.10.42 00-15-5d-24-a2-b5 dynamic Eth1 Eth2
  • 18.
  • 19.
  • 20.
  • 21.
    21  Docker クラスター管理ツール Docker ホストをクラスター化し、稼働するコンテナーからは、あたかも1台のホスト上で 稼働しているように見せる ◦ リソースプールとして扱うことが可能 ◦ クラスターメンバーは、Windows Server 2016の他、Linux ホストも追加可能  クラスターやネットワーク、クラスターコンテナー(サービス)の作成/管理は、 すべて Docker コマンドで実施 ◦ docker swarm init / join ◦ docker network create --driver=overlay ◦ docker service create ◦ docker service scale  異なるホスト上で稼働するコンテナー間の L2 接続に VXLAN が使用される ◦ VXLANのカプセリングはAzure VFPが担当
  • 22.
  • 23.
    23  Swarm modeは以下の条件を満たしていないと動かないので注意 ◦ Windows Server 2016 の場合: KB4015217 ( 2017/04/11 累積アップデート)以降が適用されていること ◦ Windows10 の場合: Creators Update 以降であること  ルーティングメッシュ(コンテナーが未応答だった場合の、dockerホストによるリクエス ト転送(再分配)機能)は未対応 ◦ なので、『 docker service create --endpoint-mode dnsrr 』( DNS ラウンドロビン)のみ対応 ◦ 今後実装予定との事( but will be coming soon. ) ◦ 外部ロードバランサー( NGINX 等)を利用し、 Publish port を設定することにより、代替機能として利用可能 -> --publish mode=host,target=80,published=8080  Data-plane encryption (仮想ネットワーク区間におけるデータの暗号化)は未対応
  • 24.
    24  Microsoft SDNv2 環境下でもコンテナーは利用可能  テナント VM の NIC に Multiple IP Address を設定し、その IP Address をコンテナーで 使用する事により、テナントネットワークの各種リソース( SLBMUX 等)を利用可能  ネットワークドライバーは『l2bridge』を使用  実装方法は以下のURLを参照のこと ◦ https://docs.microsoft.com/en-us/windows-server/networking/sdn/manage/connect-container-endpoints-to-a-tenant-virtual-network
  • 25.
  • 26.
  • 27.
    27  コンテナーのネットワーク接続は NAT接続だけにあらず  用途によって使い分けが可能です  Microsoft Azure Stack におけるコンテナーのネットワーク実装も、おそらくは l2brige/l2tunnelによる実装になっているのではないかと想像しています  とりあえず、使ってみてくださいませ
  • 28.
    28  Windows ContainerNetworking https://docs.microsoft.com/en-us/virtualization/windowscontainers/manage-containers/container-networking  Getting Started with Swarm Mode https://docs.microsoft.com/en-us/virtualization/windowscontainers/manage-containers/swarm-mode  Connect container endpoints to a tenant virtual network https://docs.microsoft.com/en-us/windows-server/networking/sdn/manage/connect-container-endpoints-to-a-tenant-virtual-network  github https://github.com/Microsoft/SDN
  • 29.