Configuración de múltiples usuarios
SUSE® Rancher Prime Continuous Delivery utiliza Kubernetes RBAC donde sea posible.
Una adición sobre RBAC es el recurso GitRepoRestriction, que se puede utilizar para controlar los recursos de GitRepo en un espacio de nombres.
Una configuración de Fleet multiusuario se ve así:
-
Los inquilinos no comparten espacios de nombres, cada inquilino tiene uno o más espacios de nombres en el clúster de sentido ascendente, donde pueden crear recursos de GitRepo.
-
Los inquilinos no pueden desplegar recursos a nivel de clúster y están limitados a un conjunto de espacios de nombres en clústeres de sentido descendente.
-
los clústeres están en un espacio de nombres separado
|
información importante
El aislamiento de los inquilinos no es completo y depende de que Kubernetes RBAC esté configurado correctamente. Sin la configuración manual de un operador, los inquilinos aún pueden desplegar recursos a nivel de clúster. Incluso con las restricciones SUSE® Rancher Prime Continuous Delivery disponibles, los usuarios están restringidos a espacios de nombres, pero estos no proporcionan mucho aislamiento por sí mismos. Por ejemplo, aún pueden consumir tantos recursos como deseen. Sin embargo, las restricciones SUSE® Rancher Prime Continuous Delivery existentes permiten a los usuarios compartir clústeres y desplegar recursos sin conflictos. |
Ejemplo SUSE® Rancher Prime Continuous Delivery Autónomo
Esto crearía un usuario 'fleetuser', que solo puede gestionar recursos de GitRepo en el espacio de nombres 'project1'.
kubectl create serviceaccount fleetuser
kubectl create namespace project1
kubectl create -n project1 role fleetuser --verb=get --verb=list --verb=create --verb=delete --resource=gitrepos.fleet.cattle.io
kubectl create -n project1 rolebinding fleetuser --serviceaccount=default:fleetuser --role=fleetuser
Si queremos dar acceso a múltiples espacios de nombres, podemos usar un único rol de clúster con dos vinculaciones de rol:
kubectl create clusterrole fleetuser --verb=get --verb=list --verb=create --verb=delete --resource=gitrepos.fleet.cattle.io
kubectl create -n project1 rolebinding fleetuser --serviceaccount=default:fleetuser --clusterrole=fleetuser
kubectl create -n project2 rolebinding fleetuser --serviceaccount=default:fleetuser --clusterrole=fleetuser
Esto asegura que los inquilinos no pueden interferir con los recursos de GitRepo de otros inquilinos, ya que no tienen acceso a sus espacios de nombres.
Espacios de trabajo aislados en Rancher
Los usuarios que pertenecen a un grupo/organización específica dentro de la empresa pueden querer desactivar la visibilidad de sus clústeres para los usuarios de otros grupos/organizaciones de la misma empresa.
Para lograr este aislamiento, Rancher proporciona GlobalRoles para permitir permisos a los usuarios sobre ciertos recursos de Kubernetes. GlobalRoles tienen la capacidad de limitar el acceso a espacios de nombres específicos presentes en el clúster, gracias a NamespacedRules.
Cuando se crea un nuevo espacio de trabajo de Fleet, se genera automáticamente un espacio de nombres correspondiente con un nombre idéntico dentro del clúster local de Rancher. Para que un usuario vea y despliegue recursos de Fleet en un espacio de trabajo específico, necesita al menos los siguientes permisos:
-
listar/obtener el recurso
fleetworkspacea nivel de clúster en el clúster local. -
Permisos para crear recursos de Fleet (como
bundles,gitrepos, …) en el espacio de nombres de respaldo para el espacio de trabajo en el clúster local.
Concedamos permisos para desplegar recursos de Fleet en los espacios de trabajo de Fleet project1 y project2:
apiVersion: management.cattle.io/v3
kind: FleetWorkspace
metadata:
name: project1
apiVersion: management.cattle.io/v3
kind: FleetWorkspace
metadata:
name: project2
-
Crea un
GlobalRoleque otorgue permiso para desplegar recursos de Fleet en los espacios de trabajo de Fleetproject1yproject2:
apiVersion: management.cattle.io/v3
kind: GlobalRole
metadata:
name: fleet-projects1and2
namespacedRules:
project1:
- apiGroups:
- fleet.cattle.io
resources:
- gitrepos
- bundles
- clusterregistrationtokens
- gitreporestrictions
- clusters
- clustergroups
verbs:
- '*'
project2:
- apiGroups:
- fleet.cattle.io
resources:
- gitrepos
- bundles
- clusterregistrationtokens
- gitreporestrictions
- clusters
- clustergroups
verbs:
- '*'
rules:
- apiGroups:
- management.cattle.io
resourceNames:
- project1
- project2
resources:
- fleetworkspaces
verbs:
- '*'
El usuario ahora tiene acceso a la pestaña Continuous Delivery en Rancher y puede desplegar recursos tanto en los espacios de trabajo de Fleet project1 como en los de Fleet project2.
Para tener un entorno bien organizado, cada espacio de trabajo debe tener su propio GlobalRole relacionado para ayudar con la separación de funciones y el aislamiento requerido por el cliente. De esta manera, cada usuario puede ser asignado a uno o más GlobalRoles, dependiendo de las necesidades.
Permitir acceso a clústeres.
Esto asume que todos los GitRepos creados por 'fleetuser' tienen la etiqueta team: one. Se podrían usar diferentes etiquetas para seleccionar diferentes espacios de nombres de clúster.
En cada uno de los espacios de nombres del usuario, como administrador crea un BundleNamespaceMapping.
kind: BundleNamespaceMapping
apiVersion: fleet.cattle.io/v1alpha1
metadata:
name: mapping
namespace: project1
# Bundles to match by label.
# The labels are defined in the fleet.yaml # labels field or from the
# GitRepo metadata.labels field
bundleSelector:
matchLabels:
team: one
# or target one repo
#fleet.cattle.io/repo-name: simpleapp
# Namespaces, containing clusters, to match by label
namespaceSelector:
matchLabels:
kubernetes.io/metadata.name: fleet-default
# the label is on the namespace
#workspace: prod
La target sección en el recurso GitRepo se puede usar para desplegar solo a un subconjunto de los clústeres coincidentes.
Restringir el acceso a clústeres de sentido descendente.
Los administradores pueden restringir aún más a los inquilinos creando un GitRepoRestriction en cada uno de sus espacios de nombres.
kind: GitRepoRestriction apiVersion: fleet.cattle.io/v1alpha1 metadata: name: restriction namespace: project1 allowedTargetNamespaces: - project1simpleapp
Esto negará la creación de recursos a nivel de clúster, lo que puede interferir con otros inquilinos y limitar el despliegue al espacio de nombres 'project1simpleapp'.
Un recurso GitRepo de ejemplo
Un recurso GitRepo creado por un inquilino, sin acceso de administrador, podría verse así:
kind: GitRepo
apiVersion: fleet.cattle.io/v1alpha1
metadata:
name: simpleapp
namespace: project1
labels:
team: one
spec:
repo: https://github.com/rancher/fleet-examples
paths:
- bundle-diffs
targetNamespace: project1simpleapp
# do not match the upstream/local cluster, won't work
targets:
- name: dev
clusterSelector:
matchLabels:
env: dev
Esto incluye la etiqueta team: one y el requerido targetNamespace.
Junto con el anterior BundleNamespaceMapping, se dirigiría a todos los clústeres con una etiqueta env: dev en el espacio de nombres 'fleet-default'.
|
|