在 kubeadm 叢集中啟用 Kubernetes 審計日誌收集,方法是建立審計策略和 webhook 配置檔案,編輯 kube-apiserver 靜態 Pod 清單,然後等待 kubelet 重新啟動該 Pod。
重要kubeadm 叢集以 kubelet 管理的靜態 Pod 形式運行
kube-apiserver。由於 kube-apiserver 在 CoreDNS 可用之前啟動,因此無法解析 Kubernetes 服務的 DNS 名稱。稽核收集器必須使用 hostNetwork: true 並通過 127.0.0.1 連接。 |
步驟
- 建立稽核配置目錄和檔案。執行以下命令以建立稽核政策和 webhook 配置:
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 - 在每個控制平面節點上編輯 kube-apiserver 靜態 Pod 清單。編輯
/etc/kubernetes/manifests/kube-apiserver.yaml。- 將以下標誌新增至
spec.containers[0].command:- --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 - 將磁碟掛載新增至
spec.containers[0].volumeMounts:- mountPath: /etc/kubernetes/audit name: audit-config readOnly: true - 將磁碟區新增至
spec.volumes:- hostPath: path: /etc/kubernetes/audit type: DirectoryOrCreate name: audit-config
- 將以下標誌新增至
- 等候自動重新啟動。kubelet 監控
/etc/kubernetes/manifests/,當您保存清單時會自動重新啟動 kube-apiserver pod。無需手動重啟。
注意
kubelet可能需要最多一分鐘來檢測變更並重新啟動pod。在重新啟動期間,API伺服器將暫時不可用。 - 驗證設定。
# 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
