はじめに
SNA は複数のサービスが Docker コンテナ上で動作するアーキテクチャになっています。アプライアンス内でのサービス間の通信では、Link-Local IP が使われています。通常の運用においてはこれらのIPアドレスについて知る必要はありませんが、トラブルシューティングにおいてはログの中にこれらの Link-Local IP が記録されていることがあるため、IPアドレスに対応するコンテナ名を確認する必要があります。本ドキュメントでは各 Docker コンテナが使用しているIPアドレスの確認方法について説明します。
この内容はバージョン 7.4.2 を使用して確認しています。
Docker コンテナが使用しているIPを確認する
アプライアンス上で動作しているコンテナ一覧は以下のコマンドで確認できます。
# docker container ls
以下のようにフィルタを指定すると、コンテナ名だけを表示することができます。
# docker container ls --format "{{.Names}}"
SMC 上で上記コマンドを実行すると、以下のコンテナ一覧が得られます。
svc-sse-connector
svc-ctr-integration
nginx
sw-response-mgmt
svc-cm-agent
svc-data-service
report-builder
appliance-gateway
svc-token-authority
smc
swe-detections-reporting
svc-central-management
static-assets
svc-va
swe-legacy-detections
csm-collector-smc
sw-rabbitmq
svc-sw-reporting
svc-legacy-auth
csm-statsd
svc-sw-policy
svc-ise-client
cta-smc
dodin-notification
コンテナが使用しているIPを確認するには、docker inspect コマンドを使います。docker inspect コマンドの引数には上記で取得したコンテナ名を指定します。
# docker inspect smc
それぞれのコンテナに対して docker inspect を実行する処理は以下のようにワンライナーでまとめて実行できます。これをSNA の CLI 上で実行すると、コンテナ名とIPアドレスのペアの一覧が取得できます。
# docker container ls --format '{{.ID}} {{.Names}}' | while read -r id name; do ip=$(docker inspect "$id" | jq -r '.[].NetworkSettings.Networks[].IPAddress' | grep -E '^169\.254\.[0-9]+\.[0-9]+$'); if [ -n "$ip" ]; then echo "Name: $name, IP: $ip"; fi; done
実行例を以下に示します。
# docker container ls --format '{{.ID}} {{.Names}}' | while read -r id name; do ip=$(docker inspect "$id" | jq -r '.[].NetworkSettings.Networks[].IPAddress' | grep -E '^169\.254\.[0-9]+\.[0-9]+$'); if [ -n "$ip" ]; then echo "Name: $name, IP: $ip"; fi; done
Name: svc-sse-connector, IP: 169.254.64.24
Name: svc-ctr-integration, IP: 169.254.64.22
Name: nginx, IP: 169.254.64.8
Name: sw-response-mgmt, IP: 169.254.64.19
Name: svc-cm-agent, IP: 169.254.64.20
Name: svc-data-service, IP: 169.254.64.5
Name: report-builder, IP: 169.254.64.3
Name: appliance-gateway, IP: 169.254.64.2
Name: svc-token-authority, IP: 169.254.64.26
Name: smc, IP: 169.254.64.27
Name: swe-detections-reporting, IP: 169.254.64.25
Name: svc-central-management, IP: 169.254.64.10
Name: static-assets, IP: 169.254.64.18
Name: svc-va, IP: 169.254.64.4
Name: swe-legacy-detections, IP: 169.254.64.7
Name: csm-collector-smc, IP: 169.254.64.9
Name: sw-rabbitmq, IP: 169.254.64.12
Name: svc-sw-reporting, IP: 169.254.64.15
Name: svc-legacy-auth, IP: 169.254.64.11
Name: csm-statsd, IP: 169.254.64.6
Name: svc-sw-policy, IP: 169.254.64.16
Name: svc-ise-client, IP: 169.254.64.14
Name: cta-smc, IP: 169.254.64.17
Name: dodin-notification, IP: 169.254.64.13
Link-Local IP が記録されているログの例
例えば appliance-gateway のアクセスログにはアクセス元のサービスが使用している IP が記録されています。
appliance-gateway のアクセスログは以下のファイルです。
/lancope/var/nginx/logs/appliance-gateway-access.log
この中には例えば以下のようなログが記録されています。
169.254.64.27 - - [24/Jul/2024:00:02:08 +0000] 192.168.0.168 "POST /fwd/src/svc-sw-manager/dst/192.168.0.168/swa/agent/system/handshake HTTP/1.1" 200 593 "-" "-" "-" 513978 1
一番最初に出力されている 169.254.64.27 がアクセス元のIPアドレスです。上に示したワンライナーの出力から、169.254.64.27 を使用している Docker コンテナは "smc" であることが分かります。