Novietojiet EKS API aiz VPN: darbību secība
Iespējojiet privāto endpoint, pierādiet, ka kubectl to sasniedza, pēc tam aizveriet publisko. Pakāpenisks runbook ar komandām un pārbaudēm starp katru soli.
Bīstamā šīs izmaiņas versija ir viena komanda, kas apgriež endpoint un vienlaikus bloķē visus administratorus. Drošā versija tur abus ceļus atvērtus, pierāda, ka privātais darbojas no VPN, un tikai pēc tam atsauc publisko endpoint. Pieņemiet esošu klasteri, apstiprinātu tuneli tā VPC un jau strādājošu kubeconfig; uzdevums ir privāta piekļuve Kubernetes API, nevis privāti mezgli un nevis jauns atļauju modelis. Katram solim zemāk ir pārbaude, kurā varat droši neizdoties.
1. Inventarizējiet endpoint un saglabājiet atgriešanās ceļu
Pirms izmaiņām reģistrējiet pašreizējo stāvokli, tostarp publisko CIDR atļauto sarakstu un klastera drošības grupu. Tieši šos divus jūs salīdzināsiet, kad kaut kas pārstās darboties, un atļauto saraksts ir arī jūsu atritināšanas ceļš, ja privātais maršruts izrādīsies nepareizs.
aws eks describe-cluster --region REGION --name CLUSTER \
--query 'cluster.{endpoint:endpoint,public:resourcesVpcConfig.endpointPublicAccess,private:resourcesVpcConfig.endpointPrivateAccess,cidrs:resourcesVpcConfig.publicAccessCidrs}'
REGION un CLUSTER šeit ir vietas aizstājēji. Pievērsiet uzmanību tam, ko privātais karodziņš tagad rāda, jo klasterim, kas izveidots ar jau iespējotu privāto piekļuvi, vajadzīgs cits pirmais solis nekā tam, kuram tā nekad nav bijusi. Pārejas laikā turiet atvērtu vismaz vienu apstiprinātu administrēšanas ceļu; VPN, kas ir atkarīgs no tā paša klastera sasniedzamības, nav atkopšanas ceļš.
2. Iespējojiet privāto piekļuvi, kad tīkla ceļš ir gatavs
Karodziņa ieslēgšana ir vieglākā puse. Tunelim vajag maršrutu uz endpoint privātajām adresēm, un klastera drošības grupai vajag TCP 443 no avota, ko VPN faktiski uzrāda. Client VPN asociācija, site-to-site vārteja un savienotais VPC var uzrādīt dažādas avota adreses, tāpēc izmantojiet modeli, ko esat izvietojis, nevis vispārīgu privātu diapazonu.
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
Atjauninājums ir asinhronisks. Jautājiet atjauninājuma id, līdz tas ziņo par panākumiem, nevis gaidiet noteiktu sekunžu skaitu un pieņemiet. Kamēr to darāt, atstājiet mezglu un vadības plaknes trafiku mierā: visas klastera drošības grupas aizstāšana ar noteikumu jūsu klēpjdatoram ir veids, kā strādājoša datu plakne kļūst par otru incidentu.
EKS endpointu dokumentācija ir vērts vienreiz izlasīt pilnībā, jo tajā teikts, ka tikai privāta piekļuve var nākt no VPC vai pievienota tīkla. Tieši šis teikums ir viss iemesls, kāpēc šī migrācija ir iespējama, un tas ir arī iemesls, kāpēc pastāv nākamais solis.
3. Pierādiet, ka darbstacija izmantoja privāto ceļu
Kad abi endpointi ir iespējoti, veiksmīgs kubectl get ns neko nepierāda par to, kurš atbildēja. Atrisiniet endpoint resursdatora nosaukumu un pārbaudiet, vai iegūtā adrese pieder privātajam vai publiskajam diapazonam. Ja jūsu pievienotais tīkls nesaņem privāto skatu caur DNS, komanda izdosies caur publisko endpoint, un jūs atsauksiet publisko ceļu, pamatojoties uz viltus pierādījumiem. Tas ir visizplatītākais veids, kā šī migrācija noiet greizi, un tas izskatās tieši kā panākums.
nslookup HASH.gr7.REGION.eks.amazonaws.com
kubectl cluster-info
kubectl get ns --request-timeout=10s
Saglabājiet resursdatora nosaukumu un sertifikāta validāciju tieši tā, kā tie ir. Privātas IP ievietošana kubeconfig un TLS pārbaudes izlaišana nav tā migrācija, ko aprakstījāt izmaiņu ierakstā, un tā atkal neizdosies tajā brīdī, kad endpoint pagriezīsies.
4. Apzināti atsauciet publisko piekļuvi
Kad privātais ceļš ir pierādīts un atkopšanas process apstiprināts, aizveriet publisko endpoint. Šīs ir īstas izmaiņas, nevis priekšskatījums, tāpēc izpildiet tās uz konta un iestatījumiem, kurus patiešām domājat.
aws eks update-cluster-config --region REGION --name CLUSTER \
--resources-vpc-config endpointPublicAccess=false,endpointPrivateAccess=true
Tikai privātā režīmā publiskais DNS nosaukums no VPC iekšienes tiek atrisināts uz endpoint privātajām adresēm, tāpēc atrisināšana un sasniedzamība pārstāj būt viens un tas pats. Visam, kas paļāvās uz publisko adresi, tostarp CI izpildītājiem vai klēpjdatoram citā tīklā, tagad vajag savu ieejas ceļu.
5. Turiet tīkla politiku un identitātes politiku atsevišķi
Publiskās piekļuves CIDR saraksts pārvalda tikai publisko endpoint. Tas neierobežo privāto endpoint, ko tā vietā ierobežo klastera drošības grupa un pievienotā tīkla politika. Ja paturat publisko endpoint, tā atļautajam sarakstam jāatbilst publiskajai izejai, ko jūsu API klienti un mezgli faktiski izmanto; VPN pūla adrese reti ir šis avots.
Nekas no tā nemaina IAM vai Kubernetes RBAC. Endpoint iestatījumi ir administratīva darbība, un parastajiem lietotājiem nevajadzētu saņemt atļauju mīkstināt robežu tikai tāpēc, lai sasniegtu API. Ierakstiet galīgo stāvokli, datumu un atkopšanas ceļu runbook, pēc tam vienreiz pārbaudiet atkopšanas ceļu, kamēr tas vēl ir viegls.