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って何だろう?