Небяспечная версія гэтага змянення — адна каманда, якая перамыкае канчатковую кропку і адначасова замыкае ўсіх адміністратараў. Бяспечная версія пакідае абодва шляхі адкрытымі, даказвае, што прыватны шлях працуе з VPN, і толькі пасля гэтага выводзіць з эксплуатацыі публічную канчатковую кропку. Мяркуйце, што ёсць існуючы кластар, ухвалены тунель у яго VPC і kubeconfig, які ўжо працуе; задача — прыватны доступ да API Kubernetes, а не прыватныя вузлы і не новая мадэль дазволаў. Кожны крок ніжэй мае праверку, на якой можна бяспечна спыніцца.

1. Інвентарызацыя канчатковай кропкі і захаванне шляху назад

Запішыце бягучы стан перад змяненнем, уключаючы публічны спіс дазволеных 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. Уключыць прыватны доступ пры наяўнасці сеткавага шляху

Уключыць сцяг — гэта лёгкая палова. Тунелю патрэбны маршрут да прыватных адрасоў канчатковай кропкі, а групе бяспекі кластара — TCP 443 ад крыніцы, якую VPN фактычна прадстаўляе. Асацыяцыя Client VPN, шлюз сайт-сайт і аднараўнаваны 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

Абнаўленне асінхроннае. Апытвайце ідэнтыфікатар абнаўлення, пакуль ён не паведаміць пра поспех, замест таго каб чакаць фіксаваную колькасць секунд і меркаваць. Пакіньце трафік вузлоў і плоскасці кіравання ў спакоі, пакуль вы гэта робіце: замена ўсёй групы бяспекі кластара правілам для вашага ноўтбука — гэта тое, як працуючая плоскасць даных ператвараецца ў другі інцыдэнт.

Дакументацыя пра канчатковыя кропкі EKS вартая аднаго поўнага прачытання, бо ў ёй сказана, што доступ толькі праз прыватны шлях можа ісці з VPC або з падлучанай сеткі. Гэтае сказ — уся прычына, чаму гэтая міграцыя магчымая, і яна ж — прычына існавання наступнага кроку.

3. Даказаць, што працоўная станцыя выкарыстала прыватны шлях

Калі ўключаны абедзве канчатковыя кропкі, паспяховы kubectl get ns нічога не даказвае пра тое, якая з іх адказала. Разгледзьце імя хоста канчатковай кропкі і праверце, ці належыць атрыманы адрас прыватнаму дыяпазону або публічнаму. Калі ваша падлучаная сетка не атрымлівае прыватны выгляд праз DNS, каманда пройдзе праз публічную канчатковую кропку, і вы вывядзеце публічны шлях з эксплуатацыі на падставе ілжывых доказаў. Гэта самы распаўсюджаны спосаб, якім гэтая міграцыя ідзе не так, і ён выглядае дакладна як поспех.

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

Пакіньце імя хоста і праверку сертыфіката дакладна як ёсць. Замена на прыватны IP у kubeconfig і прапусканне праверкі TLS — гэта не тая міграцыя, якую вы апісалі ў запісе пра змены, і яна зноў не спрацуе ў момант ратацыі канчатковай кропкі.

4. Свядома вывесці публічны доступ з эксплуатацыі

Пасля таго як прыватны шлях прадэманстраваны і працэс аднаўлення ўхвалены, зачыніце публічную канчатковую кропку. Гэта рэальнае змяненне, а не перадпрагляд, таму выконвайце яго для ўліковага запісу і налад, якія вы сапраўды маеце на ўвазе.

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

У рэжыме толькі прыватнага доступу публічнае імя DNS развязваецца ў прыватныя адрасы канчатковай кропкі знутры VPC, таму развязанне і даступнасць перастаюць быць адным і тым жа. Усё, што спадзявалася на публічны адрас, уключаючы CI-раннеры або ноўтбук у іншай сетцы, цяпер мае патрэбу ў сваім уласным шляху ўнутр.

5. Трымаць сеткавую палітыку і палітыку ідэнтычнасці асобна

Спіс CIDR публічнага доступу кіруе толькі публічнай канчатковай кропкай. Ён не абмяжоўвае прыватную канчатковую кропку, якую замест гэтага абмяжоўваюць група бяспекі кластара і палітыка падлучанай сеткі. Калі вы пакідаеце публічную канчатковую кропку, яе спіс дазволаў павінен адпавядаць публічнаму выхаду, які фактычна выкарыстоўваюць вашыя кліенты API і вузлы; адрас пула VPN рэдка з'яўляецца такой крыніцай.

Нішто з гэтага не змяняе IAM або Kubernetes RBAC. Налады канчатковай кропкі — гэта адміністрацыйнае дзеянне, і звычайныя карыстальнікі не павінны атрымліваць дазвол паслабляць мяжу проста дзеля доступу да API. Запішыце канчатковы стан, дату і шлях аднаўлення ў runbook, а затым праверце шлях аднаўлення адзін раз, пакуль гэта яшчэ лёгка.

Падобныя артыкулы