AKS nedokáže stáhnout image ze soukromého registry za VPN
kubelet stahuje přes síť node, ne přes VPN podu. Rozhodujte podle rout node, DNS node, každého endpointu, kterého se stažení dotkne, a pak TLS a identita.
Na notebooku se image stáhne bez problémů, ale pod zůstává v ImagePullBackOff a někdo navrhuje spustit firemního VPN klienta jako sidecar. To nepomůže, protože stažení proběhne dřív, než váš kontejner existuje: kubelet požádá container runtime na node, aby image přinesl, a runtime používá síťový namespace node. VPN uvnitř workloadu pro tuto cestu routu nemá a jeho pomocný image se musí stáhnout předem.
Pořadí operací určuje vrstvu
Nejprve se řeší název image. kubelet přes runtime přeloží název registry, připojí se, autentizuje, stáhne vrstvy a teprve potom spustí kontejner. Vše, co pod s VPN dělá, přichází po tomto sledu, takže funkční tunel v clusteru není důkaz o stahování.
Proto je cachovaný image tak přesvědčivý lhář. Node, který image stáhl před týdny, ho dál servíruje, deployment vypadá zdravě a chyba se objeví až když scheduler umístí repliku na novější node. Pokud je v časové ose scale-up, výměna node nebo upgrade poolu, berte je jako spouštěč, ne příčinu.
Tři podmínky určují opravu
Dostupnost soukromého registry z managed node poolu závisí na routování, překladu jmen a sadě endpointů. Když podsíť node neumí routovat do sítě registry, žádné přihlašovací údaje nepomohou. Když routuje, ale název registry nepřeloží přes DNS cestu node, spojení vůbec nevznikne. Když obojí funguje pro manifest endpoint, ale ne pro blob endpoint, na který registry přesměruje, stažení selže v půlce.
| 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 |
Samotné VNet peering vám automaticky nedá všechna uspořádání gateway transit a routa v jednom směru není funkční routa. Node potřebuje podporovanou cestu přes zamýšlenou VPN gateway nebo schválené zařízení a strana registry potřebuje zpětnou routu do podsítě node.
Přečtěte chybu, než zvolíte opravu
Začněte událostmi podu a node, na který dosedl, se skutečnými názvy: kubectl describe pod app-example -n team-example a kubectl get pod app-example -n team-example -o wide. Text události odliší nepřeložené jméno hostitele od timeoutu, odmítnutí certifikátu od chybějícího image a selhání autorizace od všech ostatních. Ty čtyři mají čtyři různé vlastníky.
Autentizace je nejvíc přeceňovaná páka. imagePullSecret dává runtime údaje pro registry; nenainstaluje routu, nezmění resolver node a neudělá nedůvěryhodný certifikát platným. Když událost říká, že stažení nebylo autorizováno, dívejte se na rozsah identity. Když říká, že spojení vypršelo, údaje jsou irelevantní.
Dokumentace Kubernetes k image je referencí pro chování stahování a údaje k soukromým registry a vyplatí se ji přečíst před změnou sítě, protože jasně ukazuje hranici mezi autentizací a transportem.
Postavte cestu pod podem
Pracujte v tomto pořadí, protože každý krok je bezvýznamný, dokud neplatí předchozí. Nejprve routujte síť node: ověřte, že podsíť node má podporovanou cestu do sítě registry, zkontrolujte efektivní routy na node, bezpečnostní pravidla na obou koncích a zpětnou routu na straně registry.
Pak přeložte název z kontextu node. Resolver node není totéž co DNS konfigurace podu a úspěch v podu není důkaz pro host runtime. Používejte spravovaný soukromý DNS místo trvalého záznamu v hosts; záznam přežije do výměny node a pak tiše zmizí.
Pak prokažte každý endpoint. Registry může klientovi dát samostatnou autentizační službu a samostatné blob úložiště. Dosažení manifest endpointu nedokazuje o vrstvách téměř nic. Nakonec dokončete TLS a autorizaci: certifikát platný pro název registry a důvěryhodný přes podporovanou konfiguraci node, plus identita stahování omezená na čtení toho repozitáře.
Ověřte to na node, který jste neopravili ručně
Test, který se počítá, je čerstvé stažení a plné stažení všech vrstev na vhodném node, ideálně vytvořeném škálováním nebo výměnou. Pokryje všechny pooly, které by mohly workload umístit, včetně zapomenutých. Ruční oprava na jednom node není model nasazení a příští autoscale událost mezeru najde.
Znovuvytvoření clusteru v jiném VNet může cestu změnit, ale je to poslední možnost, ne první diagnostický krok. Porovnejte stávající síť node s požadovanou soukromou routou a podporovanými síťovými kontrolami AKS, než navrhnete migraci, a držte konektivitu aplikace po startu jako samostatné ověření: pod mluvící se svým backendem je jiná kontrola než node stahující image.