Ansichten:

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.

Wichtig
Wichtig
kubeadm-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

  1. 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
  2. Bearbeiten Sie das kube-apiserver Static-Pod-Manifest auf jedem Steuerknoten.
    Bearbeiten /etc/kubernetes/manifests/kube-apiserver.yaml.
    1. Fügen Sie die folgenden Flags zu spec.containers[0].command hinzu:
          - --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
    2. Fügen Sie einen Volumen-Mount zu spec.containers[0].volumeMounts hinzu:
          - mountPath: /etc/kubernetes/audit
            name: audit-config
            readOnly: true
    3. Fügen Sie ein Volume zu spec.volumes hinzu:
        - hostPath:
            path: /etc/kubernetes/audit
            type: DirectoryOrCreate
          name: audit-config
  3. 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
    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.
  4. Ü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