File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ .hugo_build.lock
Original file line number Diff line number Diff line change 1+ # DevOps self-study projects
2+
3+ This is a source for the [ selfstudy.cloudowski.com] ( https://selfstudy.cloudowski.com/ ) website with the projects for learning DevOps technologies and tools.`
Original file line number Diff line number Diff line change 1+ +++
2+ title = ' {{ replace .File.ContentBaseName "-" " " | title }}'
3+ date = {{ .Date }}
4+ draft = true
5+ +++
Original file line number Diff line number Diff line change 1+ +++
2+ title = " Task 1"
3+ weight = 10
4+ # tags = ["container", "replicas", "registry"]
5+ +++
6+
7+ ## Start - simple web application
8+
9+ ### Level 1
10+
11+ 1 . Create a simple web application in the language of your choice (e.g. Go, Python) that just displays a hostname and the app version
12+ 1 . Create a container image definition in a Dockerfile
13+ Use advanced techniques if applicable (e.g. multistage, build from “scratch”)
14+ 1. Make it as small as possible
15+ 1. Ensure the image is available for both amd64 and arm64 architectures
16+ 1. Publish the image in a private registry
17+ 1 . Run the application on the cluster in multiple instances
18+ 1 . Don’t forget about best practices (probes, resources requests/limits)
19+
20+ ### Level 2
21+
22+ 1 . Automate the build process
23+ 1 . Ensure that after each push to the git repository with the application’s source a build process starts and publish the image
24+ 1 . Make sure the image doesn’t have critical vulnerabilities after each build
25+
Original file line number Diff line number Diff line change 1+ +++
2+ title = ' Tips'
3+ draft = true
4+ +++
Original file line number Diff line number Diff line change 1+ +++
2+ title = " Task 2"
3+ weight = 20
4+ # tags = ["observability", "tls", "database"]
5+ +++
6+
7+ ## Simple app with a database
8+
9+ ### Level 1
10+
11+ 1 . Deploy a database instance of your choice
12+ 1 . Add connectivity to the database from the application
13+ 1 . Expose database version under additional http endpoint (e.g. /db)
14+
15+ ### Level 2
16+
17+ 1 . Enable telemetry for the application
18+ 1 . Expose uptime
19+ 1 . Expose number of requests processed (excluding the ones from probes)
20+ 1 . Expose the application outside the cluster via https
21+ 1 . Implement database operational practices
22+ 1 . Ensure it is backed up automatically
23+ 1 . Ensure backups are stored on a separate volume or some object storage (e.g. S3 bucket or similar)
24+ 1 . Ensure there are at least two instances of the database (e.g. in the active/active or active/passive mode)
25+ 1 . Ensure the database exposes metrics compatible with the Prometheus format
Original file line number Diff line number Diff line change 1+ +++
2+ title = ' Tips'
3+ draft = true
4+ +++
Original file line number Diff line number Diff line change 1+ +++
2+ title = " Task 3"
3+ weight = 30
4+ # tags = ["observability", "tls", "database"]
5+ +++
6+
7+ ## Make the app (more) secure
8+
9+ ### Level 1
10+
11+ 1 . Deploy HashiCorp Vault
12+ 1 . Deploy outside or inside the cluster
13+ 1 . Store the database password in Vault and make it accessible directly to the app (i.e bypassing the creation of a Secret object)
14+ 1 . Gather the metrics from the app - set up proper metrics & monitoring system
15+
16+ ### Level 2
17+
18+ 1 . Use the dynamic database secrets feature instead of static (KV) engine
19+ 1 . Create a dashboard with the metrics from the app
20+ 1 . Include the number of ready/running replicas
21+ 1 . Include the number of requests
22+ 1 . Ensure that the cluster is monitored and the necessary notifications are configured.
23+ 1 . Set up monitoring for the app
24+ 1 . Send an email notification when there are fewer than 3 ready instances
25+ 1 . Send an email notification when there is a Pod in Pending or CrashLoopbackOff state for more than 3 minutes
26+
27+ ### Level 3
28+
29+ 1 . Ensure logs from the cluster and apps are stored and can be viewed
30+ 1 . Ensure that cluster events are archived and can be viewed
Original file line number Diff line number Diff line change 1+ +++
2+ title = ' Tips'
3+ draft = true
4+ +++
Original file line number Diff line number Diff line change 1+ +++
2+ title = " Task 4"
3+ weight = 40
4+ # tags = ["observability", "tls", "database"]
5+ +++
6+
7+ ## Bring even more security
8+
9+ ### Level 1
10+
11+ 1 . Ensure that the app doesn’t run as a root user
12+ 2 . The service should try to automatically fix vulnerabilities in the dependencies by creating a Pull/Merge Request
13+
14+ ### Level 2
15+
16+ 1 . Add a scanning service for the source code of the app
17+ 1 . Ensure that each Pod ** MUST** in selected namespaces run a container on non-root user
18+ 1 . Ensure that the traffic from and to the app is restricted
19+ 1 . Forbid traffic from other namespaces
20+ 1 . Explicitly allow traffic between the app instances and the database
21+
22+ ### Level 3
23+
24+ 1 . Ensure that a trusted TLS certificate is used to provide the https access
25+ 1 . Minimize the syscalls used by the app with a custom syscomp profile
26+ 1 . Monitor each time when someone execs into the app container and send a mail notification
27+ 1 . Ensure that the whole network traffic is encrypted within the cluster
You can’t perform that action at this time.
0 commit comments