nodeselector - kubernetes describe pod
¿Cómo agregar usuarios a Kubernetes(kubectl)? (3)
Creé un clúster de Kubernetes en AWS con
kops
y puedo administrarlo con éxito a través de
kubectl
desde mi máquina local.
Puedo ver la configuración actual con la
kubectl config view
, así como acceder directamente al estado almacenado en
~/.kube/config
, como:
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
Necesito permitir que otros usuarios también administren. Esta guía del usuario describe cómo definirlos en la máquina de otro usuario, pero no describe cómo crear realmente las credenciales del usuario dentro del clúster. ¿Cómo haces esto?
Además, ¿es seguro simplemente compartir el
cluster.certificate-authority-data
?
La guía bitnami funciona para mí, incluso si usas minikube. Lo más importante es que su clúster admite RBAC. https://docs.bitnami.com/kubernetes/how-to/configure-rbac-in-your-kubernetes-cluster/
Para obtener una descripción general completa de la autenticación, consulte los documentos oficiales de Kubernetes sobre Authentication y Authorization
Para los usuarios, lo ideal es utilizar un proveedor de identidad para Kubernetes (OpenID Connect).
Si está en GKE / ACS, se integra con los respectivos marcos de gestión de identidad y acceso
Si autohospeda kubernetes (que es el caso cuando usa kops), puede usar coreos/dex para integrarse con proveedores de identidad LDAP / OAuth2; una buena referencia es este detallado SSO de 2 partes para el artículo de Kubernetes .
kops (1.10+) ahora tiene soporte de autenticación incorporado que facilita la integración con AWS IAM como proveedor de identidad si está en AWS.
para Dex hay algunos clientes cli de código abierto de la siguiente manera:
Si está buscando una manera rápida y fácil de comenzar (no la más segura y fácil de administrar a largo plazo), puede abusar de las
serviceaccounts
, con 2 opciones de Políticas especializadas para controlar el acceso.
(vea abajo)
¡NOTA ya que se recomienda el control de acceso basado en roles 1.6! esta respuesta no cubre la configuración de RBAC
EDITAR : También está disponible una gran guía de Bitnami sobre la configuración del usuario con RBAC .
Los pasos para habilitar el acceso a la cuenta de servicio son (dependiendo de si la configuración de su clúster incluye políticas RBAC o ABAC, estas cuentas pueden tener derechos de administrador completos):
-
Crear cuenta de servicio para el usuario
Alice
kubectl create sa alice
-
Obtener secreto relacionado
secret=$(kubectl get sa alice -o json | jq -r .secrets[].name)
-
Obtenga
ca.crt
del secreto (usando OSXbase64
con el indicador-D
para la decodificación)kubectl get secret $secret -o json | jq -r ''.data["ca.crt"]'' | base64 -D > ca.crt
-
Obtener token de cuenta de servicio de secreto
user_token=$(kubectl get secret $secret -o json | jq -r ''.data["token"]'' | base64 -D)
-
Obtenga información de su configuración de kubectl (current-context, server ..)
# get current context c=`kubectl config current-context` # get cluster name of context name=`kubectl config get-contexts $c | awk ''{print $3}'' | tail -n 1` # get endpoint of current context endpoint=`kubectl config view -o jsonpath="{.clusters[?(@.name == /"$name/")].cluster.server}"`
-
En una máquina nueva, siga estos pasos (dada la información de
ca.cert
y$endpoint
recuperada anteriormente:-
Instalar
kubectl
brew install kubectl
-
Establecer clúster (ejecutar en el directorio donde se almacena
ca.crt
)kubectl config set-cluster cluster-staging / --embed-certs=true / --server=$endpoint / --certificate-authority=./ca.crt
-
Establecer credenciales de usuario
kubectl config set-credentials alice-staging --token=$user_token
-
Defina la combinación de alice user con el clúster de etapas
kubectl config set-context alice-staging / --cluster=cluster-staging / --user=alice-staging / --namespace=alice
-
Cambie el contexto actual a
alice-staging
para el usuariokubectl config use-context alice-staging
-
Para controlar el acceso de los usuarios con políticas (mediante ABAC ), debe crear un archivo de Authentication (por ejemplo):
{
"apiVersion": "abac.authorization.kubernetes.io/v1beta1",
"kind": "Policy",
"spec": {
"user": "system:serviceaccount:default:alice",
"namespace": "default",
"resource": "*",
"readonly": true
}
}
Aprovisione este
policy.json
en cada nodo maestro y agregue
--authorization-mode=ABAC --authorization-policy-file=/path/to/policy.json
flags a los servidores API
Esto permitiría a Alice (a través de su cuenta de servicio) derechos de solo lectura para todos los recursos en el espacio de nombres predeterminado solamente.
Tu dices :
Necesito permitir que otros usuarios también administren.
Pero de acuerdo con la documentation
Se supone que los usuarios normales son administrados por un servicio externo e independiente. Un administrador que distribuye claves privadas, una tienda de usuarios como Keystone o Cuentas de Google, incluso un archivo con una lista de nombres de usuario y contraseñas. A este respecto, Kubernetes no tiene objetos que representen cuentas de usuario normales. Los usuarios normales no se pueden agregar a un clúster a través de una llamada API.
Tienes que usar una herramienta de terceros para esto.
== Editar ==
Una solución podría ser crear manualmente una entrada de usuario en el archivo kubeconfig . De la documentación :
# 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