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.