コンテンツにスキップ

NetworkEndpoint

NetworkEndpointは、daemonやCNIがPod側の接続事実を書き込むためのリソースです。

通常はユーザーが直接作成するものではありません。

NetworkInterfaceとの関係

NetworkInterfaceは、Podに必要な論理NICの要求と割り当て状態を表します。

それに対してNetworkEndpointは、実際にノード上で接続が作られた際に作成され、MACアドレスなどの接続情報を表します。

そのため、NetworkInterfaceがReadyになるには、対応するNetworkEndpointが作成されている必要があります。

接続先

spec.subnetspec.l2Networkspec.externalNetworkは、そのエンドポイントがどのセグメントにいるかを表します。3つのうちちょうど1つが入ります。

NetworkInterfaceの接続先 NetworkEndpointに入るもの
spec.subnet 同じ名前のspec.subnet
spec.l2Network 同じ名前のspec.l2Network
spec.elasticIP そのElasticIPのspec.externalNetworkspec.externalNetwork

spec.externalNetworkは、ElasticIPを直接持つPodのNICのためのフィールドです。spec.kindPodのときだけ書くことができ、作成後は変更できません。spec.addressには<ElasticIPのアドレス>/32が入ります。

データプレーンは、このエンドポイントをExternalNetworkのstatus.networkIDをVNIとするセグメントの一員として扱います。Podと別のNodeにパケットが届いたときは、そのVNIでVXLANに載せてPodのNodeへ運びます。

CNIはElasticIPをdaemonのキャッシュから読んでspec.externalNetworkを決めます。まだキャッシュに無いときはエラーを返し、kubeletがCNI ADDをやり直します。

$ kubectl get networkendpoint
NAME      KIND   NODE       SUBNET    L2NETWORK   EXTERNALNETWORK   ADDRESS
gw.eth0   Pod    worker-2   default                                 10.16.0.9/16
gw.eth1   Pod    worker-2                         ext-net           10.225.51.6/32