BGPNodeState¶
BGPNodeStateは、クラスター内の各NodeにおけるBGP観測状態を表すリソースです。 ユーザーが直接作成・編集するリソースではなく、JuneauがNodeごとに自動的に生成し、各Nodeで動作するbgp-speakerがstatusフィールドを書き込みます。 クラスター管理者はBGPピアリングの状態をkubectl get bgpnodestateなどで確認するためにこのリソースを参照します。
status.bgpSessionsは各BGPセッションの状態の一覧です。各エントリは以下を含みます。
peerAddress: bgp-speakerが観測したBGPピアのIPアドレス。常に埋まります。peerName: 対応するBGPPeerリソースのname。bgp-speakerがpeerAddressから解決できた場合のみ埋まります。BGPPeerリソースが削除済みで古いセッションだけ残っている、設定の反映がまだ走っていない、などの状態では空になります(フォールバック値は入れません)。state:Up/Down/Unknown。upSince: セッションが最後にEstablishedになった時刻。lastError: 直近のPeerDown理由(BGP NOTIFICATIONコード/サブコードを含む)。
status.advertisementsはこのNodeから広報しようとしているAddressPool(= BGPAdvertisementから参照されるadvertiseMode=bgpのpool)の意図値です。prefixesはbgp-speakerがピアに広報しようとしているユニークCIDRの集合(ソート済み文字列配列)、lastSyncedAtは設定の反映に成功した時刻です。ここに載っているCIDRが実際にピアへ送信されているかは、このフィールドからは判定できません。実送信の確認は上流ルータ側で受信ルートを確認してください。
status.conditionsはKubernetes標準のmetav1.Conditionによる状態表現で、Nodeレベルでの総合的な稼働状態を示します。以下の3つのtypeを定義します。
BirdRunning: bgp-speakerでBGPセッション処理が起動しているか。BMPConnected: bgp-speakerのBGPセッション状態の監視経路が確立しているか。切断中はstatus.bgpSessionsは空になります。Ready: 上記すべてがTrueかつ最近のreconcileが成功している場合のみTrue。
status.errorsはreconcile中に検出したspec不整合(参照先AddressPool欠落、BGPPeerのASN=0など)の記録です。対象リソースの種別・名前、メッセージ、直近の発生時刻を含み、同一(kind,name)で最新値のみを保持します。
status.heartbeatはbgp-speakerが最後にこのstatusを更新した時刻です。