VK Cloud logo

Service account үшін kubeconfig файлын жасау

Cloud Containers кластеріне kubectl көмегімен қосылғанда кластер конфигурациясының файлы — kubeconfig пайдаланылады. Әдетте кластермен жұмыс істеу үшін бірыңғай кіру технологиясын пайдалануға бапталған VK Cloud жеке кабинетінен алынған kubeconfig қолданылады. Сондықтан kubectl құралымен жұмыс істегенде пайдаланушының паролін мезгіл-мезгіл енгізу керек болады.

Мұндай аутентификация процесі кластерге қолжетімділік қажет автоматтандырылған құралдармен жұмыс істегенде ыңғайсыз. Олармен жұмыс істеу үшін service account арналған kubeconfig файлын пайдаланған ыңғайлырақ. Бұл kubeconfig пароль енгізбей-ақ, өмір сүру мерзімі шексіз токен арқылы аутентификациялануға мүмкіндік береді.

Дайындық қадамдары

  1. Жасаңыз Kubernetes кластерін өзекті нұсқада, егер бұл әлі жасалмаған болса.

    Кластерді жасау кезінде Сыртқы IP тағайындау опциясын таңдаңыз. Кластердің қалған параметрлерін өз қалауыңызша таңдаңыз.

  2. kubectl көмегімен жасалған кластерге қосыла алатыныңызға көз жеткізіңіз.

    Бұл кезде VK Cloud жеке кабинетінен жүктелген kubeconfig пайдаланылады.

  3. kubeconfig-ке нұсқайтын орта айнымалыларын орнатыңыз:

    • VKCLOUD_KUBECONFIG: VK Cloud жеке кабинетінен жүктелген kubeconfig-ке жол.
    • SA_KUBECONFIG: service account үшін kubeconfig-ке жол (файлдың өзі кейінірек жасалады).

    Бұл kubectl құралымен әрі қарай жұмысты жеңілдетеді.

    export VKCLOUD_KUBECONFIG="/home/user/.kube/kubernetes-cluster-1234_kubeconfig.yaml"export SA_KUBECONFIG="/home/user/.kube/sa_kubeconfig.yaml"
  4. Кластерге қосылғаннан кейін қажетті 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 пайдаланушысының рөлін түзетіңіз.

    Рөлдік модель және қолжетімді рөлдер туралы толығырақ Қолжетімділікті басқару бөлімінен оқыңыз.

1. Service account жасаңыз және оны рөлмен байланыстырыңыз

  1. kube-system аттар кеңістігінде example-sa service account-ын жасаңыз:

    kubectl --kubeconfig $VKCLOUD_KUBECONFIG \  create serviceaccount example-sa -n kube-system

    Команда шығысының мысалы:

    serviceaccount/example-sa created
  2. Service account-қа тағайындау қажет кластерлік рөлді таңдаңыз.

    Барлық кластерлік рөлдердің тізімін егжей-тегжейлі сипаттамасымен алу үшін келесі команданы орындаңыз:

    kubectl --kubeconfig $VKCLOUD_KUBECONFIG describe clusterroles

    Рөлді таңдағанда кластермен жұмыс істеу қауіпсіздігін арттыру үшін ең аз артықшылықтар қағидатын ұстаныңыз. Рөлдік модель туралы толығырақ Kubernetes ресми құжаттамасында.

    Төменде мысал ретінде edit рөлі тағайындалады. Ол жеке кабинеттегі Оператор Kubernetes рөліне сәйкес келеді.

  3. Жасалған service account-ты таңдалған кластерлік рөлмен байланыстырыңыз. Ол үшін example-binding атауымен ClusterRoleBinding ресурсын жасаңыз.

    Service account тиесілі аттар кеңістігімен бірге көрсетілуі керек.

    kubectl --kubeconfig $VKCLOUD_KUBECONFIG \  create clusterrolebinding example-binding \    --serviceaccount=kube-system:example-sa \    --clusterrole=edit

    Команда шығысының мысалы:

    clusterrolebinding.rbac.authorization.k8s.io/example-binding created

2. Service account үшін токен алыңыз

  1. Service account үшін токені бар example-token құпиясын жасаңыз:

    1. Манифест файлын жасаңыз:

      Манифест өрістеріне түсіндірмелер:

      • 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-пен байланысады.
    2. Манифест файлын қолданыңыз:

      kubectl --kubeconfig $VKCLOUD_KUBECONFIG apply -f example-token.yaml

      Берілген параметрлері бар secret жасалады. Команда шығысының мысалы:

      secret/example-token created
  2. Жасалған secret-тен service account-қа токен тағайындалғанына көз жеткізіңіз:

    kubectl --kubeconfig $VKCLOUD_KUBECONFIG \  describe serviceaccount example-sa -n kube-system

    Шығыста Tokens өрісінде secret-ке сілтеме болуы керек.

  3. Токен мәнін алыңыз.

    Secret токенді кодталған түрде сақтайды (Base64 кодтау сызбасы). Оны kubeconfig ішінде пайдалану үшін токенді декодтау қажет:

    kubectl --kubeconfig $VKCLOUD_KUBECONFIG \  get secret example-token -n kube-system \  --template={{.data.token}} | base64 --decode

    Токеннің мәні шығарылады. Оны сақтап қойыңыз.

4. Service account үшін kubeconfig жасаңыз

  1. Бұл kubeconfig үшін негізді VK Cloud жеке кабинетінен жүктелген kubeconfig-ті көшіру арқылы жасаңыз.

    cp $VKCLOUD_KUBECONFIG $SA_KUBECONFIG
  2. (Опционалды) kubeconfig құрылымымен танысыңыз:

    kubectl --kubeconfig $SA_KUBECONFIG config view

    Kubeconfig мазмұны ықшамдалған түрде шығарылады: кейбір өрістердің мәндері түсіріліп қалады.

    Kubeconfig кластермен жұмыс істеуге қажетті барлық параметрлерді қамтиды:

    • clusters: кластерлердің және оларға қосылу деректерінің тізімі.

      Cloud Containers кластеріне арналған kubeconfig жалғыз кластер туралы жазбаны қамтиды.

    • users: пайдаланушылардың және олардың кластердегі аутентификация деректерінің тізімі.

      Cloud Containers кластеріне арналған kubeconfig keystone-auth көмегімен аутентификацияланатын жалғыз пайдаланушы туралы жазбаны қамтиды.

    • contexts: kubectl жұмыс істейтін контекст. Ең қарапайым жағдайда контекст — бұл кластер атауы мен пайдаланушы атының комбинациясы.

      Cloud Containers кластеріне арналған kubeconfig жалғыз контекст туралы жазбаны қамтиды. Бұл контекст kubeconfig ішінде бұрыннан анықталған кластер мен пайдаланушы жазбаларын пайдаланады.

    kubectl көрсетілген контекстте жұмыс істегенде, контексте берілген кластермен көрсетілген пайдаланушы атынан жұмыс істейді.

  3. Service account үшін kubeconfig мазмұнын бұл файлда бұрын бапталған service account-пен байланысты параметрлер болатындай етіп өзгертіңіз:

    1. Бар пайдаланушыны жойыңыз.

      Бұл пайдаланушы VK Cloud пайдаланушысына сәйкес келеді және автоматтандырылған құралдар пайдаланатын kubeconfig ішінде болмауы керек.

      1. Пайдаланушылар тізімін алыңыз:

        kubectl --kubeconfig $SA_KUBECONFIG \  config get-users
      2. Тізімнен қажетті атауды пайдаланып, пайдаланушыны жойыңыз:

        kubectl --kubeconfig $SA_KUBECONFIG \  config delete-user <пайдаланушы аты>

        Команда шығысының ішінара мысалы:

        deleted user kubernetes-cluster-1234 from ...sa_kubeconfig.yaml
    2. example-sa жаңа пайдаланушысын қосыңыз.

      Бұл пайдаланушы бұрын жасалған service account-қа сәйкес келеді. Аутентификация үшін бұрын алынған токен пайдаланылады.

      kubectl --kubeconfig $SA_KUBECONFIG \  config set-credentials example-sa --token="<токен мәні>"

      Команда шығысының мысалы:

      User "example-sa" set.
    3. Ағымдағы контекстті қосылған пайдаланушыны пайдалану үшін баптаңыз:

      kubectl --kubeconfig $SA_KUBECONFIG \  config set-context --current --user="example-sa"

      Шығыс мысалы:

      Context "default/kubernetes-cluster-1234" modified.
  4. (Опционалды) Service account үшін жаңартылған kubeconfig мазмұнын тексеріңіз:

    kubectl --kubeconfig $SA_KUBECONFIG config view

    Бұл kubeconfig ішінде бұрын қосылған example-sa пайдаланушысынан басқа пайдаланушылар болмауы керек. Жалғыз контекст осы пайдаланушыны пайдалануы керек.

5. Жасалған kubeconfig жұмысын тексеріңіз

Кластер және оның ресурстары туралы ақпарат алу үшін, мысалы, kubectl командаларын және бұрын жасалған service account үшін kubeconfig файлын пайдаланыңыз:

  1. Кластер туралы ақпарат алыңыз:

    kubectl --kubeconfig $SA_KUBECONFIG cluster-info
  2. 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 ресурстары енді қажет болмаса, оларды жойыңыз:

  1. example-binding ресурсын, example-token secret-ін және example-sa service account-ын жойыңыз:

    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
  2. Тоқтатыңыз жасалған кластерді, оны кейінірек пайдалану үшін, немесе жойыңыз оны біржола.