Service account үшін kubeconfig файлын жасау
Cloud Containers кластеріне kubectl көмегімен қосылғанда кластер конфигурациясының файлы — kubeconfig пайдаланылады. Әдетте кластермен жұмыс істеу үшін бірыңғай кіру технологиясын пайдалануға бапталған VK Cloud жеке кабинетінен алынған kubeconfig қолданылады. Сондықтан kubectl құралымен жұмыс істегенде пайдаланушының паролін мезгіл-мезгіл енгізу керек болады.
Мұндай аутентификация процесі кластерге қолжетімділік қажет автоматтандырылған құралдармен жұмыс істегенде ыңғайсыз. Олармен жұмыс істеу үшін service account арналған kubeconfig файлын пайдаланған ыңғайлырақ. Бұл kubeconfig пароль енгізбей-ақ, өмір сүру мерзімі шексіз токен арқылы аутентификациялануға мүмкіндік береді.
-
Жасаңыз Kubernetes кластерін өзекті нұсқада, егер бұл әлі жасалмаған болса.
Кластерді жасау кезінде Сыртқы IP тағайындау опциясын таңдаңыз. Кластердің қалған параметрлерін өз қалауыңызша таңдаңыз.
-
kubectlкөмегімен жасалған кластерге қосыла алатыныңызға көз жеткізіңіз.Бұл кезде VK Cloud жеке кабинетінен жүктелген kubeconfig пайдаланылады.
-
kubeconfig-ке нұсқайтын орта айнымалыларын орнатыңыз:
VKCLOUD_KUBECONFIG: VK Cloud жеке кабинетінен жүктелген kubeconfig-ке жол.SA_KUBECONFIG: service account үшін kubeconfig-ке жол (файлдың өзі кейінірек жасалады).
Бұл
kubectlқұралымен әрі қарай жұмысты жеңілдетеді.Linux (bash)/macOS (zsh)Windows (PowerShell)export VKCLOUD_KUBECONFIG="/home/user/.kube/kubernetes-cluster-1234_kubeconfig.yaml"export SA_KUBECONFIG="/home/user/.kube/sa_kubeconfig.yaml" -
Кластерге қосылғаннан кейін қажетті Kubernetes ресурстарын жасауға құқықтарыңыз бар екеніне көз жеткізіңіз:
kubectl --kubeconfig $VKCLOUD_KUBECONFIG auth can-i create serviceaccountkubectl --kubeconfig $VKCLOUD_KUBECONFIG auth can-i create secretkubectl --kubeconfig $VKCLOUD_KUBECONFIG auth can-i create clusterrolebindingӘр команда үшін
yesжауабы шығуы керек.Егер осы ресурстардың кез келгенін жасауға құқық болмаса (
noжауабы), кластерге қосылу орындалып жатқан VK Cloud пайдаланушысының рөлін түзетіңіз.Рөлдік модель және қолжетімді рөлдер туралы толығырақ Қолжетімділікті басқару бөлімінен оқыңыз.
-
kube-systemаттар кеңістігіндеexample-saservice account-ын жасаңыз:Linux (bash)/macOS (zsh)Windows (PowerShell)kubectl --kubeconfig $VKCLOUD_KUBECONFIG \create serviceaccount example-sa -n kube-systemКоманда шығысының мысалы:
serviceaccount/example-sa created -
Service account-қа тағайындау қажет кластерлік рөлді таңдаңыз.
Барлық кластерлік рөлдердің тізімін егжей-тегжейлі сипаттамасымен алу үшін келесі команданы орындаңыз:
kubectl --kubeconfig $VKCLOUD_KUBECONFIG describe clusterrolesРөлді таңдағанда кластермен жұмыс істеу қауіпсіздігін арттыру үшін ең аз артықшылықтар қағидатын ұстаныңыз. Рөлдік модель туралы толығырақ Kubernetes ресми құжаттамасында.
Төменде мысал ретінде
editрөлі тағайындалады. Ол жеке кабинеттегіОператор Kubernetesрөліне сәйкес келеді. -
Жасалған service account-ты таңдалған кластерлік рөлмен байланыстырыңыз. Ол үшін
example-bindingатауыменClusterRoleBindingресурсын жасаңыз.Service account тиесілі аттар кеңістігімен бірге көрсетілуі керек.
Linux (bash)/macOS (zsh)Windows (PowerShell)kubectl --kubeconfig $VKCLOUD_KUBECONFIG \create clusterrolebinding example-binding \--serviceaccount=kube-system:example-sa \--clusterrole=editКоманда шығысының мысалы:
clusterrolebinding.rbac.authorization.k8s.io/example-binding created
-
Service account үшін токені бар
example-tokenқұпиясын жасаңыз:-
Манифест файлын жасаңыз:
Манифест өрістеріне түсіндірмелер:
type:kubernetes.io/service-account-tokenарнайы secret түрі. Мұндай secret service account үшін токенді сақтайды.metadata.namespace: secret үшін аттар кеңістігі. Secret service account орналасқан аттар кеңістігінде орналасуы керек.metadata.annotations: service account атауы барkubernetes.io/service-account.nameарнайы аннотациясы. Жасалған secret-тен алынған токен осы account-пен байланысады.
-
Манифест файлын қолданыңыз:
kubectl --kubeconfig $VKCLOUD_KUBECONFIG apply -f example-token.yamlБерілген параметрлері бар secret жасалады. Команда шығысының мысалы:
secret/example-token created
-
-
Жасалған secret-тен service account-қа токен тағайындалғанына көз жеткізіңіз:
Linux (bash)/macOS (zsh)Windows (PowerShell)kubectl --kubeconfig $VKCLOUD_KUBECONFIG \describe serviceaccount example-sa -n kube-systemШығыста
Tokensөрісінде secret-ке сілтеме болуы керек. -
Токен мәнін алыңыз.
Secret токенді кодталған түрде сақтайды (Base64 кодтау сызбасы). Оны kubeconfig ішінде пайдалану үшін токенді декодтау қажет:
Linux (bash)/macOS (zsh)Windows (PowerShell)kubectl --kubeconfig $VKCLOUD_KUBECONFIG \get secret example-token -n kube-system \--template={{.data.token}} | base64 --decodeТокеннің мәні шығарылады. Оны сақтап қойыңыз.
-
Бұл kubeconfig үшін негізді VK Cloud жеке кабинетінен жүктелген kubeconfig-ті көшіру арқылы жасаңыз.
cp $VKCLOUD_KUBECONFIG $SA_KUBECONFIG -
(Опционалды) kubeconfig құрылымымен танысыңыз:
kubectl --kubeconfig $SA_KUBECONFIG config viewKubeconfig мазмұны ықшамдалған түрде шығарылады: кейбір өрістердің мәндері түсіріліп қалады.
Kubeconfig кластермен жұмыс істеуге қажетті барлық параметрлерді қамтиды:
-
clusters: кластерлердің және оларға қосылу деректерінің тізімі.Cloud Containers кластеріне арналған kubeconfig жалғыз кластер туралы жазбаны қамтиды.
-
users: пайдаланушылардың және олардың кластердегі аутентификация деректерінің тізімі.Cloud Containers кластеріне арналған kubeconfig
keystone-authкөмегімен аутентификацияланатын жалғыз пайдаланушы туралы жазбаны қамтиды. -
contexts:kubectlжұмыс істейтін контекст. Ең қарапайым жағдайда контекст — бұл кластер атауы мен пайдаланушы атының комбинациясы.Cloud Containers кластеріне арналған kubeconfig жалғыз контекст туралы жазбаны қамтиды. Бұл контекст kubeconfig ішінде бұрыннан анықталған кластер мен пайдаланушы жазбаларын пайдаланады.
kubectlкөрсетілген контекстте жұмыс істегенде, контексте берілген кластермен көрсетілген пайдаланушы атынан жұмыс істейді. -
-
Service account үшін kubeconfig мазмұнын бұл файлда бұрын бапталған service account-пен байланысты параметрлер болатындай етіп өзгертіңіз:
-
Бар пайдаланушыны жойыңыз.
Бұл пайдаланушы VK Cloud пайдаланушысына сәйкес келеді және автоматтандырылған құралдар пайдаланатын kubeconfig ішінде болмауы керек.
-
Пайдаланушылар тізімін алыңыз:
Linux (bash)/macOS (zsh)Windows (PowerShell)kubectl --kubeconfig $SA_KUBECONFIG \config get-users -
Тізімнен қажетті атауды пайдаланып, пайдаланушыны жойыңыз:
Linux (bash)/macOS (zsh)Windows (PowerShell)kubectl --kubeconfig $SA_KUBECONFIG \config delete-user <пайдаланушы аты>Команда шығысының ішінара мысалы:
deleted user kubernetes-cluster-1234 from ...sa_kubeconfig.yaml
-
-
example-saжаңа пайдаланушысын қосыңыз.Бұл пайдаланушы бұрын жасалған service account-қа сәйкес келеді. Аутентификация үшін бұрын алынған токен пайдаланылады.
Linux (bash)/macOS (zsh)Windows (PowerShell)kubectl --kubeconfig $SA_KUBECONFIG \config set-credentials example-sa --token="<токен мәні>"Команда шығысының мысалы:
User "example-sa" set. -
Ағымдағы контекстті қосылған пайдаланушыны пайдалану үшін баптаңыз:
Linux (bash)/macOS (zsh)Windows (PowerShell)kubectl --kubeconfig $SA_KUBECONFIG \config set-context --current --user="example-sa"Шығыс мысалы:
Context "default/kubernetes-cluster-1234" modified.
-
-
(Опционалды) Service account үшін жаңартылған kubeconfig мазмұнын тексеріңіз:
kubectl --kubeconfig $SA_KUBECONFIG config viewБұл kubeconfig ішінде бұрын қосылған
example-saпайдаланушысынан басқа пайдаланушылар болмауы керек. Жалғыз контекст осы пайдаланушыны пайдалануы керек.
Кластер және оның ресурстары туралы ақпарат алу үшін, мысалы, kubectl командаларын және бұрын жасалған service account үшін kubeconfig файлын пайдаланыңыз:
-
Кластер туралы ақпарат алыңыз:
kubectl --kubeconfig $SA_KUBECONFIG cluster-info -
defaultаттар кеңістігіндегі негізгі ресурстар тізімін алыңыз:kubectl --kubeconfig $SA_KUBECONFIG get all -n default
Егер командаларды орындау кезінде пароль сұралмаса, онда алынған kubeconfig-ті Cloud Containers кластеріне қол жеткізу үшін автоматтандырылған құралдармен бірге пайдалануға болады.
Егер бұрын жасалған токен немесе оны қамтитын kubeconfig әшкереленсе, кластерге рұқсатсыз қолжетімділікті болдырмау үшін токенді кері қайтарып алыңыз.
Ол үшін токенді сақтау үшін пайдаланылатын secret-ті жойыңыз:
kubectl --kubeconfig $VKCLOUD_KUBECONFIG delete secret example-token -n kube-system
Жұмыс істеп тұрған кластер тарификацияланады және есептеу ресурстарын тұтынады. Егер kubeconfig жұмысын тексеру үшін жасалған Kubernetes ресурстары енді қажет болмаса, оларды жойыңыз:
-
example-bindingресурсын,example-tokensecret-ін жәнеexample-saservice account-ын жойыңыз:Linux (bash)/macOS (zsh)Windows (PowerShell)kubectl --kubeconfig $VKCLOUD_KUBECONFIG \delete clusterrolebinding example-bindingkubectl --kubeconfig $VKCLOUD_KUBECONFIG \delete secret example-token -n kube-systemkubectl --kubeconfig $VKCLOUD_KUBECONFIG \delete serviceaccount example-sa -n kube-system -
Тоқтатыңыз жасалған кластерді, оны кейінірек пайдалану үшін, немесе жойыңыз оны біржола.