Kubernetes
Jeden Knoten eines Kubernetes-Clusters mit dem InfraFence-Helm-Chart und einem Cluster-Schlüssel schützen: Installation, Values, Upgrades, GitOps und was das Chart bereitstellt.
Zuletzt aktualisiert:
Das Helm-Chart betreibt den Agenten als DaemonSet: ein Agent auf jedem Knoten, Control Plane eingeschlossen. Jeder Knoten registriert sich im Dashboard als eigener Server.
Voraussetzungen: Kubernetes 1.22 oder neuer und Helm 3.
Einen Cluster-Schlüssel erstellen
Im Dashboard unter Einstellungen › Kubernetes › Cluster-Schlüssel erstellen (Inhaber und Administratoren). Anders als ein Installations-Token registriert ein Cluster-Schlüssel jeden Knoten des Clusters. Er beginnt mit IFK- und wird nur einmal angezeigt: Kopiere ihn sofort. Danach zeigt die Liste nur seine letzten vier Zeichen.
Wird ein Schlüssel widerrufen, können keine neuen Knoten mehr damit beitreten; bereits registrierte Knoten arbeiten weiter. Mit Starter kann sich nur ein Knoten registrieren, da Starter einen Server abdeckt; Basic und höher haben kein Limit und rechnen einen Server pro Knoten ab.
Installieren
helm install infrafence-agent oci://ghcr.io/infrafence/charts/infrafence-agent \
--namespace infrafence --create-namespace \
--set apiKey="IFK-..." \
--set clusterName="production"Das Dashboard zeigt denselben Befehl mit deinem Schlüssel und deinem Clusternamen bereits eingesetzt.
Upgrade und Deinstallation
helm upgrade infrafence-agent oci://ghcr.io/infrafence/charts/infrafence-agent \
--namespace infrafence --reuse-valueshelm uninstall infrafence-agent --namespace infrafenceEin Knoten, der sich erneut registriert (ein neu aufgebauter Knoten oder ein geleertes /etc/infrafence), behält seinen Server im Dashboard und bekommt ein neues Token.
Values
| Value | Standard | Bedeutung |
|---|---|---|
apiKey |
"" (Pflicht) |
Der Cluster-Schlüssel. Wird in einem Secret gespeichert. |
serverUrl |
https://infrafence.com |
Das Dashboard. |
clusterName |
"" |
Die Knoten werden im Dashboard danach gruppiert; ist er leer, wird er aus dem Cluster ermittelt. |
image.repository |
ghcr.io/infrafence/infrafence-agent |
Das Image des Agenten. |
image.tag |
"" |
Die appVersion des Charts, wenn leer. |
image.pullPolicy |
Always |
|
autoUpdate.enabled |
true |
Erlaubt dem Agenten, sein eigenes DaemonSet zu aktualisieren. Bei GitOps ausschalten. |
ingressFirewall.enabled |
false |
RBAC zum Blockieren von Adressen in der ConfigMap von nginx-ingress. |
ingressFirewall.namespace |
ingress-nginx |
Wo nginx-ingress läuft. |
ingressFirewall.configMapName |
ingress-nginx-controller |
Seine ConfigMap. |
resources |
requests 50m CPU, 64Mi; limits 500m CPU, 256Mi | |
tolerations |
[{operator: Exists}] |
Jeder Knoten, Control Plane eingeschlossen. |
nodeSelector |
{} |
|
priorityClassName |
"" |
|
extraEnv |
[] |
Weitere Umgebungsvariablen, zum Beispiel WEB_LOG_PATH. |
serviceAccount.create |
true |
Außerdem serviceAccount.name und serviceAccount.annotations. |
Updates und GitOps
Mit autoUpdate.enabled prüft ein Agent, der aktualisieren darf (die Einstellung Agent-Updates steht auf Automatisch installieren, oder du hast Jetzt installieren gewählt), die cosign-Signatur des neuen Release-Images und stellt sein DaemonSet per Digest auf dieses Image um. Wenn ArgoCD oder Flux den Cluster verwaltet, schalte das aus und erhöhe stattdessen das Image-Tag in deinem Repository:
autoUpdate:
enabled: falseWas das Chart bereitstellt
- ein DaemonSet mit Host-Netzwerk, dem PID-Namespace des Hosts und privilegierten Pods, Knoten für Knoten ausgerollt;
- einen ServiceAccount mit Lesezugriff auf die Kubernetes-API, plus dem Recht, sein eigenes DaemonSet für Updates zu patchen;
- ein Secret mit dem Cluster-Schlüssel;
- mit
ingressFirewall.enabledeine Role, die die ConfigMap des Ingress schreiben kann.
Host-Mounts: /var/log (schreibgeschützt), die Sockets von Docker und containerd (schreibgeschützt) und /etc/infrafence (Lesen und Schreiben, die Registrierung des Knotens).
Ingress-Controller
Sperren wirken an der Firewall des Knotens, unabhängig vom Ingress-Controller. Für die Erkennung von Web-Angriffen braucht der Agent die Zugriffslogs: Bei Traefik schalte dessen Zugriffslogs ein.
