Как добавить пользователей в Kubernetes (kubectl)?

Я создал кластер Kubernetes на AWS с помощью Копс и может успешно управлять им через kubectl С моей локальной машины.

Я могу просмотреть текущую конфигурацию с помощью kubectl config view а также прямой доступ к сохраненному состоянию в ~/.kube/config, например:

apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: REDACTED
    server: https://api.{CLUSTER_NAME}
  name: {CLUSTER_NAME}
contexts:
- context:
    cluster: {CLUSTER_NAME}
    user: {CLUSTER_NAME}
  name: {CLUSTER_NAME}
current-context: {CLUSTER_NAME}
kind: Config
preferences: {}
users:
- name: {CLUSTER_NAME}
  user:
    client-certificate-data: REDACTED
    client-key-data: REDACTED
    password: REDACTED
    username: admin
- name: {CLUSTER_NAME}-basic-auth
  user:
    password: REDACTED
    username: admin

мне нужно разрешить другим пользователям также администрировать. Это руководство пользователя описывает, как определить их на другой машине пользователей, но не описывает, как фактически создать пользователя учетные данные в самом кластере. Как ты это делаешь?

кроме того, безопасно ли просто делиться cluster.certificate-authority-data?

3 ответов


для полного обзора аутентификации обратитесь к официальным документам Kubernetes на проверка подлинности и авторизация

для пользователей в идеале используется поставщик удостоверений для Kubernetes (OpenID Connect).

если вы находитесь на GKE / ACS, вы интегрируетесь с соответствующими фреймворками управления идентификацией и доступом

если вы самостоятельно принимаете kubernetes (что имеет место, когда вы используете kops), вы можете использовать coreos / dex для интеграции с поставщиками удостоверений LDAP / OAuth2-хорошей ссылкой является эта подробная 2 часть SSO для Kubernetes статьи.

для Dex есть несколько клиентов cli с открытым исходным кодом следующим образом:

если вы ищете быстрый и простой (но не самый безопасный и простой в управлении в долгосрочной перспективе) способ начать работу, вы можете злоупотреблять serviceaccounts - С 2 вариантами специализированных политик для управления доступом. (см. ниже)

Примечание, так как 1.6 роли на основе контроля доступа настоятельно рекомендуется! этот ответ не охватывает настройку RBAC

редактировать: Большой справочник по Об о настройка пользователя с помощью RBAC также доступна.

шаги для включения доступа к учетной записи службы (в зависимости от конфигурации кластера включает политики RBAC или ABAC, эти учетные записи могут иметь полные права администратора!):

редактировать: вот сценарий bash для автоматизации создания учетной записи службы-см. ниже шаги

  1. создать учетную запись службы для

    kubectl create sa alice
    
  2. получить связанный секрет

    secret=$(kubectl get sa alice -o json | jq -r .secrets[].name)
    
  3. Get ca.crt из secret (с помощью OSX base64 С -D флаг decode)

    kubectl get secret $secret -o json | jq -r '.data["ca.crt"]' | base64 -D > ca.crt
    
  4. получить маркер учетной записи службы от secret

    user_token=$(kubectl get secret $secret -o json | jq -r '.data["token"]' | base64 -D)
    
  5. получить информацию из конфигурации kubectl (текущий контекст, сервер..)

    # get current context
    c=`kubectl config current-context`
    
    # get cluster name of context
    name=`kubectl config get-contexts $c | awk '{print }' | tail -n 1`
    
    # get endpoint of current context 
    endpoint=`kubectl config view -o jsonpath="{.clusters[?(@.name == \"$name\")].cluster.server}"`
    
  6. на новой машине выполните следующие действия (учитывая ca.cert и $endpoint информация, полученная выше:

    1. установить kubectl

      brew install kubectl
      
    2. установить кластер (запустить в каталоге где ca.crt хранится)

      kubectl config set-cluster cluster-staging \
        --embed-certs=true \
        --server=$endpoint \
        --certificate-authority=./ca.crt
      
    3. задать учетные данные пользователя

      kubectl config set-credentials alice-staging --token=$user_token
      
    4. определите комбинацию пользователя alice с промежуточным кластером

      kubectl config set-context alice-staging \
        --cluster=cluster-staging \
        --user=alice-staging \
        --namespace=alice
      
    5. переключить текущий контекст на alice-staging для

      kubectl config use-context alice-staging
      

управление доступом пользователей с помощью политик (используя ДКС), вам нужно создать policy (например):

{
  "apiVersion": "abac.authorization.kubernetes.io/v1beta1",
  "kind": "Policy",
  "spec": {
    "user": "system:serviceaccount:default:alice",
    "namespace": "default",
    "resource": "*",
    "readonly": true
  }
}

положение это policy.json на каждом главном узле и добавить --authorization-mode=ABAC --authorization-policy-file=/path/to/policy.json флаги для серверов API

это позволит Алисе (через ее учетную запись службы) читать только права на все ресурсы только в пространстве имен по умолчанию.


вы говорите :

Мне нужно разрешить другим пользователям также администрировать.

а по документация

предполагается, что обычные пользователи управляются внешней независимой службой. Администратор, распространяющий закрытые ключи, пользовательское хранилище вроде Keystone или Google аккаунтов, даже файл со списком имен пользователей и паролей. В связи с этим Kubernetes не имеет объектов, представляющих обычного пользователя счета. Обычные пользователи не могут быть добавлены в кластер через вызов API.

для этого необходимо использовать сторонний инструмент.

= = Edit ==

одним из решений может быть ручное создание записи Пользователя в файл kubeconfig. От документация :

# create kubeconfig entry
$ kubectl config set-cluster $CLUSTER_NICK \
    --server=https://1.1.1.1 \
    --certificate-authority=/path/to/apiserver/ca_file \
    --embed-certs=true \
    # Or if tls not needed, replace --certificate-authority and --embed-certs with
    --insecure-skip-tls-verify=true \
    --kubeconfig=/path/to/standalone/.kube/config

# create user entry
$ kubectl config set-credentials $USER_NICK \
    # bearer token credentials, generated on kube master
    --token=$token \
    # use either username|password or token, not both
    --username=$username \
    --password=$password \
    --client-certificate=/path/to/crt_file \
    --client-key=/path/to/key_file \
    --embed-certs=true \
    --kubeconfig=/path/to/standalone/.kube/config

# create context entry
$ kubectl config set-context $CONTEXT_NAME \
    --cluster=$CLUSTER_NICK \
    --user=$USER_NICK \
    --kubeconfig=/path/to/standalone/.kube/config

bitnami руководство работает для меня, даже если вы используете minikube. Самое главное, что кластер поддерживает RBAC. https://docs.bitnami.com/kubernetes/how-to/configure-rbac-in-your-kubernetes-cluster/