Ձեր նոթբուքը պատկերը ներբեռնում է առանց խնդիրների, բայց pod-ը մնում է ImagePullBackOff-ում։ Կորպորատիվ VPN-клиентը sidecar-ով գործարկելու առաջարկը չի օգնի, քանի որ ներբեռնումը տեղի է ունենում մինչև ձեր container-ի գոյությունը. kubelet-ը node-ի container runtime-ից պահանջում է բերել պատկերը, իսկ runtime-ը օգտագործում է node-ի ցանցային namespace-ը։

Գործողությունների հերթականությունը որոշում է շերտը

Նախ՝ պատկերի անվան լուծումը, ապա միացումը, նույնականացումը և շերտերի ներբեռնումը, և միայն դրանից հետո container-ի մեկնարկը։ Ամեն ինչ, ինչ pod-ը անում է VPN-ով, տեղի է ունենում այդ հաջորդականությունից հետո, ուստի աշխատող թունելը ապացույց չէ։

Այդ պատճառով քեշավորված պատկերն այդքան համոզիչ սուտ է. շաբաթներ առաջ պատկերը ներբեռնած node-ը շարունակում է տալ այն, deployment-ը առողջ է թվում, և խափանումը երևում է միայն այն ժամանակ, երբ պլանավորիչը replica-ն դնում է ավելի նոր node-ի վրա։ Scale-up-ը կամ node-ի փոխարինումը պատճառ չէ, այլ՝ ազդակ։

Երեք պայման որոշում են վերանորոգումը

Հասանելիությունը հենվում է երթուղավորման, անվան լուծման և endpoint-ների բազմության վրա։ Եթե subnet-ը չի կարող երթուղավորել registry-ի ցանց, ոչ մի credential չի օգնի. եթե անունը չի լուծվում node-ի DNS-ով, միացումը չի սկսվի. իսկ եթե հասանելի է միայն manifest endpoint-ը, ապա ներբեռնումը կիսաճանապարհին կձախողվի։

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

Միայն VNet peering-ը չի տալիս gateway transit-ի բոլոր ձևերը, և մեկ ուղղությամբ երթուղին աշխատող երթուղի չէ։ Node-ին անհրաժեշտ է աջակցվող ուղի նախատեսված VPN gateway-ով, իսկ registry-ի կողմին՝ վերադարձի երթուղի դեպի node-ի subnet։

Կարդացեք խափանումը, նախքան լուծում ընտրելը

Սկսեք pod-ի իրադարձություններից և այն node-ից, որտեղ այն ընկել է, ձեր իրական անուններով՝ kubectl describe pod app-example -n team-example և kubectl get pod app-example -n team-example -o wide։ Իրադարձության տեքստը տարբերում է չլուծված hostname-ը timeout-ից, վկայագրի մերժումը բացակայող պատկերից, իսկ թույլտվության ձախողումը՝ բոլորից։

Նույնականացումը ամենաուռճացված լծակն է։ imagePullSecret-ը runtime-ին տալիս է registry-ի credential-ներ. այն երթուղի չի տեղադրում, node-ի resolver-ը չի փոխում և անվստահելի վկայագիր վավեր չի դարձնում։ Եթե իրադարձությունն ասում է, որ ներբեռնումը չի թույլատրվել, նայեք ինքնության շրջանակին. եթե ասում է, որ կապը սպառվել է, credential-ները անկարևոր են։

Kubernetes-ի պատկերների փաստաթղթերը ներբեռնման վարքագծի և մասնավոր registry-ների credential-ների հղումն են, և արժե մեկ անգամ կարդալ ցանցը փոխելուց առաջ, որովհետև այն հստակեցնում է նույնականացման և փոխադրման սահմանը։

Կառուցեք ուղին pod-ի տակ

Աշխատեք այս հերթականությամբ, քանի որ յուրաքանչյուր քայլ անիմաստ է, մինչև նախորդը չի պահպանվում։ Սկզբում երթուղավորեք node-ի ցանցը. համոզվեք, որ subnet-ն ունի աջակցվող ուղի դեպի registry-ի ցանց, ստուգեք node-ի գործող երթուղիները, երկու կողմերի անվտանգության կանոնները և registry-ի կողմի վերադարձի երթուղին։

Այնուհետև լուծեք անունը node-ի համատեքստից։ Node-ի resolver-ը pod-ի DNS կարգավորումը չէ, և pod-ի ներսում հաջողությունը host runtime-ի ապացույց չէ։ Օգտագործեք կառավարվող մասնավոր DNS՝ մշտական hosts գրառման փոխարեն. գրառումը ապրում է մինչև node-ի փոխարինումը, ապա լուռ անհետանում։

Այնուհետև ապացուցեք յուրաքանչյուր endpoint։ Registry-ն կարող է տալ առանձին նույնականացման ծառայություն և առանձին blob պահոց։ Manifest endpoint-ին հասնելը գրեթե ոչինչ չի ապացուցում շերտերի մասին։ Վերջում ավարտեք TLS-ը և թույլտվությունը. վկայագիր, որը վավեր է registry-ի անվան համար և վստահելի՝ աջակցվող node կարգավորմամբ, գումարած ներբեռնման ինքնություն՝ սահմանափակված այդ պահոցը կարդալով։

Ստուգեք այն node-ի վրա, որը ձեռքով չեք վերանորոգել

Իսկական թեստը թարմ ներբեռնումն ու բոլոր շերտերի ամբողջական ներբեռնումն է հարմար node-ի վրա, լավագույնը՝ scale-ով կամ փոխարինմամբ ստեղծված։ Դա ընդգրկում է բոլոր pool-երը, որոնք կարող են տեղադրել workload-ը, ներառյալ մոռացվածները։ Մեկ node-ի ձեռքով վերանորոգումը deployment մոդել չէ, և հաջորդ autoscale իրադարձությունը կգտնի բացը։

Կլաստերի վերստեղծումը այլ VNet-ում կարող է փոխել ուղին, բայց դա վերջին միջոցն է, ոչ առաջին ախտորոշիչ քայլը։ Համեմատեք գործող node-ի ցանցը պահանջվող մասնավոր երթուղու և աջակցվող AKS ցանցային հսկողությունների հետ՝ նախքան միգրացիա առաջարկելը, և ծրագրի կապը մեկնարկից հետո պահեք որպես առանձին ստուգում. pod-ի խոսակցությունը backend-ի հետ այլ ստուգում է, քան node-ի պատկերի ներբեռնումը։

Առնչվող հոդվածներ