photoncloud-monorepo/plans/cluster-investigation-2026-03-02/component-clarity-findings.md

5.5 KiB
Raw Blame History

Component Clarity / Dependency Findings

1. 設定契約ミスマッチIAM endpoint 系)

以下は「Nix module で値を注入しても、バイナリ側でそのキーを読まない」ケースです。
結果として IAM 接続先が意図値にならず、127.0.0.1:50051 既定に落ちる箇所が複数あります。

1-1. PrismNet

  • module 側:
    • IAM_ENDPOINT を設定
    • nix/modules/prismnet.nix:105
  • binary 側:
    • config.auth.iam_server_addr を使用
    • prismnet/crates/prismnet-server/src/config.rs:83-89
    • prismnet/crates/prismnet-server/src/main.rs:215-222
    • IAM_ENDPOINT 読み取りは存在しない

1-2. PlasmaVMC

  • module 側:
    • IAM_ENDPOINT を設定
    • nix/modules/plasmavmc.nix:97
  • binary 側:
    • config.auth.iam_server_addr を使用
    • plasmavmc/crates/plasmavmc-server/src/config.rs:54-61
    • plasmavmc/crates/plasmavmc-server/src/main.rs:137-141
    • IAM_ENDPOINT 読み取りは存在しない

1-3. FiberLB

  • module 側:
    • FIBERLB_IAM_ADDR を設定
    • nix/modules/fiberlb.nix:123
  • binary 側:
    • IAM 接続先は config.auth.iam_server_addr
    • fiberlb/crates/fiberlb-server/src/config.rs:78-85
    • fiberlb/crates/fiberlb-server/src/main.rs:180-184
    • CLI/env 引数に FIBERLB_IAM_ADDR はないArgs定義に未存在

1-4. LightningStor

  • module 側:
    • LIGHTNINGSTOR_IAM_ADDR を設定
    • nix/modules/lightningstor.nix:128
  • binary 側:
    • IAM 接続先は config.auth.iam_server_addr
    • lightningstor/crates/lightningstor-server/src/config.rs:84-91
    • lightningstor/crates/lightningstor-server/src/main.rs:196-200
    • CLI/env 引数に LIGHTNINGSTOR_IAM_ADDR はない

1-5. FlashDNS

  • module 側:
    • IAM の option 自体がない(iamAddr なし)
    • nix/modules/flashdns.nix:7-79
  • binary 側:
    • auth.iam_server_addr 既定 127.0.0.1:50051
    • flashdns/crates/flashdns-server/src/config.rs:67-74
    • flashdns/crates/flashdns-server/src/main.rs:196-200
    • config-rs は FLASHDNS prefix + __ separator
    • flashdns/crates/flashdns-server/src/main.rs:84-86

1-6. CreditService

  • module 側:
    • CREDITSERVICE_IAM_ADDR を設定しない
    • nix/modules/creditservice.nix:80-96
  • binary 側:
    • CREDITSERVICE_IAM_ADDR 既定 127.0.0.1:50051
    • creditservice/crates/creditservice-server/src/main.rs:61
    • creditservice/crates/creditservice-server/src/main.rs:119-123

補足:

  • test-cluster の IAM は 50080 を採用している。
    • nix/test-cluster/node01.nix:48-52
  • このため上記ミスマッチは、実運用前に通信失敗へ直結しやすい。

2. 設定契約ミスマッチ(非 IAM

2-1. FiberLB の PrismNet 参照

  • module 側:
    • FIBERLB_PRISMNET_ADDR を設定
    • nix/modules/fiberlb.nix:127
  • binary 側:
    • FIBERLB_PRISMNET_ADDR 消費実装なし
    • rgfiberlb/crates/fiberlb-server/src に該当なし

2-2. FlashDNS の PrismNet 参照

  • module 側:
    • PRISMNET_ENDPOINT を設定
    • nix/modules/flashdns.nix:111
  • binary 側:
    • PRISMNET_ENDPOINT 消費実装なし
    • rgflashdns/crates/flashdns-server/src に該当なし

2-3. FlareDB の IAM 参照

  • module 側:
    • FLAREDB_IAM_ENDPOINT を設定
    • nix/modules/flaredb.nix:108
  • binary 側:
    • flaredb-server に IAM 設定処理なし(該当キー/型なし)
    • flaredb/crates/flaredb-server/src/config/mod.rs:79-103

3. 依存関係宣言と実装の乖離

3-1. NightLight の gRPC ポート宣言と実行実態

  • module 側:
    • grpcPort option を持ち env 注入している
    • nix/modules/nightlight.nix:16-20
    • nix/modules/nightlight.nix:90
  • 実装側:
    • 現状 main.rs は HTTP サーバのみ起動 (axum::serve)
    • nightlight/crates/nightlight-server/src/main.rs:87
    • nightlight/crates/nightlight-server/src/main.rs:102

影響:

  • module 利用者は gRPC も提供されると誤認しやすい。

4. first-boot automation の構造明確性

  • module が helper script path を定義するが、実際に未使用:
    • nix/modules/first-boot-automation.nix:7-10
  • services.first-boot-automation.enable を有効化する明示設定が見当たらない:
    • rg -n "first-boot-automation\\.enable" -> no explicit match
  • それでも default imports には含まれている:
    • nix/modules/default.nix:15

影響:

  • 「有効運用中の機構なのか、未接続機構なのか」が判別しにくい。

5. テストクラスタでのコンポーネント組み合わせ破綻

  • node06 (gateway) は creditservice を有効化するが、flaredb module を import しない。
    • nix/test-cluster/node06.nix:8-13
    • nix/test-cluster/node06.nix:70-74
  • creditservice module は config.services.flaredb を前提に評価する。
    • nix/modules/creditservice.nix:5

実証:

  • nix eval ./nix/test-cluster#nixosConfigurations.node06...
    • error: attribute 'flaredb' missing

6. 役割と境界の明確化が必要な領域

  • Deployer:
    • 実装(deployer/*は存在するが、Nix 配線が薄く運用境界が不明瞭。
  • Cluster config generator:
    • plasmacloud-clusternix-nos の責務境界が重複。
  • first-boot:
    • 生成される cluster-config 契約と join 実装の API 契約が一致していない。

推奨:

  • サービスごとに「module contract注入キー/binary contract消費キー」を1つの表に集約し、
    CIで diff 検証(未使用キー、未注入キー)を自動検知する。