Senario
Sebagai SRE, anda mendapati bahawa nod pekerja Kubernetes mempunyai port kubelet yang tidak selamat (10250) terdedah kepada rangkaian dalaman, membolehkan akses tanpa pengesahan kepada pod dan kontena. Penyerang boleh menyenaraikan beban kerja yang berjalan atau melaksanakan arahan.
Gejala
- Imbasan keselamatan melaporkan port kubelet terbuka.
- Penciptaan pod tidak dijangka dalam ruang nama sistem.
- Log pelayan API menunjukkan banyak permintaan tanpa pengesahan ke titik akhir kubelet.
Diagnosis
- Periksa bendera permulaan kubelet:
ps aux | grep kubelet. Cari ketiadaan--authentication-token-webhookdan--authorization-mode=Webhook. - Sahkan pendedahan port:
nmap -p 10250 <node-ip>. - Cuba akses terus:
curl -k https://<node-ip>:10250/pods. Jika ia mengembalikan data pod, kubelet tidak selamat.
Arahan & Tindakan
1. Dayakan Pengesahan & Kebenaran Kubelet
Edit fail konfigurasi kubelet (cth., /var/lib/kubelet/config.yaml) dan tambah:
authentication:
webhook:
enabled: true
anonymous:
enabled: false
authorization:
mode: Webhook
Mulakan semula: systemctl restart kubelet.
2. Had Rangkaian
Gunakan Dasar Rangkaian Kubernetes atau firewall awan untuk mengehadkan akses kubelet hanya kepada pelayan API dan alat pemantauan. Contoh:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: restrict-kubelet
namespace: kube-system
spec:
podSelector:
matchLabels:
component: kubelet
policyTypes:
- Ingress
ingress:
- from:
- podSelector:
matchLabels:
component: kube-apiserver
ports:
- port: 10250
3. Dayakan Pengawal Kemasukan NodeRestriction
Tambah --enable-admission-plugins=NodeRestriction pada argumen kube-apiserver untuk memastikan nod hanya boleh mengubah suai sumber berkaitan mereka sendiri.
4. RBAC untuk API Kubelet
Buat ClusterRole dan ClusterRoleBinding yang memberikan kumpulan system:nodes hanya kebenaran yang diperlukan (cth., nodes/proxy).
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: system:kubelet-api-admin
rules:
- apiGroups: [""]
resources: ["nodes/proxy"]
verbs: ["get", "list", "watch"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: system:kubelet-api-admin
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: system:kubelet-api-admin
subjects:
- kind: Group
name: system:nodes
apiGroup: rbac.authorization.k8s.io
5. Kuatkuasakan Piawaian Keselamatan Pod
Dayakan Kemasukan Keselamatan Pod (PSA) dengan melabel ruang nama:
kubectl label ns default pod-security.kubernetes.io/enforce=restricted
Untuk dasar tersuai, pertimbangkan OPA/Gatekeeper.
Kawalan Risiko
- Uji semua perubahan dalam persekitaran pementasan terlebih dahulu.
- Pastikan pelayan API mempunyai memori yang mencukupi untuk mengendalikan webhook kemasukan tambahan.
- Sandarkan fail konfigurasi kubelet sebelum pengubahsuaian.
- Laksanakan perubahan kubelet secara beransur-ansur (cth., satu nod pada satu masa).
Pemulihan
- Pulihkan konfigurasi kubelet asal dan mulakan semula perkhidmatan.
- Padam sumber RBAC yang ditambah:
kubectl delete clusterrole system:kubelet-api-admin. - Padam Dasar Rangkaian.
- Alih keluar label PSA jika digunakan.
Pengesahan
- Cuba akses tanpa pengesahan:
curl -k https://<node-ip>:10250/podsharus mengembalikan 401 atau 403. - Uji dengan token ServiceAccount yang sah:
kubectl get --raw /api/v1/nodes/<node>/proxy/podsharus berjaya (memerlukan RBAC yang sesuai). - Semak log pelayan API untuk permintaan kubelet yang dinafikan.
Bila untuk Menghantar Tiket OpsGlobal
- Jika selepas pengukuhan anda melihat isu sambungan meluas atau nod tidak tersedia.
- Apabila anda memerlukan bantuan untuk melaksanakan Piawaian Keselamatan Pod pada skala atau menyepadukan OPA/Gatekeeper.
- Untuk konfigurasi log audit dan peraturan amaran.
- Jurutera SRE kanan OpsGlobal menyediakan sokongan jauh 24/7 untuk memastikan kluster pengeluaran anda selamat dan stabil.
Senario Penggunaan
Sesuai untuk pasukan yang menyelesaikan isu Security dan memerlukan aliran kerja yang jelas.
Latar Belakang Masalah
Pelajari langkah pengukuhan keselamatan penting untuk kluster Kubernetes, dari RBAC dan dasar rangkaian hingga kemasukan keselamatan pod dan log audit, dengan senario SRE sebenar dan prosedur pemulihan.
Langkah Penyelesaian
Sahkan impak dan perubahan terkini, kumpul log, konfigurasi dan metrik, kemudian baiki mengikut risiko.
Contoh Arahan
Gantikan contoh dengan nama sumber sebenar dan simpan kata laluan, token atau kunci dalam pembolehubah persekitaran.
Risiko
Sebelum operasi produksi, semak sandaran, akses, tetingkap perubahan dan pelan rollback.
Pelan Rollback
Simpan konfigurasi dan versi asal; rollback konfigurasi, imej atau perubahan pangkalan data jika metrik tidak normal.
Senarai Serahan
Rekod punca isu, arahan penting, langkah pembaikan, hasil pengesahan dan cadangan susulan.
Perlu bantuan isu teknikal serupa?
Jika pelayan, Kubernetes, Docker, CI/CD, pangkalan data atau pemantauan anda bermasalah, hantar log dan konfigurasi untuk diagnosis jauh.