AKS ne može povući sliku iz privatnog registry-ja iza VPN-a
kubelet povlači kroz mrežu node-a, a ne kroz VPN pod-a. Odlučite po rutama node-a, DNS-u node-a, svakom endpointu koji povlačenje dotakne, zatim TLS i identitet.
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.
| Condition | Typical symptom | Where to look |
|---|---|---|
| Node subnet has no route to the registry network | Timeout, no connection | Effective routes on the node NIC, gateway transit, return path on-premises |
| Node resolver cannot see the private zone | Name resolution failure in events | VNet DNS settings and the resolver the node actually uses |
| Only the manifest endpoint is reachable | Auth succeeds, layer download fails | Every hostname the registry hands out during the pull |
| TLS or identity is wrong | Certificate error, 401 or 403 | Server 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.