コンテンツにスキップ

AddressPool

AddressPoolは、外部広報に利用できる外部アドレス範囲をまとめるリソースです。 ExternalNetworkやBGPAdvertisementから参照され、それらのリソースが払い出し可能なアドレスの源になります。

spec.advertiseModeはこのAddressPoolがどの方式で外部へ広報されるかを指定します。

  • bgp:BGPで経路広報されるAddressPool
  • arp:ARPで到達性が広報されるAddressPool

spec.advertiseModeは作成時に必須で、変更はできません。

spec.addressesはこのAddressPoolが保持するアドレス範囲の集合です。 重複は許されず、少なくとも1つの要素が必要で、要素を後から削除することはできません(追加のみ許容)。

spec.addressesの各要素の形式はspec.advertiseModeによって異なります。

  • spec.advertiseMode=bgpの場合、各要素はIPv4 CIDR(プレフィックス長は/8から/32の範囲)で指定します。
  • spec.advertiseMode=arpの場合、各要素はstart-end形式のIPv4アドレス範囲で指定します。

start-endは開始アドレスと終了アドレスをハイフンでつないだ形式で、10.225.32.240-10.225.32.250のように書きます。 両端を含みます。開始アドレスが終了アドレスより後になっている場合や、CIDRを書いた場合は拒否されます。

1つのアドレスを持てるAddressPoolは1つだけです。 spec.addressesのどれかが他のAddressPoolのアドレスと1つでも重なると、作成も更新もwebhookに拒否されます。 spec.advertiseModeが違うAddressPoolどうしも比べるので、bgpのCIDRとarpstart-endが重なった場合も拒否されます。 エラーには、重なった相手のAddressPool名とその要素、重なったアドレスの範囲が出ます。

重なりを確認するのはwebhookだけで、controllerは確認しません。 この検証が入る前のバージョンで作られた重なりは、そのまま残ります。重なっているAddressPoolを次に更新しようとしたときに、はじめて拒否されます。 spec.addressesの要素は削除できないので、重なりをなくすにはどちらかのAddressPoolを作り直してください。

AddressPoolがExternalNetworkまたはBGPAdvertisementから参照されている間は削除できません。 削除するには先に参照側のリソースから外すか、参照側のリソースを削除してください。

払い出しの実体

AddressPoolを作成すると、controllerがaddr-<AddressPool名>という名前のAllocationPoolを自動的に作成します。 ElasticIPやServiceLoadBalancerが実際にアドレスを確保するのはこのAllocationPoolに対してで、AddressPool自体には使用中のアドレスは記録されません。

spec.advertiseModeによって、AllocationPoolに書き込まれるフィールドが変わります。

  • bgpの場合、spec.addressesのCIDRがそのままspec.ip.cidrsに入ります。各CIDRのネットワークアドレスとブロードキャストアドレスは払い出しの対象外です。
  • arpの場合、start-endを分解した{start, end}spec.ip.rangesに入ります。範囲内のアドレスはすべて払い出しの対象です。

advertiseMode=arpのAddressPoolの範囲に、NodeのInternalIPを含めないでください。 そのアドレスがElasticIPなどに払い出されると、ARPAdvertisementの作成がwebhookに拒否され、そのリソースは利用可能になりません。