Pavojinga šio pakeitimo versija yra viena komanda, kuri apverčia endpoint ir tuo pačiu užrakina visus administratorius. Saugi versija palieka abu kelius atvirus, įrodo, kad privatusis veikia iš VPN, ir tik tada atšaukia viešąjį endpoint. Tarkime, kad yra esamas klasteris, patvirtintas tunelis į jo VPC ir jau veikiantis kubeconfig; užduotis yra privati prieiga prie Kubernetes API, o ne privatūs mazgai ir ne naujas leidimų modelis. Kiekvienas žingsnis žemiau turi patikrą, kurioje galite saugiai nepavykti.

1. Inventorizuokite endpoint ir pasilikite kelią atgal

Užfiksuokite dabartinę būseną prieš ją keisdami, įskaitant viešą CIDR leidžiamų adresų sąrašą ir klasterio saugos grupę. Būtent šiuos du lyginsite, kai kažkas nustos veikti, o leidžiamų sąrašas taip pat yra jūsų atsukimo kelias, jei privatusis maršrutas pasirodys neteisingas.

aws eks describe-cluster --region REGION --name CLUSTER \
  --query 'cluster.{endpoint:endpoint,public:resourcesVpcConfig.endpointPublicAccess,private:resourcesVpcConfig.endpointPrivateAccess,cidrs:resourcesVpcConfig.publicAccessCidrs}'

REGION ir CLUSTER čia yra vietos žymekliai. Atkreipkite dėmesį, ką dabar rodo privati vėliavėlė, nes klasteriui, sukurtam su jau įjungta privačia prieiga, reikia kito pirmo žingsnio nei tam, kuris jos niekada neturėjo. Perėjimo metu palikite atvirą bent vieną patvirtintą administravimo kelią; VPN, kuris priklauso nuo to paties klasterio pasiekiamumo, nėra atkūrimo kelias.

2. Įjunkite privačią prieigą, kai tinklo kelias jau paruoštas

Vėliavėlės įjungimas yra lengvesnė pusė. Tuneliui reikia maršruto į privatinius endpoint adresus, o klasterio saugos grupei reikia TCP 443 iš šaltinio, kurį VPN iš tikrųjų pateikia. Client VPN asociacija, site-to-site tinklų sietuvas ir suporuotas VPC gali pateikti skirtingus šaltinio adresus, todėl naudokite modelį, kurį įdiegėte, o ne bendrą privatų diapazoną.

aws eks update-cluster-config --region REGION --name CLUSTER \
  --resources-vpc-config endpointPublicAccess=true,endpointPrivateAccess=true

aws eks describe-update --region REGION --name CLUSTER --update-id UPDATE_ID

Atnaujinimas yra asinchroninis. Klauskite atnaujinimo id, kol jis praneš apie sėkmę, o ne laukite fiksuoto sekundžių skaičiaus ir darykite prielaidą. Kol tai darote, palikite mazgų ir valdymo plokštumos srautą ramybėje: visos klasterio saugos grupės pakeitimas taisykle jūsų nešiojamajam kompiuteriui yra būdas, kuriuo veikianti duomenų plokštuma tampa antru incidentu.

EKS endpointų dokumentacija verta vieną kartą perskaityti visą, nes joje sakoma, kad tik privati prieiga gali ateiti iš VPC arba prijungto tinklo. Būtent tas sakinys yra visa priežastis, kodėl ši migracija įmanoma, ir tai taip pat priežastis, kodėl egzistuoja kitas žingsnis.

3. Įrodykite, kad darbo stotis naudojo privatų kelią

Kai abu endpointai įjungti, sėkmingas kubectl get ns nieko neįrodo apie tai, kuris atsakė. Išspręskite endpoint hostname ir patikrinkite, ar gautas adresas priklauso privačiam, ar viešam diapazonui. Jei jūsų prijungtas tinklas negauna privataus vaizdo per DNS, komanda pavyks per viešąjį endpoint, ir jūs atšauksite viešąjį kelią remdamiesi klaidingais įrodymais. Tai yra labiausiai paplitęs būdas, kuriuo ši migracija nepavyksta, ir tai atrodo lygiai kaip sėkmė.

nslookup HASH.gr7.REGION.eks.amazonaws.com
kubectl cluster-info
kubectl get ns --request-timeout=10s

Palikite hostname ir sertifikato tikrinimą tiksliai tokius, kokie jie yra. Privataus IP įrašymas į kubeconfig ir TLS tikrinimo praleidimas nėra ta migracija, kurią aprašėte pakeitimo įraše, ir ji vėl nepavyks tą akimirką, kai endpoint pasisuks.

4. Sąmoningai atšaukite viešąją prieigą

Kai privatusis kelias įrodytas ir atkūrimo procesas patvirtintas, uždarykite viešąjį endpoint. Tai tikras pakeitimas, o ne peržiūra, todėl vykdykite jį tam tikslui, kurio iš tikrųjų norite.

aws eks update-cluster-config --region REGION --name CLUSTER \
  --resources-vpc-config endpointPublicAccess=false,endpointPrivateAccess=true

Tik privataus režimo atveju viešas DNS vardas iš VPC vidaus išsprendžiamas į privatinius endpoint adresus, todėl sprendimas ir pasiekiamumas nustoja būti tas pats. Viskas, kas rėmėsi viešu adresu, įskaitant CI vykdyklės ar nešiojamąjį kompiuterį kitame tinkle, dabar turi savo įėjimo kelią.

5. Laikykite tinklo politiką ir tapatybės politiką atskirai

Viešosios prieigos CIDR sąrašas valdo tik viešąjį endpoint. Jis neriboja privataus endpoint, kurį vietoj to riboja klasterio saugos grupė ir prijungto tinklo politika. Jei paliekate viešąjį endpoint, jo leidžiamų sąrašas turi atitikti viešąjį egress, kurį jūsų API klientai ir mazgai iš tikrųjų naudoja; VPN pool adresas retai būna tas šaltinis.

Niekas iš to nekeičia IAM ar Kubernetes RBAC. Endpoint nustatymai yra administracinis veiksmas, ir paprasti naudotojai neturėtų gauti leidimo sušvelninti ribą vien tam, kad pasiektų API. Įrašykite galutinę būseną, datą ir atkūrimo kelią į runbook, tada vieną kartą išbandykite atkūrimo kelią, kol jis dar lengvas.

Susiję straipsniai