メインコンテンツまでスキップ

リソースモデル

routerd の YAML ファイルには Router というリソースが 1 つあり、その中に 型付きサブリソースが並びます。ここではその構造とスキーマ全体に共通する規約を説明します。

ルーターファイル

最小のルーター YAML は次の形です。

apiVersion: routerd.net/v1alpha1
kind: Router
metadata:
name: home-router
spec:
resources:
- apiVersion: net.routerd.net/v1alpha1
kind: Interface
metadata:
name: wan
spec:
ifname: ens18
adminUp: true
managed: true

最上位は常に以下の形です。

フィールド意味
apiVersionrouterd.net/v1alpha1 (routerd の API バージョン)
kindRouter
metadata.nameこのルーターを示すラベル。安定した名前を付けます。
spec.resourcesルーターの振る舞いを構成するサブリソースの一覧

サブリソース

spec.resources の各要素もまたリソースで、apiVersionkindmetadata.namespec を持ちます。apiVersion でグループが分かります。

  • net.routerd.net/v1alpha1 — ネットワーク系 (インターフェース、アドレス、DHCP、 NAT、ファイアウォール、経路ポリシーなど)
  • system.routerd.net/v1alpha1 — ホスト系 (sysctl、ホスト名、NTP クライアント、 ログ出力先、NixOS ホスト連携)
  • routerd.net/v1alpha1 — routerd 自身の種類 (観測専用の Inventory を含む)

種類の全カタログは API リファレンス を参照してください。

安定した名前

YAML の中ではリソースを metadata.name で参照します。OS のオブジェクト名は使いません。 カーネルのインターフェース名 ens18 が出てくるのは、Interface リソースの spec.ifname 1 か所だけです。それ以外では wanlanmgmt のような名前で参照します。 これにより、NIC を差し替えても他のリソースを書き換えずに済みます。

たとえば IPv4DHCPAddress は「ens18 を使う」とは書きません。次のように書きます。

- apiVersion: net.routerd.net/v1alpha1
kind: IPv4DHCPAddress
metadata:
name: wan-dhcp4
spec:
interface: wan

ここでの wanInterface リソースの metadata.name を指しています。

specstatus の役割

routerd は Kubernetes と同じ方式でデータを分けています。

  • spec は望む状態を表します。YAML に書くものはこれです。
  • status は観測した状態を表します。routerd が SQLite に書きます。 routerctl describerouterctl show で読めます。

たとえば IPv6PrefixDelegation には次のようなフィールドがあります。

  • spec.interfacespec.prefixLengthspec.profile、... — 宣言したもの
  • status.currentPrefixstatus.lastObservedAtstatus.duidstatus.iaid、... — routerd が観測したもの

YAML に status は書きません。routerd が記録します。

プロファイル

種類によっては プロファイル で意見の入った既定値をまとめて指定できます。 代表例は IPv6PrefixDelegation.spec.profile で、ntt-hgw-lan-pd のような上流環境を 指定すると、DUID 種別やプレフィックス長などの妥当な既定が引き当てられます。 プロファイルがあると、上流環境を一度で記述でき、個別フィールドを並べ直さずに済みます。

プロファイルは明示的に書いたフィールドを上書きしません。spec.prefixLength を 書けば、プロファイルの既定値は当たりません。だから「profile: ntt-hgw-lan-pd を指定し、 さらに 1 つだけ細かく調整する」という書き方が予期せぬ副作用なく安全に行えます。

次に読むもの