Skip to content

Commit c6e29ff

Browse files
committed
feat: migrate admission policies
1 parent 21c1bdb commit c6e29ff

6 files changed

Lines changed: 531 additions & 377 deletions

File tree

content/en/docs/operating/best-practices/_index.md

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,34 @@ title: Best Practices
33
weight: 2
44
description: Best Practices when running Capsule in production
55
---
6+
7+
8+
This is general advice you should consider before making Kubernetes Distribution consideration. They are partly relevant for Multi-Tenancy with Capsule.
9+
10+
### Authentication
11+
12+
User authentication for the platform should be handled via a central OIDC-compatible identity provider system (e.g., Keycloak, Azure AD, Okta, or any other OIDC-compliant provider).
13+
The rationale is that other central platform components — such as ArgoCD, Grafana, Headlamp, or Harbor — should also integrate with the same authentication mechanism. This enables a unified login experience and reduces administrative complexity in managing users and permissions.
14+
15+
[Capsule relies on native Kubernetes RBAC](/docs/operating/authentication/), so it's important to consider how the Kubernetes API handles user authentication.
16+
17+
### OCI Pull-Cache
18+
19+
By default, Kubernetes clusters pull images directly from upstream registries like `docker.io`, `quay.io`, `ghcr.io`, or `gcr.io`. In production environments, this can lead to issues — especially because Docker Hub enforces rate limits that may cause image pull failures with just a few nodes or frequent deployments (e.g., when pods are rescheduled).
20+
21+
To ensure availability, performance, and control over container images, it's essential to provide an on-premise OCI mirror.
22+
This mirror should be configured via the CRI (Container Runtime Interface) by defining it as a mirror endpoint in registries.conf for default registries (e.g., `docker.io`).
23+
This way, all nodes automatically benefit from caching without requiring developers to change image URLs.
24+
25+
### Secrets Management
26+
27+
In more complex environments with multiple clusters and applications, managing secrets manually via YAML or Helm is no longer practical.
28+
Instead, a centralized secrets management system should be established — such as Vault, AWS Secrets Manager, Azure Key Vault, or the CNCF project [OpenBao](https://openbao.org/) (formerly the Vault community fork).
29+
30+
To integrate these external secret stores with Kubernetes, the [External Secrets Operator (ESO)](https://external-secrets.io/latest/) is a recommended solution. It automatically syncs defined secrets from external sources as Kubernetes secrets, and supports dynamic rotation, access control, and auditing.
31+
32+
If no external secret store is available, there should at least be a secure way to store sensitive data in Git.
33+
In our ecosystem, we provide a solution based on SOPS (Secrets OPerationS) for this use case.
34+
35+
[👉 Demonstration](https://killercoda.com/peakscale/course/playgrounds/sops-secrets)
36+

content/en/docs/operating/best-practices/general-advice.md

Lines changed: 0 additions & 34 deletions
This file was deleted.

0 commit comments

Comments
 (0)