Na vašem laptopu slika se povlači bez problema, a pod stoji u ImagePullBackOff i neko predlaže da pokrenete korporativni VPN klijent kao sidecar. To neće pomoći, jer se povlačenje dešava prije nego što vaš kontejner postoji: kubelet traži od container runtime-a na node-u da donese sliku, a runtime koristi mrežni namespace node-a. VPN unutar workload-a nema rutu za taj put, a ni njegova pomoćna slika se prvo mora povući.

Redoslijed operacija određuje sloj

Prvo dolazi razrješavanje imena slike. kubelet preko runtime-a razrješava ime registry-ja, povezuje se, autentificira, preuzima slojeve i tek onda pokreće kontejner. Sve što pod radi s VPN-om dešava se nakon tog niza, zato tunel koji radi u klasteru nije dokaz o povlačenju.

Zato je keširana slika tako uvjerljiv lažov. Node koji je sliku povukao prije sedmica nastavlja je servirati, deployment izgleda zdravo, a kvar se pojavi tek kad scheduler postavi repliku na noviji node. Ako vremenska linija događaja sadrži scale-up, zamjenu node-a ili nadogradnju pool-a, tretirajte ih kao okidač, a ne kao uzrok.

Tri uslova određuju popravku

Dostupnost privatnog registry-ja iz upravljanog node pool-a svodi se na rutiranje, razrješavanje imena i skup endpointa. Ako podmreža node-a ne može rutirati do mreže registry-ja, nikakvi podaci za prijavu ne pomažu. Ako ruta postoji, ali ime registry-ja se ne razrješava kroz DNS put node-a, veza nikad ne počinje. Ako oboje radi za manifest endpoint, ali ne za blob endpoint na koji registry preusmjerava, povlačenje pada na pola.

ConditionTypical symptomWhere to look
Node subnet has no route to the registry networkTimeout, no connectionEffective routes on the node NIC, gateway transit, return path on-premises
Node resolver cannot see the private zoneName resolution failure in eventsVNet DNS settings and the resolver the node actually uses
Only the manifest endpoint is reachableAuth succeeds, layer download failsEvery hostname the registry hands out during the pull
TLS or identity is wrongCertificate error, 401 or 403Server certificate name and trust, scoped pull identity

Samo VNet peering vam ne daje automatski sve aranžmane gateway transit-a, a ruta koja postoji u jednom smjeru nije ruta koja radi. Node-u treba podržan put kroz predviđeni VPN gateway ili odobreni uređaj, a strani registry-ja povratna ruta do podmreže node-a.

Pročitajte kvar prije nego odaberete popravku

Počnite s događajima pod-a i node-a na koji je sletio, sa svojim stvarnim imenima: kubectl describe pod app-example -n team-example i kubectl get pod app-example -n team-example -o wide. Tekst događaja razlikuje nerazriješeno ime hosta od timeout-a, odbijanje certifikata od nedostajuće slike, a grešku autorizacije od svih njih. Ta četiri imaju četiri različita vlasnika.

Autentifikacija je najprecjenjenija poluga. imagePullSecret daje runtime-u podatke za prijavu na registry; on ne instalira rutu, ne mijenja resolver node-a i ne čini nepouzdan certifikat važećim. Ako događaj kaže da povlačenje nije autorizirano, gledajte opseg identiteta. Ako kaže da je veza istekla, podaci za prijavu su nevažni.

Kubernetes dokumentacija o slikama je referenca za ponašanje povlačenja i podatke za prijavu na privatne registry-je, i vrijedi je jednom pročitati prije promjene mreže, jer jasno pokazuje granicu između autentifikacije i transporta.

Izgradite put ispod pod-a

Radite ovim redom, jer je svaki korak besmislen dok prethodni ne važi. Prvo rutirajte mrežu node-a: potvrdite da podmreža node-a ima podržan put do mreže registry-ja, provjerite efektivne rute na node-u, sigurnosna pravila na oba kraja i povratnu rutu na strani registry-ja.

Zatim razriješite ime iz konteksta node-a. Resolver node-a nije isto što i DNS konfiguracija pod-a, a uspjeh unutar pod-a nije dokaz za host runtime. Koristite upravljani privatni DNS umjesto trajnog unosa u hosts; unos živi do zamjene node-a i onda tiho nestane.

Zatim dokažite svaki endpoint. Registry može klijentu dati odvojenu uslugu autentifikacije i odvojeno blob skladište. Dostizanje manifest endpointa ne dokazuje gotovo ništa o slojevima. Na kraju dovršite TLS i autorizaciju: certifikat važeći za ime registry-ja i pouzdan kroz podržanu konfiguraciju node-a, plus identitet za povlačenje ograničen na čitanje tog repozitorija.

Provjerite na node-u koji niste popravili ručno

Test koji se računa je svježe povlačenje i potpuno preuzimanje svih slojeva na podobnom node-u, po mogućnosti onom stvorenom skaliranjem ili zamjenom. To pokriva sve pool-ove koji bi mogli postaviti workload, uključujući zaboravljene. Ručna popravka na jednom node-u nije model isporuke, a sljedeći autoscale događaj će naći prazninu.

Ponovno stvaranje klastera u drugom VNet-u može promijeniti put, ali to je posljednje sredstvo, a ne prvi dijagnostički korak. Uporedite postojeću mrežu node-a s potrebnom privatnom rutom i podržanim AKS mrežnim kontrolama prije nego predložite migraciju, i držite povezanost aplikacije nakon pokretanja kao odvojenu provjeru: pod koji razgovara s backend-om je druga provjera od node-a koji preuzima sliku.

Povezani članci