Aktivieren Sie die Sammlung von Kubernetes-Audit-Logs auf einem kubeadm-Cluster, indem Sie die Audit-Richtlinie und die Webhook-Konfigurationsdateien erstellen, das Manifest des statischen Pods kube-apiserver bearbeiten und warten, bis kubelet den Pod neu startet.
Wichtigkubeadm-Cluster führen
kube-apiserver als statisches Pod aus, das von Kubelet verwaltet wird. Da kube-apiserver startet, bevor CoreDNS verfügbar ist, kann es keine Kubernetes-Dienst-DNS-Namen auflösen.
Der Audit-Sammler muss hostNetwork: true verwenden und sich über 127.0.0.1 verbinden. |
Prozedur
- Erstellen Sie das Verzeichnis und die Dateien für die Audit-Konfiguration.Führen Sie die folgenden Befehle aus, um die Audit-Richtlinie und die Webhook-Konfiguration zu erstellen:
sudo mkdir -p /etc/kubernetes/audit sudo tee /etc/kubernetes/audit/audit-policy.yaml << 'EOF' apiVersion: audit.k8s.io/v1 kind: Policy rules: - level: Metadata verbs: ["create"] resources: - group: "authorization.k8s.io" resources: ["subjectaccessreviews", "selfsubjectaccessreviews", "localsubjectaccessreviews"] - level: RequestResponse verbs: ["get", "list", "watch", "create", "update", "patch", "delete"] resources: - group: "rbac.authorization.k8s.io" resources: ["roles", "rolebindings", "clusterroles", "clusterrolebindings"] - level: Metadata verbs: ["create", "update", "delete"] resources: - group: "" resources: ["serviceaccounts"] - level: None EOF sudo tee /etc/kubernetes/audit/audit-webhook-config.yaml << 'EOF' apiVersion: v1 kind: Config clusters: - name: audit-collector cluster: server: http://127.0.0.1:8030/k8s-audit contexts: - context: cluster: audit-collector user: "" name: default-context current-context: default-context preferences: {} users: [] EOF - Bearbeiten Sie das kube-apiserver Static-Pod-Manifest auf jedem Steuerknoten.Bearbeiten
/etc/kubernetes/manifests/kube-apiserver.yaml.- Fügen Sie die folgenden Flags zu
spec.containers[0].commandhinzu:- --audit-policy-file=/etc/kubernetes/audit/audit-policy.yaml - --audit-webhook-config-file=/etc/kubernetes/audit/audit-webhook-config.yaml - --audit-webhook-batch-max-size=1 - Fügen Sie einen Volumen-Mount zu
spec.containers[0].volumeMountshinzu:- mountPath: /etc/kubernetes/audit name: audit-config readOnly: true - Fügen Sie ein Volume zu
spec.volumeshinzu:- hostPath: path: /etc/kubernetes/audit type: DirectoryOrCreate name: audit-config
- Fügen Sie die folgenden Flags zu
- Warten Sie auf den automatischen Neustart.kubelet überwacht
/etc/kubernetes/manifests/und startet den kube-apiserver-Pod automatisch neu, wenn Sie das Manifest speichern. Ein manueller Neustart ist nicht erforderlich.
Hinweis
Es kann bis zu einer Minute dauern, bis der Kubelet die Änderung erkennt und den Pod neu startet. Während des Neustarts wird der API-Server kurzzeitig nicht verfügbar sein. - Überprüfen Sie die Konfiguration.
# Check kube-apiserver is running kubectl get pods -n kube-system -l component=kube-apiserver # Confirm audit flags are applied kubectl get pod -n kube-system -l component=kube-apiserver -o yaml | grep -E "audit-policy|audit-webhook" # Check audit collector logs kubectl logs -n trendmicro-system -l app.kubernetes.io/component=trendmicro-audit-log-collector --tail=20
