This project was part of my Master Thesis project for the UvA Software Engineering Computer Science Master degree executed at TNO.
This application works on any Kubernetes cluster (such as a local one), as well as Cloud based Kubernetes Engines.
The reference architecture is composed of many components (micro-services) written in different languages that talk to each other over REST.
- Registration of data sets
- Registration of data owners
- Listing of data sets
- Listing of data owners
- Registration of data sets and data owners at a consent manager
- Registration of data sets
- Registration of data owners
- Registration of data providers
- Definition of data permissions
- Definition of data obligations
- Linking of permissions and obligations with data sets
- Registering policies at the policy catalogue
- Registration of policies
- Listing of policies
- Deleting of policies
- Retrieving of policies (the policy content)
- Registration of consent managers
- Registration of data categories belonging to consent managers
- Registration of data permissions and obligations of consent managers
- Kubernetes: The infrastructure is designed to run on Kubernetes (both locally on "Docker for Desktop", as well as on the cloud).
- Flask: Public microservices make use of flask to provide a REST interface.
- Skaffold: Applications are deployed to Kubernetes with a single command using Skaffold.
Installation of the infrastructure kan be done locally and in the cloud.
The following installation methods are supported:
You will build and deploy the microservices images to a single-node Kubernetes cluster running on your development machine. You need install the following requirements:
- Docker. For containerization of the applications.
- Kubectl. To interact with your kubernetes cluster.
- Minikube. Recommended for Linux hosts (also supports Mac/Windows).
- Virtualbox. Used as a driver for minikube.
- skaffold (ensure version ≥v1.10)
-
Start the minikube cluster
In the root directory run the following command:
sh setup-minikube.sh
-
Deploy the database infrastructure
First the deploy the postgres operator
cd databases_infrastructure sh setup_dev_environment.sh
Wait till the postgres operator is online. You can check this by running the following command:
kubectl get pods
The 'status' of the postgres operator should have the value running
NAME READY STATUS RESTARTS AGE postgres-operator-85978df8cf-kgb9z 1/1 Running 0 7s
When the operator is running, you can deploy the database instances with the following command:
kubectl apply -f manifests/services-cluster-deployment.yaml
-
Deploy the service instracture
Starting from the root directory run the following script in the service_infrastructure directory.
cd services_infrastructure sh setup_skaffold.sh
After all the images are deployed you can update your host file with the following command:
cd .. sh manage-hosts.sh
-
Deploy the frontend
(As of now the frontend is not yet integrated in the kubernetes cluster. Therefore it is run locally.)
You can deploy the frontend by going to the frontend service directory and run the following commands:
cd services_infrastructure/frontend npm init npm run dev
Your frontend should then be available at: http://localhost:3000