АКС не може да повуче слику из приватног registry-ја иза VPN-а
kubelet повлачи кроз мрежу node-а, а не кроз VPN пода. Одлучите по рутама node-а, DNS-у node-а, сваком endpoint-у који повлачење дотакне, затим TLS и идентитет.
На вашем лаптопу се слика повлачи без проблема, али под остаје у 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, повлачење пада на пола.
| 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-а.
Прочитајте квар пре него што изаберете поправку
Почните од догађаја пода и 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-а који преузима слику.