erkules / k8s-workshop-sharedcluster

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

K8s/OCP Multitenant

  • Wir haben ein Cluster für viele Projekte
  • Wie kann der Cluster gemeinsam genutzt/geshared werden?
  • Wie bekommen wir den Workload so isoliert, dass nur wir auf die eigenen Applikationen zugreifen?
  • Wie schaffen wir es, dass der Cluster und andere Projekte nicht in "Gefahr" kommen?

Topics

  • Wir mocken einen User projekt11 (Authentication)
  • Dieser User wird Admin auf einem Namespace (Authorization/RBAC)
  • Wir begrenzen den Resourcenverbrauch etc. in diesem Namespace (LimitRange, ResourceQuota)
  • Wir beschränken das Netzwerk mit dynamischen Iptables-Regeln (NetworkPolicies)
  • Wir gehen sicher, dass Container/Pods nur mit reduzierten Rechnten ausgerollt werden dürfen (PodSecurityPolicies/SCC)

Ablauf

Wir mocken einen User projekt11 (Authentication)

kubectl --as projekt11 get nodes 

Dieser User wird Admin auf einem Namespace (Authorization/RBAC)

Namespace ist ne Abstraktion, aber keine Isolation.

kubectl create ns projekt11                           <-- Namespace anlegen
kubectl apply -f rolebinding-namespaceadmin.yaml      <-- User projekt11 wird Admin im projekt11-ns
kubectl -n projekt11 --as projekt11 get pods          <-- Kein Fehler
kubectl -n default --as projekt11 get pods            <-- Fehler (gut so!)

Wir erstellen ein Alias (faule Leute). Sprich kpro ist immer der User projekt11 im Namespace projekt11.

alias kpro="kubectl -n projekt11 --as projekt11"
kpro apply -f deployment.yaml                <-- Können wir ewig skalieren/aber funzt
kpro delete -f deployment.yaml               <-- Aufräumen

Wir begrenzen den Resourcenverbrauch etc. in diesem Namespace (LimitRange, ResourceQuota)

kubectl apply -f resourcequota.yaml
...
kubectl apply -f limitrange-like-in-prod.yaml
...

und aufräumen

Wir beschränken das Netzwerk mit dynamischen Iptables-Regeln (NetworkPolicies)

kpro apply -f deployment.yaml
kpro apply -f pod.yaml
kpro exec  www -- wget www.projekt11 -O -
kubectl -n projekt5  apply -f pod.yaml
kubectl -n projekt5  exec  www -- wget www.projekt11 -O -
kubectl apply -f networkpolicy.yaml
kpro exec  www -- wget www.projekt11 -O -
kubectl -n projekt5  exec  www -- wget www.projekt11 -O -

aufräumen

Wir gehen sicher, dass Container/Pods nur mit reduzierten Rechnten ausgerollt werden dürfen (PodSecurityPolicies/SCC)

Siehe AWS/README.md

kpro apply -f  deployment.yml
kpro apply -f  deployment-user.yaml

Einige Reste

  • API Priority/Fairness
  • Multus-CNI
  • OPA (Vortrag geplant)
  • PodPriority
  • Hierarchical Namespaces
  • Tenant
  • Virtual Cluster!!!
  • OLM

About