EKS-API VPN:n taakse: toimintojen järjestys
Ota yksityinen päätepiste käyttöön, todista että kubectl saavutti sen ja sulje sitten julkinen. Vaiheittainen runbook komennoilla ja jokaisen vaiheen välisillä tarkistuksilla.
Tämän muutoksen vaarallinen versio on yksi komento, joka kääntää päätepisteen ja lukitsee kaikki ylläpitäjät ulos samalla kertaa. Turvallinen versio pitää molemmat polut auki, todistaa että yksityinen toimii VPN:stä, ja vasta sitten poistaa julkisen päätepisteen käytöstä. Oleta olemassa oleva klusteri, hyväksytty tunneli sen VPC:hen ja jo toimiva kubeconfig; tehtävä on yksityinen pääsy Kubernetes-API:in, ei yksityiset noodit eikä uusi käyttöoikeusmalli. Jokaisella alla olevalla vaiheella on tarkistus, jossa voit epäonnistua turvallisesti.
1. Inventoi päätepiste ja pidä paluureitti
Kirjaa nykytila ennen sen muuttamista, mukaan lukien julkinen CIDR-sallittujen lista ja klusterin suojausryhmä. Juuri näitä kahta vertaat, kun jokin lakkaa toimimasta, ja sallittujen lista on myös palautuspolkusi, jos yksityinen reitti osoittautuu vääräksi.
aws eks describe-cluster --region REGION --name CLUSTER \
--query 'cluster.{endpoint:endpoint,public:resourcesVpcConfig.endpointPublicAccess,private:resourcesVpcConfig.endpointPrivateAccess,cidrs:resourcesVpcConfig.publicAccessCidrs}'
REGION ja CLUSTER ovat tässä paikkamerkkejä. Huomioi, mitä yksityinen lippu näyttää nyt, koska klusteri, joka on luotu jo käytössä olevalla yksityisellä pääsyllä, tarvitsee erilaisen ensimmäisen vaiheen kuin sellainen, jolla sitä ei ole koskaan ollut. Pidä vähintään yksi hyväksytty hallintapolku auki siirtymän ajan; VPN, joka riippuu saman klusterin tavoitettavuudesta, ei ole palautumispolku.
2. Ota yksityinen pääsy käyttöön, kun verkkopolku on valmiina
Lipun kääntäminen päälle on se helppo puoli. Tunneli tarvitsee reitin päätepisteen yksityisiin osoitteisiin, ja klusterin suojausryhmä tarvitsee TCP 443:en lähteestä, jonka VPN todella esittää. Client VPN -liitos, site-to-site-yhdyskäytävä ja peerattu VPC voivat kaikki esittää eri lähdeosoitteita, joten käytä mallia, jonka otit käyttöön, älä yleistä yksityistä aluetta.
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
Päivitys on asynkroninen. Kysy päivityksen id:tä, kunnes se ilmoittaa onnistumisesta, sen sijaan että odottaisit kiinteän määrän sekunteja ja olettaisit. Jätä noodien ja ohjaustason liikenne rauhaan tätä tehdessäsi: klusterin koko suojausryhmän korvaaminen kannettavallesi tehtävällä säännöllä on se tapa, jolla toimiva datataso muuttuu toiseksi incidentiksi.
EKS-päätepisteiden dokumentaatio kannattaa lukea kerran kokonaan, koska siinä sanotaan, että vain yksityinen pääsy voi tulla VPC:stä tai liitetystä verkosta. Juuri tuo lause on koko syy siihen, miksi tämä migraatio on mahdollinen, ja se on myös syy siihen, miksi seuraava vaihe on olemassa.
3. Todista, että työasema käytti yksityistä polkua
Kun molemmat päätepisteet on otettu käyttöön, onnistunut kubectl get ns ei todista mitään siitä, kumpi vastasi. Selvitä päätepisteen isäntänimi ja tarkista, kuuluuko saamasi osoite yksityiseen vai julkiseen alueeseen. Jos liitetty verkkosi ei saa yksityistä näkymää DNS:n kautta, komento onnistuu julkisen päätepisteen kautta ja poistat julkisen polun käytöstä väärän todisteen perusteella. Tämä on yleisin tapa, jolla tämä migraatio menee pieleen, ja se näyttää täsmälleen onnistumiselta.
nslookup HASH.gr7.REGION.eks.amazonaws.com
kubectl cluster-info
kubectl get ns --request-timeout=10s
Pidä isäntänimi ja varmenteen vahvistus täsmälleen sellaisina kuin ne ovat. Yksityisen IP:n vaihtaminen kubeconfigiin ja TLS-tarkistuksen ohittaminen ei ole se migraatio, jonka kuvasit muutostietueessa, ja se epäonnistuu jälleen hetkellä, jolloin päätepiste vaihtuu.
4. Poista julkinen pääsy käytöstä tarkoituksella
Kun yksityinen polku on osoitettu ja palautumistyönkulku hyväksytty, sulje julkinen päätepiste. Tämä on todellinen muutos eikä esikatselu, joten suorita se sitä tiliä ja niitä asetuksia vasten, joita todella tarkoitat.
aws eks update-cluster-config --region REGION --name CLUSTER \
--resources-vpc-config endpointPublicAccess=false,endpointPrivateAccess=true
Vain yksityinen -tilassa julkinen DNS-nimi ratkeaa päätepisteen yksityisiin osoitteisiin VPC:n sisältä, joten selvitys ja tavoitettavuus eivät enää ole sama asia. Kaikki, mikä nojasi julkiseen osoitteeseen, mukaan lukien CI-ajurit tai kannettava toisessa verkossa, tarvitsee nyt oman sisäänmenopolkunsa.
5. Pidä verkkokäytäntö ja identiteettikäytäntö erillään
Julkisen pääsyn CIDR-lista ohjaa vain julkista päätepistettä. Se ei rajoita yksityistä päätepistettä, jota sen sijaan rajaavat klusterin suojausryhmä ja liitetyn verkon käytäntö. Jos pidät julkisen päätepisteen, sen sallittujen listan on vastattava julkista lähtöä, jota API-asiakkaasi ja noodisi todella käyttävät; VPN-poolin osoite on harvoin se lähde.
Mikään tästä ei muuta IAM:ää tai Kubernetes RBAC:ia. Päätepisteasetukset ovat hallinnollinen toimenpide, eikä tavallisille käyttäjille pitäisi antaa oikeutta löysentää rajaa vain API:in pääsemiseksi. Kirjoita lopputila, päivämäärä ja palautumispolku runbookiin ja testaa sitten palautumispolku kerran, kun se on vielä helppoa.