Prompt dan konteks yang berkaitan
Satu kluster Kubernetes mengandungi imej legasi yang masih berjalan sebagai UID 0 di dalam kontena. Pihak keselamatan mahukan user namespaces untuk mengurangkan impak hos sekiranya berlaku pelepasan kontena (container escape), manakala pihak perniagaan bimbang tentang pemilikan volum, hostPath, ejen pemantauan, keupayaan istimewa (privileged capabilities), dan nod yang lebih lama. Reka bentuk pelan migrasi, pengesahan, canari, kebolehlihatan (observability), dan rollback.
Ini adalah soalan reka bentuk sistem. Isyarat yang dinilai adalah memetakan pengasingan kepada identiti, storan, penjadualan, dasar, dan operasi dan bukannya hanya menulis hostUsers: false.
Perkara yang dinilai oleh penemu duga
- Menerangkan perbezaan antara root kontena dan UID hos, termasuk skop keupayaan (capabilities).
- Mengenal pasti sempadan merentasi volum, host namespaces, runtime CRI/OCI, dan Pod Security.
- Mereka bentuk semakan keserasian dan migrasi berperingkat tanpa menjejaskan beban kerja sedia ada.
- Menentukan faedah keselamatan, kos prestasi, SLO, metrik, dan syarat rollback.
- Mengendalikan contoh bertentangan pada aplikasi, penyahpepijatan, pemantauan, dan sandaran selepas migrasi.
Kubernetes mendokumenkan bahawa user namespaces adalah stabil dan didayakan secara lalai dalam v1.36; Pod memilih untuk menggunakannya dengan spec.hostUsers: false. Bahan SDE II Amazon menilai reka bentuk sistem melalui kebolehpercayaan, kecekapan, pengoptimuman, dan kebolehskalaan. Soalan ini menambah keperluan untuk mengukur faedah keselamatan dan risiko operasi secara bersama.
Soalan penjelasan
- Adakah kluster berasaskan Linux sahaja, dan adakah versi kubelet, CRI, runtime OCI, serta kernel memenuhi keperluan?
- Adakah beban kerja menggunakan hostNetwork, hostPID, hostIPC, hostPath, peranti, kontena privileged, atau ejen pemantauan yang memerlukan UID hos?
- Volum yang manakah dikongsi merentasi Pod, dan adakah UID/GID fail sedia ada berada dalam julat yang boleh dipetakan?
- Adakah aplikasi benar-benar memerlukan root hos, atau hanya semantik root di dalam kontenanya?
- Adakah matlamatnya pembendungan escape, pematuhan Pod Security, atau keupayaan bernamespace tertentu seperti pentadbiran rangkaian setempat kontena?
- Bolehkah anda melakukan canari mengikut namespace, kolam nod (node pool), atau beban kerja sambil mengekalkan templat hostUsers=true untuk rollback?
Rangka jawapan 30 saat
Bina matriks kelayakan untuk Linux, kernel, runtime CRI/OCI, host namespaces, volum, dan keupayaan privileged. Tetapkan hostUsers: false hanya untuk Pod yang layak. Sahkan bahawa semantik UID aplikasi kekal stabil sementara hos melihat UID yang dipetakan dan bukan privileged. Uji akses fail, pemantauan, rangkaian, dan penyahpepijatan, kemudian lakukan canari mengikut beban kerja. Pantau kependaman permulaan, ralat kebenaran, OOM, kawalan escape, dan SLO perniagaan; beralih kembali ke templat lama jika ambang dilanggar.
Jawapan mendalam langkah demi langkah
1. Terangkan model pengasingan
User namespace memetakan pengguna kontena kepada UID dan GID hos yang berbeza. Root di dalam kontena boleh melakukan operasi yang diperlukan di dalam namespace tersebut, tetapi keupayaannya hanya sah di situ dan tidak memberikan kuasa root hos. Kubernetes memilih untuk menyertakan Pod dengan hostUsers: false dan memperuntukkan pemetaan hos yang tidak bertindih pada sesuatu nod.
Ini mengubah sempadan identiti kernel; ia bukan sandbox yang menyeluruh. Teruskan menggunakan seccomp, AppArmor atau SELinux, dasar rangkaian, sistem fail baca sahaja, keistimewaan paling sedikit (least privilege), dan nod yang telah ditampal. User namespaces adalah satu kawalan, bukan penyelesaian untuk setiap laluan escape.
2. Semak kelayakan runtime dan nod
Sahkan sokongan user-namespace dalam kubelet, CRI, dan runtime OCI pada setiap nod sasaran. Dokumentasi Kubernetes menyenaraikan sokongan seperti containerd 2.0, CRI-O 1.25, runc 1.2, dan crun 1.9; penggunaan masih perlu mengesahkan kernel, pemasangan idmapped, dan tetapan pengedaran.
Dasar kemasukan (admission policy) boleh menolak nod atau gabungan keupayaan yang tidak layak. CI menghasilkan Pod akhir dan menyemak hostUsers, konteks keselamatan, host namespaces, dan jenis volum. Sebelum pelancaran, Pod probe mengesahkan penciptaan, pemasangan (mounts), restart, dan penjadualan semula nod.
3. Nilaikan volum dan UID/GID
runAsUser, runAsGroup, dan fsGroup bagi Pod masih menerangkan pengguna di dalam kontena. Semantik kebenaran volum harus kekal boleh digunakan seperti sebelumnya, jadi aplikasi biasanya tidak memerlukan penulisan semula pemilikan secara menyeluruh hanya kerana user namespaces didayakan.
Fail di luar julat UID/GID yang dipetakan boleh muncul sebagai ID limpahan (overflow ID) dan mungkin tidak boleh ditulis. Imbas pemilik, skrip init, volum kongsi, dan alat sandaran/pemulihan sebelum migrasi. Baiki imej atau data sebelum mendayakan user namespaces untuk beban kerja tersebut.
4. Kendalikan gabungan terlarang dan dasar
Dengan user namespaces didayakan, Pod tidak boleh menggunakan host namespaces tertentu seperti hostNetwork, hostPID, atau hostIPC. Beban kerja yang memerlukan peranti hos, mod privileged, atau pemasangan proc khas memerlukan semakan berasingan. Pod Security Standards mungkin melonggarkan semakan terpilih secara terkawal, tetapi itu bukan kebenaran untuk membuang setiap dasar lain.
Tandakan beban kerja yang bergantung pada host-namespace sebagai ditangguhkan dan rekodkan kelulusan pengecualian, kawalan pampasan, serta tarikh luput. Jangan padamkan medan secara automatik semata-mata untuk melepasi kemasukan; itu mengubah kegagalan fungsi menjadi penurunan tahap keselamatan yang tidak kelihatan.
5. Reka bentuk prestasi, SLO, dan kebolehlihatan
Jejak kependaman permulaan Pod dan pemasangan volum, CPU dan memori nod, ralat kebenaran dalam kontena, kehilangan pemantauan, kejayaan sandaran/pemulihan, dan restart. Pemasangan idmapped boleh mengelakkan chown rekursif pada volum yang besar, tetapi ukur dengan kernel, runtime, dan sistem fail sebenar dan bukannya bergantung pada dakwaan teori.
Tag log dan metrik dengan versi migrasi, kolam nod, imej, dan jenis volum. Isyarat keselamatan termasuk ujian escape yang ditolak, operasi privileged yang gagal, dan pelanggaran Pod Security; isyarat perniagaan termasuk ralat permintaan, kependaman, dan integriti data.
6. Laksanakan migrasi berperingkat dan rollback
Mulakan dengan beban kerja stateless yang tidak menggunakan sebarang host namespace dan mempunyai volum ringkas, kemudian kembangkan kepada perkhidmatan stateful. Simpan cincangan (hash) bagi templat hostUsers=true untuk setiap kumpulan. Berhenti secara automatik sekiranya berlaku ralat kebenaran, kemerosotan masa permulaan, kadar ralat perniagaan, kegagalan baca/tulis volum, atau pengusiran (eviction) nod.
Rollback mengubah lebih daripada satu medan: sahkan pemasangan volum, pengguna runAs, ejen pemantauan, dan output kemasukan kembali kepada bentuk asal. Elakkan daripada menaik taraf runtime, kernel, dan imej dalam tetingkap masa yang sama supaya kegagalan kekal dapat dikenal pasti puncanya.
7. Nyatakan faedah keselamatan dan risiko sisa
User namespaces mengurangkan impak hos daripada pelepasan root kontena dan menyediakan domain yang lebih sempit untuk beban kerja yang memerlukan pentadbiran setempat kontena. Ia tidak melindungi rahsia aplikasi, serangan logik silang kontena, dasar rangkaian yang lemah, atau perkhidmatan kongsi yang telah dikompromi.
Semakan keselamatan harus menyenaraikan baki hostPath, peranti, keupayaan, antara muka kernel, dan service accounts, kemudian menggabungkan seccomp, SELinux, pengasingan nod, dan penampalan kerentanan ke dalam pertahanan mendalam (defense-in-depth).
Contoh jawapan berkualiti tinggi
Saya akan membina matriks kelayakan: nod sasaran mestilah Linux dan memenuhi keperluan user-namespace untuk kubelet, runtime CRI/OCI, kernel, dan sistem fail. Saya akan mengecualikan Pod yang menggunakan hostNetwork, hostPID, hostIPC, peranti privileged, atau andaian UID hos. Templat yang layak menetapkan hostUsers: false; ujian mengesahkan semantik UID/GID kontena kekal betul manakala hos melihat pemetaan tanpa keistimewaan (unprivileged).
Sebelum pelancaran, saya akan mengimbas pemilik volum, skrip init, volum kongsi, dan laluan sandaran/pemulihan, termasuk kelakuan overflow-ID. Pod probe mengesahkan penciptaan, pemasangan, restart, dan penjadualan semula. Canari mengukur kependaman permulaan dan pemasangan, ralat kebenaran, SLO perniagaan, pengusiran nod, pemantauan, dan isyarat sandaran. Cincangan templat lama kekal tersedia untuk rollback serta-merta.
Saya akan menganggap user namespaces sebagai satu lapisan pertahanan mendalam dan mengekalkan seccomp, SELinux/AppArmor, dasar rangkaian, least privilege, dan penampalan nod. Faedah keselamatan, kos prestasi, dan beban kerja yang ditangguhkan dimasukkan ke dalam senarai semak migrasi; menetapkan satu medan sahaja bukanlah migrasi itu sendiri.
Kesilapan lazim
- Hanya menulis
hostUsers: falsetanpa menyemak syarat Linux, runtime, kernel, dan volum. - Mengatakan root kontena menjadi pengguna biasa dan mengabaikan dua maksud UID.
- Menganggap user namespaces sebagai penyelesaian automatik untuk setiap risiko escape, keistimewaan, atau rangkaian.
- Terlepas pandang had hostNetwork, hostPID, hostIPC, hostPath, peranti, dan pemasangan proc.
- Melakukan chown secara rekursif pada setiap volum atau gagal mengimbas fail dengan UID/GID limpahan (overflow).
- Menaik taraf runtime, kernel, dan imej secara serentak, menyebabkan punca kegagalan mustahil ditentukan.
- Tidak mempunyai templat lama, syarat henti automatik, atau prosedur rollback yang boleh disahkan.
Soalan susulan dan jawapan
Versi Kubernetes yang manakah menjadikan user namespaces stabil?
Dokumentasi rasmi menandakan ciri ini sebagai stabil dan didayakan secara lalai dalam Kubernetes v1.36; Pod masih perlu memilih untuk menggunakannya dengan spec.hostUsers: false. Sahkan versi kluster dan nod sebenar sebelum pelancaran.
Bolehkah root kontena masih menggunakan keupayaan (capabilities)?
Ia boleh menggunakan keupayaan yang sah di dalam user namespace tersebut, tetapi keupayaan itu tidak secara automatik menjadi keistimewaan hos. Terapkan least privilege, seccomp, dan kawalan LSM.
Adakah semua kebenaran PVC sedia ada akan rosak?
Semantik UID/GID kontena biasanya kekal stabil, jadi penulisan semula pemilikan secara menyeluruh tidak diperlukan. Fail di luar julat pemetaan boleh menjadi ID limpahan dan perlu diimbas serta dibaiki.
Mengapakah ia tidak boleh digabungkan dengan hostNetwork?
User namespaces bergantung pada sempadan pengguna dan sumber yang diasingkan, dan beberapa gabungan host-namespace akan menjejaskan pengasingan tersebut, jadi Kubernetes tidak membenarkannya. Kekalkan beban kerja host-network sebagai pengecualian jelas dengan kawalan pampasan.
Bagaimanakah anda membuktikan bahawa risiko telah dikurangkan?
Jalankan ujian pengasingan escape dan operasi privileged, perhatikan UID hos, keupayaan, dan skop akses, serta bandingkan ralat perniagaan, kependaman permulaan, dan integriti volum. Kejayaan penciptaan Pod sahaja bukan bukti yang mencukupi.
Beban kerja yang manakah patut ditunggu?
Tangguhkan beban kerja yang memerlukan host namespaces, peranti khas, antara muka kernel privileged, atau susun atur UID/GID volum yang tidak boleh dibaiki. Rekodkan sebab, kawalan pampasan, dan tarikh penilaian semula.