Зашто kubectl ради преко VPN-а, а AKS престаје да скалира
Дозвољени IP опсези виде јавни излаз VPN сервера, а не програмера. Додајте опсеге платформе, иначе аутоматизација и скалирање падају после промене.
Додате јавну адресу канцеларијског VPN-а на листу дозвољених AKS API сервера и kubectl ради. Недељу дана касније скалирање node pool-а не успева, CI посао не може да дође до кластера, а портал приказује грешку у којој се IP опсези уопште не помињу. Нико није променио листу дозвољених. Контрола коју сте укључили је јавни IP филтер испред API сервера и она не зна ко зове, само са које адресе позив долази. VPN је једна адреса међу неколико које кластер треба и ретко је она која прва пукне.
Листа дозвољених упарује адресу, не особу
--api-server-authorized-ip-ranges прихвата CIDR блокове, не кориснике или групе. Када захтев програмера напусти VPN сервер према Azure-у, изворна адреса на API серверу је јавни излаз VPN сервера. Зато свака особа на том VPN-у дели један унос, а свакоме изван VPN-а одбија се приступ пре него што се аутентификација уопште догоди.
То такође значи да унос пушта више људи него што намеравате. Извођач са VPN приступом, лични лаптоп на истом концентратору и компромитовани налог долазе са исте адресе. Ауторизација кластера није промењена, па контрола приступа заснована на улогама и даље одлучује шта позивалац сме да ради, али листа дозвољених није контрола идентитета и никада се тако не сме описивати.
Оно што прво пукне обично није kubectl
Листа дозвољених важи за јавну крајњу тачку API сервера, па све изван ваших наведених адреса одмах престаје да ради. Очигледне жртве су друга канцеларија без VPN руте, CI runner у хостованом pipeline-у и лаптоп који је заборавио да се повеже. Њих је лако препознати јер човек чека.
Мање очигледан случај је аутоматизација коју покрећу Azure или ваши алати. Неке операције које иницира платформа долазе до API сервера са адреса које нису ваш VPN, а када једна од њих почне да пада одмах након пооштравања листе, време је траг. Не претпостављајте да је листа потпуна зато што интерактивни приступ ради; проверите шта функција захтева за ваш регион и претплате пре него што закључите да је кластер покварен.
Потпис квара помаже. Ако захтев никада не стигне до аутентификације, то је филтер. Ако се аутентификује и затим добије грешку дозволе, филтер је обавио свој посао и проблем је у контроли приступа заснованој на улогама, коју листа дозвољених никада не дира.
Изградите целу листу једном командом
Параметар ажурирања замењује целу листу уместо да додаје унос, па команда која носи само VPN адресу тихо одбацује све остало што је било тамо. Прво прочитајте тренутну вредност, задржите је и пошаљите унију:
az aks show -g rg-app -n aks-prod \
--query apiServerAccessProfile.authorizedIpRanges -o tsv
az aks update -g rg-app -n aks-prod \
--api-server-authorized-ip-ranges 203.0.113.10/32,198.51.100.0/24Користите резервисану јавну IP адресу за VPN сервер пре него што се ослоните на ово. Динамичка адреса се мења при поновном повезивању, а свака промена тихо закључава тим изван кластера док неко не ажурира листу са мреже која је још дозвољена. Ако имате две VPN излазне тачке за редундансу, наведите обе, јер филтер нема појам префериране путање.
Поређајте промену тако да први дозвољени покушај буде и тест. Најавите нову листу, примените је и одмах се повежите са VPN-а; супротним редоследом остављате прозор у којем нико не може да дође до API сервера да исправи грешку у куцању CIDR блока.
Шта листа дозвољених никада није покривала
Она не чини API сервер приватним. Приватни кластер користи приватну крајњу тачку и приватни DNS, а листа дозвољених опсега није контрола која га замењује. Такође не мења шта пропуштени позивалац може да ради, па процурели admin kubeconfig и даље ради са било које дозвољене адресе. Третирајте акредитиве као безбедносну границу, а листу као мрежну погодност.
Она нема никакве везе са радним оптерећењима. Pods и Services настављају да раде са укљученом листом, а долазак до апликације преко VPN-а је одвојен проблем: Service који има само кластер IP и даље треба интерни балансер оптерећења, ingress или port-forward пре него лаптоп може да га отвори. Мешање та два дизајна производи тикет за промену који тврди да ограничава програмере, а заправо не ограничава ништа у апликацијама.
Проверите са обе стране, затим изведите једну стварну операцију
Тестирајте свежим клијентом на VPN-у и клијентом изван њега. Покушај споља треба бити одбијен на API серверу, не при разрешавању имена; ако се име не разреши, тестирате DNS и нисте научили ништа о филтеру. Затим изведите операцију која није интерактивни kubectl позив, као што је скалирање node pool-а или провера надоградње, и потврдите да се завршава уместо да претпостављате да хоће.
Запишите претходну вредност листе поред промене и поново прочитајте ефективну вредност након ажурирања уместо да верујете откуцаној команди. AKS документација о дозвољеним IP опсезима наводи подржане параметре и захтеве платформе који припадају на исту листу, а то је део који већина описа тикета изоставља.