{"id":26963989,"url":"https://github.com/netgroup-polito/crownlabs","last_synced_at":"2025-04-03T06:19:04.054Z","repository":{"id":37912766,"uuid":"245970010","full_name":"netgroup-polito/CrownLabs","owner":"netgroup-polito","description":"Kubernetes-based Remote Laboratories","archived":false,"fork":false,"pushed_at":"2025-04-02T14:23:51.000Z","size":14308,"stargazers_count":113,"open_issues_count":15,"forks_count":46,"subscribers_count":10,"default_branch":"master","last_synced_at":"2025-04-02T15:29:30.167Z","etag":null,"topics":["golang","kubebuilder","kubernetes","kubevirt","novnc","reactjs"],"latest_commit_sha":null,"homepage":"https://crownlabs.polito.it","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/netgroup-polito.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":"AUTHORS","dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-03-09T07:29:16.000Z","updated_at":"2025-04-02T14:23:55.000Z","dependencies_parsed_at":"2023-02-19T06:16:03.536Z","dependency_job_id":"91de0410-8a0d-490c-be51-344f0f997ad8","html_url":"https://github.com/netgroup-polito/CrownLabs","commit_stats":{"total_commits":1024,"total_committers":54,"mean_commits":"18.962962962962962","dds":0.7265625,"last_synced_commit":"f9a1b722fc31fe05fc9b2be853ad757d3ab5aba7"},"previous_names":[],"tags_count":41,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/netgroup-polito%2FCrownLabs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/netgroup-polito%2FCrownLabs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/netgroup-polito%2FCrownLabs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/netgroup-polito%2FCrownLabs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/netgroup-polito","download_url":"https://codeload.github.com/netgroup-polito/CrownLabs/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246944386,"owners_count":20858772,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["golang","kubebuilder","kubernetes","kubevirt","novnc","reactjs"],"created_at":"2025-04-03T06:19:03.167Z","updated_at":"2025-04-03T06:19:04.038Z","avatar_url":"https://github.com/netgroup-polito.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003c!-- markdown-link-check-disable --\u003e\n\n[![Coverage Status](https://coveralls.io/repos/github/netgroup-polito/CrownLabs/badge.svg)](https://coveralls.io/github/netgroup-polito/CrownLabs)\n\n\u003c!-- markdown-link-check-enable --\u003e\n\n# CrownLabs\n\nCrownLabs is a set of services designed to deliver **remote computing labs** through **per-user environments**, based either on virtual machines or lightweight containers.\n\nInstructors can provision a set of environments (e.g., VMs), properly installed with the software required for a given lab (e.g., compilers, simulation software, etc).\n\nEach student can connect to its own set of (remote) private environments without requiring any additional software, just a simple Web browser. No space problems on the student hard disk, no troubles in setting up the environment required to support multiple subjects on the same machine, and more.\n\nIn addition, each student can share his remote desktop with his groupmates, enabling multiple students to complete their labs in a team.\n\nFinally, CrownLabs supports also instructors, who can connect to the remote desktop of the student and play directly with his environment, e.g., in case some help is required.\n\nFor more information, visit the CrownLabs website ([https://crownlabs.polito.it](https://crownlabs.polito.it)) and download our [scientific paper](https://ieeexplore.ieee.org/document/9136697) published in IEEE Access.\n\n\n## Architecture\n\nCrownLabs relies on two major high-level components:\n* **The Backend Business Logic**, which provides the different CrownLabs functionalities and is implemented by custom Kubernetes operators (e.g. the Instance Operator);\n* **qlkube**, a middleware that can expose the Kubernetes API Server as a GraphQL service;\n* **The Frontend Dashboard**, which interacts with the Kubernetes API Server through _qlkube_ and exposes the different CrownLabs custom resources through a graphical interface.\n\nA high-level representation of the main architectural building blocks composing CrownLabs is given by the following figure.\nPlease notice that, for the sake of clarity, the figure depicts only the most important elements for the provision of the actual service (i.e., remote computing labs), while omitting low-level components and the ones associated with the cluster operation (e.g monitoring).\n\n![CrownLabs High-Level Architecture](documentation/architecture.svg)\n\n## Backend Business Logic\n\nThe backend business logic providing the different CrownLabs functionalities is implemented by custom Kubernetes operators, while the data model is defined by means of CRDs.\nSpecifically, the main backend components are:\n\n* the **Instance Operator**, which implements the logic to spawn new environments starting from predefined templates;\n* the **Tenant Operator**, which automates the management of CrownLabs users (i.e. tenants) and groups (i.e. workspaces);\n* the **Bastion Operator**, which configures an SSH bastion to provide command-line access to the environments instead of the web-based GUI.\n\nFurthermore, some additional components are leveraged to simplify and automate companion tasks, such as listing the available images and deleting stale environments.\n\nFor more information regarding the CrownLabs backend, as well as for the deployment and configuration instructions, please refer to the corresponding [README](./operators/README.md).\n\n## Frontend Dashboard\n\nThe frontend dashboard is the component responsible for providing access to the CrownLabs custom resources through an easy to use graphical interface.\nIt allows final users to explore the workspaces they are enrolled in, spawn new environments, and connect to their instances.\nAdditionally, privileged users can create, update and delete both templates and tenant resources, effectively managing the available environments and the permissions granted to access the system.\nAuthentication is managed through an external OIDC identity provider integrated with Kubernetes, while the authorizations to access specific resources are granted leveraging the Kubernetes RBAC approach.\n\n# Installation\n\n## Preliminary Note\n\nCrownLabs can be installed on any Kubernetes cluster, although with a non-negligible degree of adaptation.\nThis would require a non-trivial knowledge of how Kubernetes (and the wonderful world of microservices) works.\nNo magic install procedure is unfortunately available (yet).\n\nIn a nutshell, you have to install all the components with your own custom configuration files, which may largely depend upon your physical install.\nA huge degree of customization is possible in this respect: pure data-link vs. BGP-based load balancing, the number (and capabilities) of your servers, the desired degree of high availability, integration with external authentication servers, creation of admin/user credentials, your own secrets to protect the internal communication among the components.\n\nDo not expect to complete this task in a few hours; likely, you may need several days, or even more.\nHelp is available on our Slack channels.\nFor more information, visit the CrownLabs website: [https://crownlabs.polito.it](https://crownlabs.polito.it).\n\n## Pre-Requirements\n\nCrownlabs has been specifically designed for bare-metal clusters and this assumption will be adopted across the documentation. To deploy CrownLabs, we have to rely on a full-fledged Kubernetes cluster where at least a subset of nodes supports Hardware Virtualization.\nIn [infrastructure](infrastructure/), we present all the services which should be installed on the cluster, with an example of configuration. We strongly suggest to set up on your cluster the same components that we used, in order to avoid feature mismatch.\n\n## Deploying the CrownLabs components\n\nThe deployment and configuration of the different CrownLabs components can be performed leveraging the provided Helm Chart.\nPlease, refer to the corresponding [README](./deploy/crownlabs/README.md) file for more information about the installation procedure.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnetgroup-polito%2Fcrownlabs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnetgroup-polito%2Fcrownlabs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnetgroup-polito%2Fcrownlabs/lists"}