Ping deluje z vozlišča in ne uspe s poda, na lokalni strani pa ne prispe nič. Tunel in pot sta v redu; izvorni naslov na žici ni. Ta dva primera loči to, za kaj se paket izda, ko zapusti gručo, in GKE ima o tem svoje mnenje. Mehanizem je seznam izjem masquerade in za branje le-tega zadostuje en ukaz.

Preberite veljavni seznam, preden karkoli spremenite

GKE dobavi agenta, ki za vsak ciljni razpon odloči, ali se promet podov ob izhodu prepiše na naslov vozlišča. Njegova dobavljena konfiguracija navaja tri bloke RFC1918, 10.0.0.0/8, 172.16.0.0/12 in 192.168.0.0/16, kot izvzete cilje. Zato vse, kar pošljete s poda na lokalnega gostitelja 10.x, zapusti vozlišče še s pripetim naslovom samega poda. Promet samega vozlišča se ne prepiše, in prav zato njegov ping deluje.

Preberite predvideno konfiguracijo in nameščena pravila, ker se lahko razhajajo. kubectl -n kube-system get configmap ip-masq-agent -o yaml pokaže, kaj je bilo agentu rečeno, kubectl -n kube-system get pods -l k8s-app=ip-masq-agent pa, ali kaj teče, da bi to uporabilo. Na vozlišču iptables-save | grep -i masq pokaže pravila, ki v jedru res obstajajo. Ko ConfigMap pravi eno in pravila drugo, je osumljenec agent, ne omrežje.

Potrdite izvorni naslov z zajemom

Naredite zajem, preden spremenite seznam. Filter na en sam cilj ohrani izhod berljiv: tcpdump -ni any host 10.20.30.40.

Primerjajte to s tem, kar poroča druga stran. Zajem na lokalni strani, ki pokaže naslov poda in nobenega odgovora, sklene krog: seznam izjem pojasni asimetrijo brez kakršne koli okvare tunela. Dve opažanji enega izvornega naslova zadoščata, da prenehate ugibati o CNI.

Zožite izjemo na CIDR podov

Podprta poprava zoži izjemo, namesto da bi jo odstranila: pustite CIDR podov izvzet in opustite preostanek prostora 10.x. Ta seznam živi v ConfigMap agenta pod nonMasqueradeCIDRs, njegova sprememba pa je urejanje, ki mu sledi uvajanje. Zamenjajte širok vnos z dejanskim razponom podov gruče, obdržite druge zasebne bloke, če jih promet znotraj gruče še potrebuje, in pustite resyncInterval pri miru, razen če imate razlog. Uporabite, potrdite, da so se podi agenta znova zagnali, in potrdite, da so se pravila jedra spremenila.

To je sprememba v celotni gruči z resničnim dosegom. Ko se uveljavi, promet, ki je prej ohranjal svoj izvor poda, zdaj prispe prepisan na vozlišče, zato vse, kar je bilo vezano na te naslove podov, vidi drugega pošiljatelja. Žrtve so dnevniki, seznami dovoljenih in lokalna pravila požarnega zidu, ki navajajo naslove podov, in ti tiho odpovedo. Spremembo objavite kot spremembo vedenja, ne kot popravek.

V gruči z več bazeni vozlišč preverite, ali je agent razporejen na vozlišča, kjer podi, na katere vpliva, res tečejo. Bazen brez DaemonSet obdrži svoja stara pravila in nič v ConfigMap tega ne bo pokazalo.

Alternativa in njena cena

Druga možnost ohrani naslove podov nedotaknjene in pot o njih nauči. CIDR podov gre v izbirnike prometa Cloud VPN, lokalna stran pa za to potrebuje povratno pot, da odgovori vedo, kam iti. To ohrani identiteto poda, ki jo želijo nekateri varnostni modeli, in razširi tako obseg usmerjanja kot obseg požarnega zidu, ki ga mora druga stran sprejeti.

Menjava je berljivost proti obsegu. Prevajanje poskrbi, da lokalna stran vidi en naslov na vozlišče, kar je enostavno dati na seznam dovoljenih in skrije, kateri pod je kaj poslal. Brez prevajanja naslov poda ostane od konca do konca, kar je bolje za pripis in slabše za vsako napravo na poti, ki se mora naučiti novega razpona. Nobena možnost ni napaka Dockerja ali CNI; obe sta odločitvi o usmerjanju z operativnim računom. Izberite tisto, katere račun lahko plača vaša ekipa, in zapišite zakaj.

Preverite in povrnite

Zaženite isti zajem znova. Zajem na ravni vozlišča, ki po vašem urejanju še vedno izpiše naslov poda, pomeni, da se pravila niso nikoli spremenila, kar koli pravi ConfigMap. Žica je dejstvo; vse drugo je sklepanje.

Nato preverite nasprotno smer, ker se polovica teh sprememb preveri le na izhodu. Potrdite, da odgovor doseže vozlišče ali pod, ki je poslal zahtevo, in potrdite, da se je aplikacija zaključila, ne le prejela SYN. Zajem, ki pokaže zahtevo brez odgovora, je problem usmerjanja na drugi strani, ne problem masquerade na tej.

Povrnitev je prejšnji ConfigMap, uporabljen na enak način, z enako potrditvijo, da se je agent znova zagnal in da so se pravila spremenila. V zapisu spremembe shranite izvorni naslov pred in po za eno znano zahtevo, ker prav ta ena vrstica dokazuje, da je sprememba naredila to, kar ste rekli. Vodnik GKE po agentu IP masquerade dokumentira privzete vrednosti in polja ConfigMap. Če se izvorni naslov po uvajanju ne spremeni, agent na tem vozlišču ne teče in nobeno urejanje YAML tega ne bo popravilo.

Sorodni članki