EgressRoutePolicy

EgressRoutePolicy は、外向き通信で使う経路を選びます。
以前の WAN 経路ポリシーを置き換えます。
旧 Kind 名は受け付けません。
このポリシーは候補リソースと HealthCheck を見て、選んだ候補を status に保存します。 ほかのリソースは、その status を参照できます。
spec.mode によって、status の所有者が変わります。mode を省略した場合は、
egress-route セレクターが選択のみの status と、role: advisory / advisory: true
を付けた routerd.lan.route.changed イベントを発行します。この status は稼働中の
コントローラーの出力であり、適用のドライランではありません。
mode: priority、mark、hash の場合は、ポリシー経路コントローラーが、実際に
適用したルーティング・NAT mark の状態の所有者になります。依存するコントローラーは、
旧来の route-changed イベントではなく routerd.resource.status.changed を見て追従します。
mode: priority でも selection: highest-weight-ready を使います。
準備完了した候補のうち weight が最も高いものを選び、priority は同点時の
決着と、ポリシー経路ルールの優先度として扱います。priority は選択ポリシーの
代替ではありません。weighted-ecmp は実装されるまでの予約値であり、
黙って無視せず UnsupportedSelection として報告します。enabled: false の候補は
選択対象から外れ、生成されるポリシー経路ルール・経路表の所有からも外れます。
apiVersion: net.routerd.net/v1alpha1
kind: EgressRoutePolicy
metadata:
name: ipv4-default
spec:
family: ipv4
destinationCIDRs:
- 0.0.0.0/0
selection: highest-weight-ready
candidates:
- name: ds-lite
source: DSLiteTunnel/ds-lite
deviceFrom:
resource: DSLiteTunnel/ds-lite
field: interface
gatewaySource: none
weight: 80
healthCheck: internet-tcp443
- name: ix2215
source: Interface/ix2215
deviceFrom:
resource: Interface/ix2215
field: ifname
gatewaySource: static
gateway: 172.17.0.1
weight: 50
destinationCIDRs は、ポリシーの対象宛先です。
省略時は IPv4 で 0.0.0.0/0 を使います。
IPv6 では ::/0 を使います。
gatewaySource はゲートウェイの決め方です。
none: DS-Lite などのポイントツーポイントデバイスで使います。static:gatewayにネクストホップアドレスを書きます。dhcpv4とdhcpv6: DHCP クライアント由来のゲートウェイ用です。
選択結果は次の status に入ります。
status.selectedCandidatestatus.selectedDevicestatus.selectedGatewaystatus.selectedWeightstatus.selectedTargetsstatus.destinationCIDRs
起動直後は、まず準備完了の候補を選びます。
重みが最も高い経路を無期限には待ちません。
あとから重みの高い候補が準備完了になると、
routerd は routerd.lan.route.changed を発行します。
それを受けて IPv4Route と NAT44Rule を更新します。
このとき conntrack は消しません。
既存の通信はカーネルが持つ状態に従い、
新しい通信は、新しい経路と NAT の向きを使います。
IPv4Route は、これらの status を参照できます。
apiVersion: net.routerd.net/v1alpha1
kind: IPv4Route
metadata:
name: default-route
spec:
destination: 0.0.0.0/0
deviceFrom:
resource: EgressRoutePolicy/ipv4-default
field: selectedDevice
gatewayFrom:
resource: EgressRoutePolicy/ipv4-default
field: selectedGateway
DS-Lite(あるいはどのトンネル)へ出してはいけない内部向けの宛先は、通常の経路として表現します。
上流ゲートウェイ側のプライベートサブネットは WAN 側へ、内部の 10.0.0.0/8 や 172.16.0.0/12 は専用経路へ、破棄したい範囲は type: blackhole を使います。
apiVersion: net.routerd.net/v1alpha1
kind: IPv4Route
metadata:
name: private-10-blackhole
spec:
type: blackhole
destination: 10.0.0.0/8
HealthCheck
HealthCheck は、プローブの意図を宣言します。
apiVersion: net.routerd.net/v1alpha1
kind: HealthCheck
metadata:
name: internet-tcp443
spec:
target: 1.1.1.1
protocol: tcp
port: 443
HealthCheck が EgressRoutePolicy の候補やターゲットから参照されている場合、
routerd は health-check デーモン、socket mark、送信元バインドを、その経路ターゲットから
自動導出します。設定はプローブの意図だけを持ち、プラットフォームごとのソケットの仕組みは
コントローラーとレンダラーの内部に閉じ込めます。