( arpad | 2024. 10. 30., sze – 23:14 )

Amit én csináltam.

* Beraktam egy üres CNI konfig állományt, hogy a kubelet ne állítsa a node-ot Ready-re induláskor.

* Egy rövid script/systemd unit várt amíg az official CNI plugin le nem generálta a konfig állományát az /etc/cni/net.d alá.

* Módosítottam úgy hogy egy proxy scriptet hívjon meg és felül írtam vele az üres konfigot. Ehhez elég csak kicserélni egy értéket a JSON-ban.

* A proxy script visszaalakította a konfigot röptében és azzal meghívta az eredeti CNI binárist. Elmentette az eredményt, megcsinálta az amit még kellett, főleg ip netns exec használatával, majd módosította a választ (egy új IP címet adtam hozza, szintén JSON) és visszaküldte a kubeletnek.

* Így a kubelet és a Kubernetes látta az összes IP címet, működött minden egyéb rendesen.

Kb ennyi volt az egész. Nem triviális, de azért nem is túl nehéz, ha értesz magához a hálózati részéhet. A CNI spec az elég egyszerű.

Érdemes még megnézni a bash-cni (vagy shell-cni) projektet. Abban szépen látszik hogy hogyan is működik ez az egész.