Как проверить подлинность и получить доступ к кластеру Kubernetes для конвейера devops? - PullRequest
0 голосов
/ 05 июня 2019

Обычно вы делаете ibmcloud loginibmcloud ks cluster-config mycluster ⇒ копируете и вставляете export KUBECONFIG=, а затем вы можете запускать свои команды kubectl.

Но если бы это было сделано для некоторых автоматизированных разработчиковКакой метод для аутентификации и получения доступа к кластеру используется за пределами IBM Cloud?

Ответы [ 3 ]

3 голосов
/ 05 июня 2019

Вы не должны копировать ваш kubeconfig в конвейер. Вместо этого вы можете создать учетную запись службы с разрешениями для определенного пространства имен, а затем использовать ее учетные данные для доступа к кластеру.

Я создаю учетную запись службы и привязку роли следующим образом:

apiVersion: v1
kind: ServiceAccount
metadata:
  name: gitlab-tez-dev # account name
  namespace: tez-dev #namespace

---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: tez-dev-full-access #role
  namespace: tez-dev
rules:
  - apiGroups: ["", "extensions", "apps"]
    resources: ["deployments", "replicasets", "pods", "services"] #resources to which permissions are granted
    verbs: ["*"] # what actions are allowed
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: tez-dev-view
  namespace: tez-dev
subjects:
  - kind: ServiceAccount
    name: gitlab-tez-dev
    namespace: tez-dev
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: tez-dev-full-access

Затем вы можете получить токен для служебной учетной записи, используя:

kubectl describe secrets -n <namespace> gitlab-tez-dev-token-<value>

Выход:

Name:         gitlab-tez-dev-token-lmlwj
Namespace:    tez-dev
Labels:       <none>
Annotations:  kubernetes.io/service-account.name: gitlab-tez-dev
              kubernetes.io/service-account.uid: 5f0dae02-7b9c-11e9-a222-0a92bd3a916a

Type:  kubernetes.io/service-account-token

Data
====
ca.crt:     1042 bytes
namespace:  7 bytes
token: <TOKEN>

В приведенной выше команде namespace - это пространство имен, в котором вы создали учетную запись, а value - это уникальное значение, которое вы увидите при выполнении

.
kubectl get secret -n <namespace>

Скопируйте токен в переменные или конфигурацию среды вашего конвейера, и вы сможете получить к нему доступ в конвейере. Например, в gitlab я делаю (только ту часть, которая здесь уместна):

k8s-deploy-stage:
  stage: deploy
  image: lwolf/kubectl_deployer:latest
  services:
    - docker:dind
  only:
    refs:
      - dev
  script:
     ######## CREATE THE KUBECFG ##########
    - kubectl config set-cluster ${K8S_CLUSTER_NAME} --server=${K8S_URL}
    - kubectl config set-credentials gitlab-tez-dev --token=${TOKEN}
    - kubectl config set-context tez-dev-context --cluster=${K8S_CLUSTER_NAME} --user=gitlab-tez-dev --namespace=tez-dev
    - kubectl config use-context tez-dev-context
    ####### NOW COMMANDS WILL BE EXECUTED AS THE SERVICE ACCOUNT #########
    - kubectl apply -f deployment.yml
    - kubectl apply -f service.yml
    - kubectl rollout status -f deployment.yml
0 голосов
/ 05 июня 2019

Если вы не хотите копировать токен в файл или хотите использовать API для автоматизации поиска токена, вы также можете выполнить некоторые команды POST для программного получения вашего пользовательского токена.

Полные документы для этого здесь: https://cloud.ibm.com/docs/containers?topic=containers-cs_cli_install#kube_api

Ключевой элемент - получение вашего идентификатора с помощью вызова POST https://iam.bluemix.net/identity/token.

Тело вернет id_token, что выможете использовать в своих вызовах API Kubernetes.

0 голосов
/ 05 июня 2019

Переменная среды KUBECONFIG - это список путей к файлам конфигурации Kubernetes, которые определяют один или несколько (переключаемых) контекстов для kubectl (https://kubernetes.io/docs/tasks/access-application-cluster/configure-access-multiple-clusters/).

)

Скопируйте файл конфигурации Kubernetes в агент конвейера (по умолчанию ~ / .kube / config) и при необходимости установите переменную среды KUBECONFIG. Если у вас есть разные контексты в вашем конфигурационном файле, вы можете удалить те, которые вам не нужны, в вашем конвейере перед копированием или переключить контексты с помощью kubectl config use-context.

Все, что вам нужно для подключения к вашему серверу kube api, находится внутри этой конфигурации, сертификатов, токенов и т. Д.

...