AKS-ը չի կարող պատկեր ներբեռնել VPN-ի հետևում գտնվող մասնավոր registry-ից
kubelet-ը ներբեռնում է node-ի ցանցով, ոչ թե pod-ի VPN-ով։ Որոշեք ըստ node-ի երթուղիների, node-ի DNS-ի, ներբեռնմանը դիպչող յուրաքանչյուր endpoint-ի, ապա TLS-ի և ինքնության։
Ձեր նոթբուքը պատկերը ներբեռնում է առանց խնդիրների, բայց 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-ը, ապա ներբեռնումը կիսաճանապարհին կձախողվի։
| 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 |
Միայն 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-ի պատկերի ներբեռնումը։