- Create one Profile per team or workspace (for example,
team1). - Members granted access to that Profile can operate within its workspace.
- You can assign different privileges per member (admin, edit, view).
Profiles are implemented by the Kubeflow profiles controller. Creating a Profile typically results in a Kubernetes Namespace being created (one-to-one with the Profile name) plus RoleBindings that grant
kubeflow-admin, kubeflow-edit, and kubeflow-view roles inside that namespace.Before creating Profiles, ensure the Kubeflow Profiles CRD and profiles controller are installed and running on your cluster. Creating Profiles usually requires cluster-admin privileges for the controller to create namespaces and RoleBindings.
Creating a Profile
A Profile is a Kubernetes custom resource of kindProfile. The spec.owner field sets the initial owner who receives admin privileges for the workspace.
Example Profile manifest (team1-profile.yaml):
kubectl get profiles output:
spec.owner (jane@example.com in the example) receives kubeflow-admin privileges inside the team1 namespace and can manage access for other users.
Roles and Permissions
Kubeflow relies on Kubernetes RBAC and defines (or uses) a set of common ClusterRoles per Profile. Typical roles are:
When the profiles controller creates a namespace it usually also creates RoleBindings that grant the
spec.owner the kubeflow-admin role for that namespace.
For more on RBAC concepts see the Kubernetes docs: https://kubernetes.io/docs/reference/access-authn-authz/rbac/
Granting Access to Other Users
You can grant access in two main ways:- Kubeflow UI (Dashboard) — quick, user-friendly way to add users with the Edit role for a Profile. The UI typically handles creating the underlying RoleBinding.
- Kubernetes manifests (RoleBinding / ClusterRoleBinding) — gives you precise control over which ClusterRole is bound and to which Subject (User, Group, or ServiceAccount).
alice@example.com the kubeflow-edit role in the team1 namespace by creating a RoleBinding:
kubeflow-view for read-only access or kubeflow-admin for additional admins.
To list RoleBindings in the namespace:
Troubleshooting & Best Practices
- Ensure the profiles controller is healthy and the Profile CRD exists:
kubectl get crd profiles.kubeflow.orgkubectl -n <kubeflow-system-namespace> get pods(look for the profiles controller)
- Use fine-grained RoleBindings when you need precise access control. Use Groups (if available in your identity provider) instead of many individual user bindings for easier management.
- Keep a naming convention for Profiles and namespaces (for example,
team-<name>orkubeflow-<team>) to avoid collisions and to make RBAC audits easier.
Links and References
- Kubeflow Profiles (official docs): https://www.kubeflow.org/docs/components/misc/profiles/
- Kubernetes RBAC reference: https://kubernetes.io/docs/reference/access-authn-authz/rbac/
- Kubernetes Namespaces: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
Summary
- Profiles isolate Kubeflow workspaces by mapping to Kubernetes namespaces and creating RBAC bindings.
- A Profile manifest declares an owner who initially receives
kubeflow-adminrights for that workspace. - Use the Kubeflow UI for quick role assignments or Kubernetes RoleBindings for precise control.
- Typical per-profile roles are
kubeflow-admin,kubeflow-edit, andkubeflow-view.