IoT Edgeランタイムのネットワーク構成
IoT Edge v2はDocker技術を使って、各モジュールを分離して動かしています。
はたして、モジュール間はどういう感じでつながっているのか??疑問だったので調べることにしました。
今回は、IoT Edgeランタイム(システムモジュール)の、edgeAgentとedgeHubを調べました。
Network
各システムモジュールを調べる前に、Dockerに存在するNetworkを確認しておきましょう。
ubuntu@ubuntu:~$ docker network ls NETWORK ID NAME DRIVER SCOPE bc452e56bae2 azure-iot-edge bridge local 191c4158859e bridge bridge local e524d4a26c71 host host local 54549f043a71 none null local ubuntu@ubuntu:~$
none, bridge, hostとは別に、azure-iot-edgeというブリッジが存在していました。
edgeAgent
edgeAgentのコンテナ情報を見てみましょう。
NetworkModeがazure-iot-edgeで、azure-iot-edgeネットワークにIP=172.18.0.2、GW=172.18.0.1で繋がっているようです。
ubuntu@ubuntu:~$ docker inspect edgeAgent [ { ... "Name": "/edgeAgent", ... "HostConfig": { ... "NetworkMode": "azure-iot-edge", "PortBindings": null, ... }, ... "NetworkSettings": { ... "Networks": { "azure-iot-edge": { ... "Gateway": "172.18.0.1", "IPAddress": "172.18.0.2", ... } } } } ] ubuntu@ubuntu:~$
edgeHub
一方、edgeHubは、NetworkModeがdefaultで、443/tcpと8883/tcpを外部に公開している?みたい。edgeAgentと同様に、azure-iot-edgeネットワークにIP=172.18.0.3、GW=172.18.0.1で繋がっているようです。
NetworkModeがdefaultって何だろう??Dockerよくわからん。
ubuntu@ubuntu:~$ docker inspect edgeHub [ { ... "Name": "/edgeHub", ... "HostConfig": { ... "NetworkMode": "default", "PortBindings": { "443/tcp": [ { "HostIp": "", "HostPort": "443" } ], "8883/tcp": [ { "HostIp": "", "HostPort": "8883" } ] }, ... }, ... "NetworkSettings": { ... "Networks": { "azure-iot-edge": { ... "Gateway": "172.18.0.1", "IPAddress": "172.18.0.3", ... } } } } ] ubuntu@ubuntu:~$
tempSensor
気になったので、センサーデータをシミュレートする、tempSensorモジュールも見てみました。
ubuntu@ubuntu:~$ docker inspect tempSensor [ { ... "Name": "/tempSensor", ... "HostConfig": { ... "NetworkMode": "default", "PortBindings": null, ... }, ... "NetworkSettings": { ... "Networks": { "azure-iot-edge": { ... "Gateway": "172.18.0.1", "IPAddress": "172.18.0.4", ... } } } } ] ubuntu@ubuntu:~$
まとめ
コンテナ名 | NetworkMode | PortBindings | 接続ネットワーク | 接続ネットワークIP |
---|---|---|---|---|
edgeAgent | azure-iot-edge | azure-iot-edge | 172.18.0.2 | |
edgeHub | default | 443/tcp,8883/tcp | azure-iot-edge | 172.18.0.3 |
tempSensor | default | azure-iot-edge | 172.18.0.4 |
なるほど。ということは、手作りモジュールはPortBindingsすれば外部からIP接続できるってことか。
うーむ、defaultって何だろう?