На вашем лаптопу се слика повлачи без проблема, али под остаје у ImagePullBackOff и неко предлаже да покренете корпоративни VPN клијент као sidecar. То не помаже, јер се повлачење дешава пре него што ваш контејнер постоји: kubelet тражи од container runtime-а на node-у да донесе слику, а runtime користи мрежни namespace node-а.

Редослед операција одређује слој

Прво долази разрешавање имена слике. kubelet преко runtime-а разрешава име registry-ја, повезује се, аутентификује, преузима слојеве и тек онда покреће контејнер. Све што под ради са VPN-ом дешава се после тог низа, зато тунел који ради у кластеру није доказ о повлачењу.

Зато је кеширана слика тако убедљива лаж: node који је слику повукао пре недеља наставља да је сервира, deployment изгледа здраво, а квар се појави тек кад планер постави реплику на новији node. scale-up или замена node-а је окидач, не узрок.

Три услова одређују поправку

Доступност приватног registry-ја из управљаног node pool-а своди се на рутирање, разрешавање имена и скуп endpoint-а. Ако подмрежа node-а не може да рутира до мреже registry-ја, никакви акредитиви не помажу. Ако име не може да се разреши преко DNS пута node-а, веза се не успоставља. Ако ради само manifest, а не blob, повлачење пада на пола.

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-а.

Прочитајте квар пре него што изаберете поправку

Почните од догађаја пода и node-а на који је слетео, са правим именима: kubectl describe pod app-example -n team-example и kubectl get pod app-example -n team-example -o wide. Текст догађаја разликује неразрешено име од timeout-а, одбијање сертификата од слике која недостаје, и грешку ауторизације од свега тога.

Аутентификација је најпрецењенија полуга. imagePullSecret даје runtime-у акредитиве за registry; он не поставља руту, не мења resolver node-а и не чини непоуздан сертификат важећим. Ако догађај каже да повлачење није ауторизовано, гледајте обим идентитета; ако каже да је веза истекла, акредитиви су небитни.

Документација Kubernetes-а о сликама је референца за понашање повлачења и акредитиве приватних registry-ја, и вреди је прочитати пре промене мреже, јер јасно показује границу између аутентификације и транспорта.

Изградите пут испод пода

Радите овим редом. Прво рутирајте мрежу node-а: потврдите да подмрежа има подржан пут до мреже registry-ја, проверите ефективне руте на node-у, безбедносна правила на оба краја и повратну руту на страни registry-ја.

Затим разрешите име из контекста node-а. Resolver node-а није DNS конфигурација пода, а успех у поду није доказ за host runtime. Користите управљани приватни DNS уместо трајног уноса у hosts; унос живи до замене node-а и онда тихо нестане.

Затим докажите сваки endpoint. Registry може дати клијенту одвојену услугу аутентификације и одвојено blob складиште. Достизање manifest-а не доказује готово ништа о слојевима. На крају довршите TLS и ауторизацију: сертификат важећи за име registry-ја и поуздан кроз подржану конфигурацију node-а, плус идентитет повлачења ограничен на читање тог репозиторијума.

Проверите на node-у који нисте поправили ручно

Прави тест је свеже повлачење и потпуно преузимање свих слојева на одговарајућем node-у, идеално оном створеном скалирањем или заменом. То покрива све pool-ове који би могли да поставе workload, укључујући заборављене. Ручна поправка на једном node-у није модел испоруке, а следећи autoscale догађај ће наћи празнину.

Поновно стварање кластера у другом VNet-у може променити пут, али то је последње средство, а не први дијагностички корак. Упоредите постојећу мрежу node-а са потребном приватном рутом и подржаним AKS мрежним контролама пре него што предложите миграцију, и држите повезаност апликације после покретања као одвојену проверу: под који разговара са својим backend-ом је друга провера од node-а који преузима слику.

Повезани чланци