Как добавить пользователей в 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 для автоматизации создания учетной записи службы-см. ниже шаги
-
создать учетную запись службы для
kubectl create sa alice
-
получить связанный секрет
secret=$(kubectl get sa alice -o json | jq -r .secrets[].name)
-
Get
ca.crt
из secret (с помощью OSXbase64
С-D
флаг decode)kubectl get secret $secret -o json | jq -r '.data["ca.crt"]' | base64 -D > ca.crt
-
получить маркер учетной записи службы от secret
user_token=$(kubectl get secret $secret -o json | jq -r '.data["token"]' | base64 -D)
-
получить информацию из конфигурации 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}"`
-
на новой машине выполните следующие действия (учитывая
ca.cert
и$endpoint
информация, полученная выше:-
установить
kubectl
brew install kubectl
-
установить кластер (запустить в каталоге где
ca.crt
хранится)kubectl config set-cluster cluster-staging \ --embed-certs=true \ --server=$endpoint \ --certificate-authority=./ca.crt
-
задать учетные данные пользователя
kubectl config set-credentials alice-staging --token=$user_token
-
определите комбинацию пользователя alice с промежуточным кластером
kubectl config set-context alice-staging \ --cluster=cluster-staging \ --user=alice-staging \ --namespace=alice
-
переключить текущий контекст на
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/