CodeReady Containers 向け Hyper-V ネットワーク設定メモ

CodeReady Containers (以下,CRC) は,PC の上で OpenShift4 を利用できるパッケージ.Windows 10 Pro でも Hyper-V を使用して稼働させることができます.

しかし,Hyper-V のネットワークに癖があるので,希望する構成パターンによっては少し工夫が必要でした.

CRC では,Kubernetes の Master Node 兼 Worker Node となる crc という VM をデプロイします.

> crc setup
> crc start

上のコマンド二発で,自動的に Hyper-V 上に crc VM が作成され,起動しますが,このとき crc VM は以下のルールでネットワーク接続されるようです.

- "crc" という名前の仮想スイッチが存在すれば,そこに接続
- なければ "Default Switch" に接続

なおかつ,crc は DHCP で IP アドレスをアサインされることを期待しているようで,また,インターネットへの Outbound 接続も必要なようです.

そうすると "Default Switch" はうってつけなのですが,Hyper-V の "Default Switch" には,(Hyper-V が) 起動するたびに割り当てられるサブネットがコロコロ変わるという問題があります.(以下,参考リンク)

したがって,CRC 内で NFS Persistent Volume を使いたいときなど,同一セグメント内に固定されたサービスを配する必要がある際には,"Default Switch" は使用できません.この場合,以下の手順で "crc" 仮想スイッチを「内部」スイッチとして作成します.

PS C:\WINDOWS\system32> New-VMSwitch -SwitchName "crc" -SwitchType Internal                                             
Name SwitchType NetAdapterInterfaceDescription
---- ---------- ------------------------------
crc  Internal


PS C:\WINDOWS\system32> Get-NetAdapter

Name                      InterfaceDescription                    ifIndex Status       MacAddress             LinkSpeed
----                      --------------------                    ------- ------       ----------             ---------
vEthernet (crc)           Hyper-V Virtual Ethernet Adapter #3          36 Up           00-15-5D-EE-E4-13        10 Gbps
イーサネット              Intel(R) Ethernet Connection (2) I21...      14 Up           6C-0B-84-65-39-42         1 Gbps
vEthernet (extsw)         Hyper-V Virtual Ethernet Adapter #2          10 Up           6C-0B-84-65-39-42         1 Gbps
vEthernet (Default Swi... Hyper-V Virtual Ethernet Adapter             19 Up           00-15-5D-C0-7A-2A        10 Gbps


PS C:\WINDOWS\system32> New-NetIPAddress -IPAddress 192.168.255.1 -PrefixLength 24 -InterfaceIndex 36


IPAddress         : 192.168.255.1
InterfaceIndex    : 36
InterfaceAlias    : vEthernet (crc)
AddressFamily     : IPv4
Type              : Unicast
PrefixLength      : 24
PrefixOrigin      : Manual
SuffixOrigin      : Manual
AddressState      : Tentative
ValidLifetime     : Infinite ([TimeSpan]::MaxValue)
PreferredLifetime : Infinite ([TimeSpan]::MaxValue)
SkipAsSource      : False
PolicyStore       : ActiveStore

IPAddress         : 192.168.255.1
InterfaceIndex    : 36
InterfaceAlias    : vEthernet (crc)
AddressFamily     : IPv4
Type              : Unicast
PrefixLength      : 24
PrefixOrigin      : Manual
SuffixOrigin      : Manual
AddressState      : Invalid
ValidLifetime     : Infinite ([TimeSpan]::MaxValue)
PreferredLifetime : Infinite ([TimeSpan]::MaxValue)
SkipAsSource      : False
PolicyStore       : PersistentStore

PS C:\WINDOWS\system32> New-NetNat -Name crcNATnetwork -InternalIPInterfaceAddressPrefix 192.168.255.0/24


Name                             : crcNATnetwork
ExternalIPInterfaceAddressPrefix :
InternalIPInterfaceAddressPrefix : 192.168.255.0/24
IcmpQueryTimeout                 : 30
TcpEstablishedConnectionTimeout  : 1800
TcpTransientConnectionTimeout    : 120
TcpFilteringBehavior             : AddressDependentFiltering
UdpFilteringBehavior             : AddressDependentFiltering
UdpIdleSessionTimeout            : 120
UdpInboundRefresh                : False
Store                            : Local
Active                           : True

PS C:\WINDOWS\system32>

あとは,この crc ネットワークで Windows ホストが DHCP サーバーやってくれれば完璧…,なのですが,どうも "Default Switch" に対してしか DHCP サーバー機能は走らないようです.したがって,この "crc" 仮想スイッチ内で固定 IP でサービスを提供する VM で DHCP サーバーを走らせてごまかすことにします.

subnet 192.168.255.0 netmask 255.255.255.0 {
	range 192.168.255.2 192.168.255.253;
	option routers 192.168.255.1;
	option domain-name-servers 10.0.1.244;
	}

できたネットワークがこれ.

- 10.0.1.0/24 は家の LAN
- Windows 10 ホストには「外部」仮想スイッチ "extsw" を定義 (操作端末から,10.0.1.200 に RDP してホストを操作)
- NFS VM の 192.168.255.254/24 のインタフェースで DHCP サーバーを走らせている

画像1

"crc" 仮想スイッチを「外部」仮想スイッチにするという手はなくはないと思いますが,crc VM 起動時に,Windows ホスト OS の設定を変更して,"crc" インタフェースの IP の DNS サーバー設定を書き換えてしまうので,これもあまり…だと思っています.

ま,一旦これでうまくいったというメモ.


この記事が気に入ったらサポートをしてみませんか?