Опасна верзија ове промене је једна команда која преокрене endpoint и закључа све администраторе у исто време. Сигурна верзија држи оба пута отворена, докаже да приватни ради са VPN-а и тек онда повуче јавни endpoint. Претпоставите постојећи кластер, одобрени тунел у његов VPC и kubeconfig који већ ради; задатак је приватни приступ Kubernetes API-ју, а не приватни чворови и не нови модел дозвола. Сваки корак испод има проверу на којој можете безбедно пасти.

1. Пописшите endpoint и задржите пут за повратак

Забележите тренутно стање пре него што га промените, укључујући јавни CIDR списак дозвољених адреса и сигурносну групу кластера. Управо та два ћете упоређивати када нешто престане да ради, а списак дозвољених адреса је и ваш пут за враћање ако се приватна рута покаже погрешном.

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

REGION и CLUSTER су овде заменске вредности. Обратите пажњу шта приватна заставица сада показује, јер кластер створен са већ омогућеним приватним приступом захтева другачији први корак од онога који га никада није имао. Одржавајте барем један одобрени административни пут отвореним током транзиције; VPN који зависи од доступности истог кластера није пут за опоравак.

2. Омогућите приватни приступ уз припремљену мрежну руту

Укључивање заставице је лакша половина. Тунел треба руту до приватних адреса endpoint-а, а сигурносна група кластера треба TCP 443 са извора који VPN стварно представља. Client VPN асоцијација, site-to-site gateway и peer-овани VPC могу сви представљати различите изворне адресе, зато користите модел који сте имплементирали уместо генеричког приватног опсега.

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

Ажурирање је асинхроно. Проверавајте id ажурирања док не пријави успех, уместо да чекате фиксни број секунди и претпостављате. Оставите саобраћај чворова и контролне равни на миру док то радите: замена целе сигурносне групе кластера правилом за ваше преносно рачунало је начин на који радна податковна раван постаје други инцидент.

Документација о EKS endpoint-има вреди једном прочитати у целости, јер каже да приступ само преко приватног пута може доћи из VPC-а или повезане мреже. Та реченица је цео разлог зашто је ова миграција могућа и уједно разлог зашто следећи корак постоји.

3. Докажите да је радна станица користила приватни пут

Када су оба endpoint-а омогућена, успешан kubectl get ns не доказује ништа о томе који је одговорио. Разрешите име хоста endpoint-а и проверите припада ли адреса коју сте добили приватном или јавном опсегу. Ако ваша повезана мрежа не прима приватни приказ кроз DNS, команда ће успети преко јавног endpoint-а и повући ћете јавни пут на основу лажних доказа. То је најчешћи начин на који ова миграција пође по злу и изгледа тачно као успех.

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

Задржите име хоста и валидацију сертификата тачно какви јесу. Замена приватним IP-ом у kubeconfig-у и прескакање TLS провере није миграција коју сте описали у запису о промени и поново ће пасти у тренутку када се endpoint ротира.

4. Намерно повуците јавни приступ

Када је приватни пут доказан и ток опоравка одобрен, затворите јавни endpoint. Ово је стварна промена, а не преглед, зато је извршите на рачуну и поставкама које заиста мислите.

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

У режиму само приватно јавно DNS име се разрешава на приватне адресе endpoint-а из унутрашњости VPC-а, па разрешавање и доступност престају бити иста ствар. Све што се ослањало на јавну адресу, укључујући CI runner-е или преносно рачунало на другој мрежи, сада треба властити пут унутра.

5. Држите мрежну политику и политику идентитета одвојено

CIDR списак јавног приступа управља само јавним endpoint-ом. Она не ограничава приватни endpoint, који уместо тога ограничавају сигурносна група кластера и политика повезане мреже. Ако задржите јавни endpoint, његов списак дозвољених адреса мора да одговара јавном излазу који ваши API клијенти и чворови стварно користе; адреса VPN пула ретко је тај извор.

Ништа од овога не мења IAM или Kubernetes RBAC. Поставке endpoint-а су административна радња и обични корисници не би требало да добијају дозволу да олабаве границу само да би достигли API. Запишите коначно стање, датум и пут опоравка у runbook, затим тестирајте пут опоравка једном док је још лак.

Повезани чланци