 c325161a57
			
		
	
	c325161a57
	
	
	
		
			
			Create sections Create Cephfs Volume Snapshot Class and Create RBD Volume Snapshot Class Update helm-override-show outputs Fix conflict Closes-bug: 2055207 Change-Id: I203643805d26871fc6de1671d57e72ee2179b545 Signed-off-by: Elisamara Aoki Goncalves <elisamaraaoki.goncalves@windriver.com>
		
			
				
	
	
		
			291 lines
		
	
	
		
			9.3 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
			
		
		
	
	
			291 lines
		
	
	
		
			9.3 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
| 
 | |
| .. vbz1578928340182
 | |
| .. _private-namespace-and-restricted-rbac:
 | |
| 
 | |
| =====================================
 | |
| Private Namespace and Restricted RBAC
 | |
| =====================================
 | |
| 
 | |
| A non-admin type user typically does **not** have permissions for any
 | |
| cluster-scoped resources and only has read and/or write permissions to
 | |
| resources in one or more namespaces.
 | |
| 
 | |
| .. rubric:: |context|
 | |
| 
 | |
| .. note::
 | |
|     All of the |RBAC| resources for managing non-admin type users, although
 | |
|     they may apply to private namespaces, are created in **kube-system**
 | |
|     such that only admin level users can manager non-admin type users,
 | |
|     roles, and rolebindings.
 | |
| 
 | |
| The following example creates a non-admin service account called dave-user
 | |
| with read/write type access to a single private namespace
 | |
| \(**billing-dept-ns**).
 | |
| 
 | |
| .. note::
 | |
|     The following example creates and uses ServiceAccounts as the user
 | |
|     mechanism and subject for the rolebindings, however the procedure
 | |
|     equally applies to user accounts defined in an external Windows Active
 | |
|     Directory as the subject of the rolebindings.
 | |
| 
 | |
| .. rubric:: |proc|
 | |
| 
 | |
| #.  If it does not already exist, create a general user role defining
 | |
|     restricted permissions for general users.
 | |
| 
 | |
|     This is of the type **ClusterRole** so that it can be used in the
 | |
|     context of any namespace when binding to a user.
 | |
| 
 | |
| 
 | |
|     #.  Create the user role definition file.
 | |
| 
 | |
|         .. code-block:: none
 | |
| 
 | |
|             % cat <<EOF > general-user-clusterrole.yaml
 | |
|             apiVersion: rbac.authorization.k8s.io/v1
 | |
|             kind: ClusterRole
 | |
|             metadata:
 | |
|               # "namespace" omitted since ClusterRoles are not namespaced
 | |
|               name: general-user
 | |
| 
 | |
|             rules:
 | |
| 
 | |
|             # For the core API group (""), allow full access to all resource types
 | |
|             # EXCEPT for resource policies (limitranges and resourcequotas) only allow read access
 | |
|             - apiGroups: [""]
 | |
|               resources: ["bindings", "configmaps", "endpoints", "events", "persistentvolumeclaims", "pods", "podtemplates", "replicationcontrollers", "secrets", "serviceaccounts", "services"]
 | |
|               verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
 | |
|             - apiGroups: [""]
 | |
|               resources: [ "limitranges", "resourcequotas" ]
 | |
|               verbs: ["get", "list"]
 | |
| 
 | |
|             # Allow full access to all resource types of the following explicit list of apiGroups.
 | |
|             # Notable exceptions here are:
 | |
|             #     ApiGroup                      ResourceTypes
 | |
|             #     -------                       -------------
 | |
|             #     policy                        podsecuritypolicies, poddisruptionbudgets
 | |
|             #     networking.k8s.io             networkpolicies
 | |
|             #     admissionregistration.k8s.io  mutatingwebhookconfigurations, validatingwebhookconfigurations
 | |
|             #
 | |
|             - apiGroups: ["apps", "batch", "extensions", "autoscaling", "apiextensions.k8s.io", "rbac.authorization.k8s.io"]
 | |
|               resources: ["*"]
 | |
|               verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
 | |
| 
 | |
|             # Cert Manager API access
 | |
|             - apiGroups: ["cert-manager.io", "acme.cert-manager.io"]
 | |
|               resources: ["*"]
 | |
|               verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
 | |
| 
 | |
|             EOF
 | |
| 
 | |
|     #.  Apply the definition.
 | |
| 
 | |
|         .. code-block:: none
 | |
| 
 | |
|             ~(keystone_admin)$ kubectl apply -f general-user-cluster-role.yaml
 | |
| 
 | |
| 
 | |
| #.  Create the **billing-dept-ns** namespace, if it does not already exist.
 | |
| 
 | |
|     .. code-block:: none
 | |
| 
 | |
|         ~(keystone_admin)$ kubectl create namespace billing-dept-ns
 | |
| 
 | |
| #.  Create both the **dave-user** service account and the namespace-scoped
 | |
|     RoleBinding.
 | |
| 
 | |
|     The RoleBinding binds the **general-user** role to the **dave-user**
 | |
|     ServiceAccount for the **billing-dept-ns** namespace.
 | |
| 
 | |
| 
 | |
|     #.  Create the account definition file.
 | |
| 
 | |
|         .. code-block:: none
 | |
| 
 | |
|             % cat <<EOF > dave-user.yaml
 | |
|             apiVersion: v1
 | |
|             kind: ServiceAccount
 | |
|             metadata:
 | |
|               name: dave-user
 | |
|               namespace: kube-system
 | |
|             ---
 | |
|             apiVersion: v1
 | |
|             kind: Secret
 | |
|             type: kubernetes.io/service-account-token
 | |
|             metadata:
 | |
|               name: dave-user-sa-token
 | |
|               namespace: kube-system
 | |
|               annotations:
 | |
|                 kubernetes.io/service-account.name: dave-user
 | |
|             ---
 | |
|             apiVersion: rbac.authorization.k8s.io/v1
 | |
|             kind: RoleBinding
 | |
|             metadata:
 | |
|               name: dave-user
 | |
|               namespace: billing-dept-ns
 | |
|             roleRef:
 | |
|               apiGroup: rbac.authorization.k8s.io
 | |
|               kind: ClusterRole
 | |
|               name: general-user
 | |
|             subjects:
 | |
|             - kind: ServiceAccount
 | |
|               name: dave-user
 | |
|               namespace: kube-system
 | |
|             EOF
 | |
| 
 | |
|     #.  Apply the definition.
 | |
| 
 | |
|         .. code-block:: none
 | |
| 
 | |
|             % kubectl apply -f dave-user.yaml
 | |
| 
 | |
| 
 | |
| #.  If the user requires use of the local docker registry, create an
 | |
|     openstack user account for authenticating with the local docker registry.
 | |
| 
 | |
| 
 | |
|     #.  If a project does not already exist for this user, create one.
 | |
| 
 | |
|         .. code-block:: none
 | |
| 
 | |
|             % openstack project create billing-dept-ns
 | |
| 
 | |
|     #.  Create an openstack user in this project.
 | |
| 
 | |
|         .. code-block:: none
 | |
| 
 | |
|             % openstack user create --password P@ssw0rd \
 | |
|             --project billing-dept-ns dave-user
 | |
| 
 | |
|         .. note::
 | |
|             Substitute a password conforming to your password formatting
 | |
|             rules for P@ssw0rd.
 | |
| 
 | |
|     #.  Create a secret containing these userid/password credentials for use
 | |
|         as an ImagePullSecret
 | |
| 
 | |
|         .. code-block:: none
 | |
| 
 | |
|             % kubectl create secret docker-registry registry-local-dave-user --docker-server=registry.local:9001 --docker-username=dave-user  --docker-password=P@ssw0rd --docker-email=noreply@windriver.com -n billing-dept-ns
 | |
| 
 | |
| 
 | |
|     dave-user can now push images to registry.local:9001/dave-user/ and use
 | |
|     these images for pods by adding the secret above as an ImagePullSecret
 | |
|     in the pod spec.
 | |
| 
 | |
| #.  If the user requires the ability to create persistentVolumeClaims in his
 | |
|     namespace, then execute the following commands to enable the rbd-provisioner
 | |
|     in the user's namespace.
 | |
| 
 | |
| 
 | |
|     #.  Create an RBD namespaces configuration file.
 | |
| 
 | |
|         .. code-block:: none
 | |
| 
 | |
|             % cat <<EOF > rbd-namespaces.yaml
 | |
|             storageClasses:
 | |
|             - additionalNamespaces: [default, kube-public, billing-dept-ns]
 | |
|               chunk_size: 64
 | |
|               crush_rule_name: storage_tier_ruleset
 | |
|               name: general
 | |
|               pool_name: kube-rbdkube-system
 | |
|               replication: 1
 | |
|               userId: ceph-pool-kube-rbd
 | |
|               userSecretName: ceph-pool-kube-rbd
 | |
|             EOF
 | |
| 
 | |
|     #.  Update the helm overrides.
 | |
| 
 | |
|         .. code-block:: none
 | |
| 
 | |
|             ~(keystone_admin)$ system helm-override-update --reuse-values --values rbd-namespaces.yaml \
 | |
|             platform-integ-apps rbd-provisioner kube-system
 | |
| 
 | |
|     #.  Apply the application.
 | |
| 
 | |
|         .. code-block:: none
 | |
| 
 | |
|             ~(keystone_admin)$ system application-apply platform-integ-apps
 | |
| 
 | |
|     #.  Monitor the system for the application-apply to finish
 | |
| 
 | |
|         .. code-block:: none
 | |
| 
 | |
|             ~(keystone_admin)$ system application-list
 | |
| 
 | |
|     #.  Apply the secret to the new rbd-provisioner namespace.
 | |
| 
 | |
|         .. code-block:: none
 | |
| 
 | |
|             ~(keystone_admin)$ kubectl get secret ceph-pool-kube-rbd -n default -o yaml | grep -v '^\s*namespace:\s' | kubectl apply -n <namespace> -f -
 | |
| 
 | |
| 
 | |
| #.  If this user requires the ability to use helm, do the following.
 | |
| 
 | |
| 
 | |
|     #.  Create a ClusterRole for reading namespaces, if one does not already exist.
 | |
| 
 | |
|         .. code-block:: none
 | |
| 
 | |
|             % cat <<EOF > namespace-reader-clusterrole.yaml
 | |
|             apiVersion: rbac.authorization.k8s.io/v1
 | |
|             kind: ClusterRole
 | |
|             metadata:
 | |
|               name: namespace-reader
 | |
|             rules:
 | |
|             - apiGroups: [""]
 | |
|               resources: ["namespaces"]
 | |
|               verbs: ["get", "watch", "list"]
 | |
|             EOF
 | |
| 
 | |
|         Apply the configuration.
 | |
| 
 | |
|         .. code-block:: none
 | |
| 
 | |
|             % kubectl apply -f namespace-reader-clusterrole.yaml
 | |
| 
 | |
|     #.  Create a RoleBinding for the tiller account of the user's namespace.
 | |
| 
 | |
|         .. note::
 | |
| 
 | |
|             .. xbooklink
 | |
| 
 | |
|             The tiller account of the user's namespace **must** be named
 | |
|             'tiller'.
 | |
| 
 | |
|         .. code-block:: none
 | |
| 
 | |
|             % cat <<EOF > read-namespaces-billing-dept-ns-tiller.yaml
 | |
|             apiVersion: rbac.authorization.k8s.io/v1
 | |
|             kind: ClusterRoleBinding
 | |
|             metadata:
 | |
|               name: read-namespaces-billing-dept-ns-tiller
 | |
|             subjects:
 | |
|             - kind: ServiceAccount
 | |
|               name: tiller
 | |
|               namespace: billing-dept-ns
 | |
|             roleRef:
 | |
|               kind: ClusterRole
 | |
|               name: namespace-reader
 | |
|               apiGroup: rbac.authorization.k8s.io
 | |
|             EOF
 | |
| 
 | |
|         Apply the configuration.
 | |
| 
 | |
|         .. code-block:: none
 | |
| 
 | |
|             % kubectl apply -f read-namespaces-billing-dept-ns-tiller.yaml
 | |
| 
 | |
| 
 | |
| 
 | |
| ..
 | |
|   .. rubric:: |postreq|
 | |
| 
 | |
| .. xbooklink
 | |
| 
 | |
|    See |sysconf-doc|: :ref:`Configure Remote CLI Access
 | |
|     <configure-remote-cli-access>` for details on how to setup remote CLI
 | |
|     access using tools such as :command:`kubectl` and :command:`helm` for a
 | |
|     service account such as this.
 | |
| 
 |