NetBox にネットワーク情報を登録
はじめに
前回は NetBox を Kubernetes 上に構築しました。
今回は構築した NetBox に実際にデータを登録してみたので、各オブジェクトを考察しつつオブジェクトの繋がりと実際の画面を確認していきます。
私がサーバエンジニア(クラウド寄り)なので、詳しいネットワークや物理ラックの説明等は置いておいて、まずはデバイス(機器)や VM 、IP アドレスを見ていきます。
環境情報
NetBox:v2.11.9
NetBoxおさらい
登録の前に NetBox のおさらいを。以下を参考にまとめました。
-
NetBox とは
- IRM(Infrastructure Resource Modeling) アプリケーション
- ネットワーク自動化を主に置いて設計されている
- ネットワーク及びインフラエンジニアのニーズに応えるために開発された
- ネットワーク管理のキーワードとして以下が含まれている
- IP アドレス管理(IPAM):IP ネットワークとアドレス、VRFs(Virtual Routing and Forwarding)、VLANs
- 機器ラック:組織化されたグループやサイト
- デバイス:デバイスの種類と配置場所
- 接続:デバイス間のネットワーク、コンソール、電源接続
- 仮想化:仮想マシンとクラスター
- データ回線:長距離回線及びプロバイダー
- 秘密情報:クレデンシャルなどの暗号化された情報
-
コンセプト
-
- 実世界を複製する
- データモデルが実際のネットワークを正確に反映できるように設計されている
- 例.1) IPアドレスはデバイスではなく、特定のインタフェースに割当てられる
- 例.2) インタフェースには複数のIPアドレスが割当てられる
-
- 「正しい情報」を提供
- ネットワークの望ましい状態と動作状態を表すことを目的としている
- 動作しているネットワーク状態の自動インポートは推奨されない
- 整合性を確保するために、登録したデータは最初に人が精査する必要がある
- これにより監視やプロビジョニングなどのシステムに高い信頼性のデータを提供できる
-
- 単純にする
- パレートの法則に則って、学習を簡単にする
-
-
NetBoxでは行わないこと
- ネットワーク監視
- DNS サーバー
- RADIUS サーバー
- 構成管理
- ファシリティ管理
登録データ
今回は以下のカテゴリ順で確認していきます。
- Organization(Regions / Location / Tenant / ...)
- Device(Device / DeviceType / Interface / ...)
- Virtualization(VirtualMachine / Cluster / Interface / ...)
- IPAM(IP Address / Prefix / ...)
※各カテゴリでオブジェクト図を差し込んでいます(PlantUML で作成)。
各オブジェクトの入力項目をコンポジション(has - a)で表現しています。
Organization
Organization では 組織の情報を登録します。
organization
@startuml
left to right direction
package Organization <<Frame>> {
Map Tenant {
説明 => 所有者
}
package Sites << Frame >> {
Map Region {
説明 => 大陸・国・都市
}
Region -> Region : parent/child
Map Site {
説明 => 建物・構内
}
Site *-- Region
Site *---- Tenant
Map Location {
説明 => フロア、部屋、ケージ
}
Location -> Location: parent/child
Location *-- Site
Location *-- Region
}
}
@enduml
- Site:機器の配置情報
- Region:地理的(大陸、国、都市)情報
- Site:建物または構内
- Location:フロアや部屋、ケージ、他組織単位
- Tenant(顧客、組織単位)
- 管理目的(オブジェクトの所有権)で使用されるオブジェクトの個別のグループ
- 個々の顧客、または組織内の内部部門を表すために使用される
- 各オブジェクトは単一のテナントのみが所有できる
入力例
※一覧画面がないので各画面を連結しています
Device
Device は物理的な機器情報を登録します。サーバーやネットワーク機器の情報から、実際のポートとポートとの接続情報も登録することが出来ます。
Device
@startuml
left to right direction
Map Interface {
説明 => ネットワークインタフェース
}
package IPAM << Frame >> {
Map IPAddress {
説明 => IPアドレス
NAT => NAT IP
}
IPAddress *-- Interface
Map Service{
説明 => TCP/UDPサービス\n(名前/プロトコル/ポート番号)
}
Service *-- IPAddress
}
package Organization <<Frame>> {
package Sites << Frame >> {
Map Location {
説明 => フロア、部屋、ケージ
}
Location -> Location: parent/child
}
}
package Device << Frame >> {
package DeviceType << Frame >>{
Map Manufacturer {
説明 => メーカー
}
Map DeviceType {
説明 => ハードウェアのメーカー/モデル
}
DeviceType *-down- Manufacturer
}
package Devices << Frame >> {
Map DeviceRole {
説明 => デバイスの役割
}
Map Platform {
説明 => ソフトウェアタイプ\n(OSなど)
}
Platform *-- Manufacturer
Map Device {
説明 => ハードウェア
}
Device *-- DeviceRole
Device *-- Manufacturer
Device *-- DeviceType
Device *-- Location
Device *-- Platform
Device *-- Interface
Device *-- Service
}
}
@enduml
- Device
- Device:サイト、ラック内に配置されている機器・ハードウェア
- Device Role
- 機能的な役割(ユーザがカスタマイズして使う)
- 例)コアスイッチ、ディストリビューションスイッチなど
- Platform
- デバイス、仮想マシンで実行されるソフトウェアのタイプ
- 異なるバージョンや機能セットを表したい場合に利用する
- Device Types
- Device Type
- ハードウェアの特定のメーカ、モデルを表す(デバイスの物理属性など)
- 注意:デバイスタイプに加えられた変更は、そのデバイスタイプのインスタンスに遡って適用されることは無い(らしい。ドキュメント参照)
- Manufacturer:メーカー(Cisco/Dellなど)
- 各デバイスタイプはManufaturerに割り当てる必要がある
- Device Type
- Connection:各ケーブル、接続を表す(Interface から設定)
- Interface
- ネットワークインタフェース
- デバイスと仮想マシンでは(データ)モデルが異なる(プロパティが異なる)
- Interface Type
- 物理的、仮想的なインタフェースが定義できる
- ケーブリング出来るのは物理的インタフェースのみ
- IP Address Assignment
- IPアドレスをインタフェースに割り当てる
- Interface Type
入力例
Virtualization
Virtualization は仮想化基盤を管理します。主に Hypervisor を導入しているサーバの集まりであるクラスタや仮想化基盤上で起動している VM を登録します。
Virtualization
@startuml
left to right direction
Map Platform {
説明 => ソフトウェアタイプ\n(OSなど)
}
package Organization <<Frame>> {
Map Tenant {
説明 => 所有者
}
package Sites {
Map Region {
説明 => 国・地域・都市
}
Region -> Region : parent/child
Map Site {
説明 => 建物・施設
}
Site *- Region
Site *---- Tenant
}
}
Map Interface {
説明 => ネットワークインタフェース
}
package IPAM << Frame >> {
Map IPAddress {
説明 => IPアドレス
NAT => NAT IP
}
IPAddress *---- Tenant
IPAddress *- Interface
Map Service{
説明 => TCP/UDPサービス\n(名前/プロトコル/ポート番号)
}
Service *--- IPAddress
}
package Virtualization << Frame >> {
Map ClusterType {
説明 => クラスターの種類\nex) VMware / AzureJE
}
Map Cluster {
説明 => 仮想マシンが起動する物理サーバのクラスタ
}
Cluster *- ClusterType
Cluster *-- Region
Cluster *-- Site
Cluster *---- Tenant
Map VirtualMachine {
説明 => クラスタ内でホストされている\n仮想コンピューティングインスタンス
}
VirtualMachine *-- Cluster
VirtualMachine *---- Tenant
VirtualMachine *-- Platform
VirtualMachine *-- Interface
VirtualMachine *-- Service
}
@enduml
- Virtual Machine
- VMインスタンス
- 各VMは1つのクラスタに割り当てる必要がある
- リソース情報の入力欄がある(vCPU/memory/disk)
- Interface
- Device の Interface と同様だが一部プロパティが異なる
- VMインタフェースはケーブルを接続することはできない
- Interface
- Cluster
- Cluster
- 仮想マシンが実行される物理リソースの論理グループ
- Cluster Type を割り当てる必要がある
- 物理デバイスは、仮想基盤のホストとしてクラスターに関連付けることができる
- Cluster Type
- クラスターのプロダクトやサービス、技術情報を表す
- 例.1) VMware vSphere:ローカルのVMware
- 例.2) AzureJE:クラウドプロバイダー
- Cluster
入力例
IPAM
いよいよ本題の IPAM です。IP アドレスやネットワークの Prefix などを登録します。また、Aggregate を登録することで全体を俯瞰してみることもできます。
IPAM
@startuml
left to right direction
package Organization <<Frame>> {
Map Tenant {
説明 => 所有者
}
package Sites {
Map Region {
説明 => 国・地域・都市
}
Region -> Region : parent/child
Map Site {
説明 => 建物・施設
}
Site *-- Region
}
}
Map Interface {
説明 => ネットワークインタフェース
}
package IPAM << Frame >> {
Map IPAddress {
説明 => IPアドレス
NAT => NAT IP
}
IPAddress *-- Tenant
IPAddress *- Interface
package Prefix << Frame >> {
Map PrefixVlanRoles {
説明 => ネットワークの役割・機能
}
Map Prefix {
説明 => IPv4/v6 ネットワーク
Prefix => 管理対象 NW Prefix(CIDR)
}
Prefix *-- Site
Prefix *-- PrefixVlanRoles
Prefix *-- Region
Prefix *-- Tenant
}
package Aggregate << Frame >> {
Map RIR {
説明 => 特定のアドレス空間を「所有」する機関
}
Map Aggregate {
説明 => ネットワークの集約機関
Prefix => 集約する NW Prefix(CIDR)
}
Aggregate *- RIR
Aggregate *-- Tenant
}
Map Service{
説明 => TCP/UDPサービス\n(名前/プロトコル/ポート番号)
}
Service *-- IPAddress
}
package Virtualization << Frame >> {
Map VirtualMachine {
説明 => クラスタ内でホストされている\n仮想コンピューティングインスタンス
}
VirtualMachine *-- Interface
VirtualMachine *-- Service
}
Map Device {
説明 => ハードウェア
}
Device *-- Interface
Device *-- Service
@enduml
- IP Address:
- 単一のホストアドレスとそのサブネットマスクで構成される
- IPAddressは任意のデバイス、仮想マシンのインタフェースに割り当てることが出来る
- インタフェースには複数のIPアドレスを割り当てることができる
- Prefix:
- Prefix
- IPv4/v6 のネットワーク(CIDR表記)
- 自動的にネットワークの集合体が構成される
- VRFに割当てられていないすべてのプレフィックスはグローバルテーブルにあるとみなされる
- Prefix/VLAN Roles
- Prefix、VLANの機能を表す
- 例)データ、音声、セキュリティ
- Prefix
- Aggregate:
- Aggregate
- ネットワークの集約
- IPスペースの関心のある部分を指定できる
- RIR:特定のアドレス空間を「所有」する機関を定義
- Aggregate
- Service:サービス、デーモンを定義
入力例
Prefix IP 管理画面
Aggregate 管理画面
その他オブジェクト
- ~Group:各オブジェクトをグルーピングできる
- Power ~:電源関連の情報を登録できる
- Rack / Port / VLAN
- Tag:各オブジェクトに付与できるタグ
- Secret:機密情報
まとめ
IPAM と一口に言っても、場所やデバイスなど関連するデータを登録してからメインの NW 情報を登録する形となります。オブジェクト図の右側にあるオブジェクトから登録することで、依存関係に悩まされることなく登録ができるかと思います。
Prefix や Aggregate を活用することで IP アドレス空間を俯瞰的に見ることもでき、IPAM で有効活用ができるかと思います。また、プラグインを導入することでネットワーク図も出力できるので使い方は様々かと思います。
補足
Interface 間をつなぐ Connection を再作成している際に、作成できずエラー画面が出ました。
Cable matching query does not exist.
以下の対応を取ることで解消できるということだったのですが、私は Redis
Pod を再起動することでエラーが解消できました。
Discussion