Zašto kubectl radi preko VPN-a, a AKS prestaje skalirati
Dopušteni IP rasponi vide javni izlaz VPN poslužitelja, a ne razvijatelja. Dodajte raspone platforme, inače automatizacija i skaliranje padaju nakon promjene.
Dodate javnu adresu uredskog VPN-a na popis dopuštenih AKS API poslužitelja i kubectl radi. Tjedan dana kasnije skaliranje node pool-a ne uspije, CI posao ne može doći do klastera, a portal prikazuje pogrešku u kojoj se IP rasponi uopće ne spominju. Nitko nije promijenio popis dopuštenih. Kontrola koju ste uključili je javni IP filtar ispred API poslužitelja i ona ne zna tko zove, samo s koje adrese poziv dolazi. VPN je jedna adresa među nekoliko koje klaster treba i rijetko je ona koja prva pukne.
Popis dopuštenih uspoređuje adresu, ne osobu
--api-server-authorized-ip-ranges prihvaća CIDR blokove, ne korisnike ili grupe. Kada zahtjev razvijatelja napusti VPN poslužitelj prema Azureu, izvorna adresa na API poslužitelju je javni izlaz VPN poslužitelja. Zato svaka osoba na tom VPN-u dijeli jedan unos, a svakome izvan VPN-a odbija se pristup prije nego što se autentifikacija uopće dogodi.
To također znači da unos propušta više ljudi nego što namjeravate. Izvođač s VPN pristupom, osobni prijenosnik na istom koncentratoru i kompromitirani račun dolaze sa iste adrese. Autorizacija klastera nije promijenjena, pa kontrola pristupa temeljena na ulogama i dalje odlučuje što pozivatelj smije raditi, ali popis dopuštenih nije kontrola identiteta i nikada se tako ne smije opisivati.
Ono što prvo pukne obično nije kubectl
Popis dopuštenih vrijedi za javnu završnu točku API poslužitelja, pa sve izvan vaših navedenih adresa odmah prestaje raditi. Očite žrtve su drugi ured bez VPN rute, CI runner u hostanom pipelineu i prijenosnik koji je zaboravio povezati se. Njih je lako prepoznati jer čovjek čeka.
Manje očit slučaj je automatizacija koju pokreću Azure ili vaši alati. Neke operacije koje inicira platforma dolaze do API poslužitelja s adresa koje nisu vaš VPN, a kada jedna od njih počne padati odmah nakon pooštravanja popisa, vrijeme je trag. Ne pretpostavljajte da je popis potpun zato što interaktivni pristup radi; provjerite što funkcija zahtijeva za vašu regiju i pretplate prije nego zaključite da je klaster pokvaren.
Potpis kvara pomaže. Ako zahtjev nikada ne stigne do autentifikacije, to je filtar. Ako se autentificira i zatim dobije pogrešku dopuštenja, filtar je odradio svoj posao i problem je u kontroli pristupa temeljenoj na ulogama, koju popis dopuštenih nikada ne dira.
Izgradite cijeli popis jednom naredbom
Parametar ažuriranja zamjenjuje cijeli popis umjesto da dodaje unos, pa naredba koja nosi samo VPN adresu tiho odbacuje sve ostalo što je bilo tamo. Prvo pročitajte trenutnu vrijednost, zadržite je i pošaljite uniju:
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/24Koristite rezerviranu javnu IP adresu za VPN poslužitelj prije nego se oslonite na ovo. Dinamička adresa mijenja se pri ponovnom povezivanju, a svaka promjena tiho zaključava tim izvan klastera dok netko ne ažurira popis s mreže koja je još dopuštena. Ako imate dvije VPN izlazne točke za redundanciju, navedite obje, jer filtar nema pojam preferirane putanje.
Poredajte promjenu tako da prvi dopušteni pokušaj bude i test. Najavite novi popis, primijenite ga i odmah se povežite s VPN-a; suprotnim redoslijedom ostavljate prozor u kojem nitko ne može doći do API poslužitelja da ispravi tipfeler u CIDR bloku.
Što popis dopuštenih nikada nije pokrivao
On ne čini API poslužitelj privatnim. Privatni klaster koristi privatnu završnu točku i privatni DNS, a popis dopuštenih raspona nije kontrola koja ga zamjenjuje. Također ne mijenja što propušteni pozivatelj može raditi, pa procurjeli admin kubeconfig i dalje radi s bilo koje dopuštene adrese. Tretirajte vjerodajnice kao sigurnosnu granicu, a popis kao mrežnu pogodnost.
On nema nikakve veze s radnim opterećenjima. Pods i Services nastavljaju raditi s uključenim popisom, a dolazak do aplikacije preko VPN-a je odvojen problem: Service koji ima samo klaster IP i dalje treba interni balancer opterećenja, ingress ili port-forward prije nego prijenosnik može ga otvoriti. Miješanje ta dva dizajna proizvodi tiket za promjenu koji tvrdi da ograničava razvijatelje, a zapravo ne ograničava ništa u aplikacijama.
Provjerite s obje strane, zatim izvedite jednu stvarnu operaciju
Testirajte svježim klijentom na VPN-u i klijentom izvan njega. Pokušaj izvana treba biti odbijen na API poslužitelju, ne pri razrješavanju imena; ako se ime ne razriješi, testirate DNS i niste naučili ništa o filtru. Zatim izvedite operaciju koja nije interaktivni kubectl poziv, kao što je skaliranje node pool-a ili provjera nadogradnje, i potvrdite da se dovršava umjesto da pretpostavljate da hoće.
Zapišite prethodnu vrijednost popisa uz promjenu i ponovno pročitajte efektivnu vrijednost nakon ažuriranja umjesto da vjerujete otkucanoj naredbi. AKS dokumentacija o dopuštenim IP rasponima navodi podržane parametre i zahtjeve platforme koji pripadaju na isti popis, a to je dio koji većina opisa tiketa izostavlja.