Maaaring mahirap pamahalaan ang antas ng mga pribilehiyong ibinibigay sa bawat Pod at container sa isang container ng Kubernetes. Maaari naming gamitin ang mga kakayahan ng Kubernetes SecurityContext upang magdagdag o magtanggal ng mga kakayahan ng Linux mula sa Pod at Container upang mapataas ang seguridad ng container. Nakatuon ang artikulong ito sa paggamit ng securityContext upang ipatupad ang isang simpleng halimbawa ng pagdaragdag at pagtanggal ng mga kakayahan. Ang pagsasaayos ng isang yaml file upang tanggalin ang lahat ng mga kakayahan at magdagdag lamang ng isang kakayahan sa isang lalagyan ay ibinigay sa halimbawang halimbawa. Sa artikulong ito, ginagamit ang mga proc at capsh na command upang ipakita ang mga kakayahan ng container.
Hakbang 1: Simulan ang Minikube Server
Una, simulan ang minikube server upang mapatakbo mo ang iyong aplikasyon at magamit ang mga tagubilin sa kubectl. Maaari mong i-deploy ang iyong mga node, pod, at kahit cluster gamit ang minikube server sa kapaligiran ng Kubernetes. Ang sumusunod na command ay dapat gamitin upang mapanatili ang minikube sa aktibong mode:
> simulan ang minikube
Sa paggawa nito, naka-on ang minikube server at handa nang gamitin ang kapaligiran ng Kubernetes.
Hakbang 2: Gumawa ng Kubernetes YAML File
Sa pangalawang hakbang, gumawa ng YAML file para mag-deploy ng pod.
Sundin ang mga hakbang upang lumikha ng yaml file gamit ang nano:
- Pumunta sa path ng direktoryo kung saan mo gustong likhain ang file o baguhin ang isang umiiral na file.
- I-type ang nano command na sinusundan ng pangalan ng file.
Patakbuhin ang sumusunod na command na nano. Lumilikha ito ng YAML configuration file na pinangalanang 'nano podsample.yaml'.
> nano podsample.yamlLumipat tayo sa susunod na hakbang na tulungan kang malaman kung paano mag-configure ng podsample.yaml file.
Hakbang 3: I-configure ang YAML File
Idinaragdag namin ang capsh tool sa naunang hakbang para makita namin ang mga kakayahan ng aming container.
Tandaan na wala sa mga parameter na iyon ang naka-configure para sa isang securityContext na seksyon para sa container na ito. Kaya, lahat sila ay nakatakda sa mga default ng system. Isaalang-alang ang katotohanan na ang container na ito ay gumagana bilang ang default na user na ibinibigay sa Dockerfile kung saan ito binuo kung walang user na tinukoy para dito sa Kubernetes. Para sa maraming container, ang default na user na ito ay ang ugat.
Hakbang 4: Gumawa ng Pod
Sa hakbang na ito, gumawa tayo ng podsample.yaml gamit ang sumusunod na naka-attach na command:
> kubectl apply -f podsample.yaml
Hakbang 5: Suriin ang mga Kakayahan
Sa nakaraang hakbang, ang isang pod ay nilikha at tumatakbo.
Ngayon na mayroon kaming isang shell sa loob nito, maaari naming gamitin ang capsh upang i-verify ang mga kakayahan nito gamit ang sumusunod na command:
> $ kubectl exec - -stdin - -tty takip-- aboGamit ang capsh command, posibleng makita ang mga default na kapasidad ng container na nakalista tulad ng sumusunod:
Maaari naming obserbahan mula sa ibinigay na output na ang lalagyan ay may maraming mga default na kakayahan na ibinibigay sa lalagyan sa runtime.
Hakbang 6: Ihulog ang Walang asawa Kakayahan Y sa Kubernetes SecurityContext
Sa hakbang na ito, ibinabagsak namin ang nag-iisang kakayahan ng lalagyan.
I-configure natin ang yaml file gamit ang sumusunod na command:
> nano dropod.yamlPagkatapos nito, ilipat upang i-configure ang droppod.yaml file gamit ang sumusunod na ibinigay na command:
> kubectl apply -f droppod.yaml
Hakbang 7 : I-configure para Idagdag ang Single Capability sa YAML File
Sa hakbang na ito, buksan ang yaml file (dropped.yaml) na ginawa sa Hakbang 6. Pagkatapos, itakda ang container upang wala na itong access sa CAP_MKNOD na kakayahan, na nag-aalis ng kakayahang gumawa ng mga bagong file system node.
Ang na-configure na file ay tulad ng ipinapakita:
Hakbang 8 : Suriin ang mga Kakayahan
Ang yaml file ay na-configure upang i-drop ang CAP_MKNOD kakayahan.
Sa hakbang na ito, isagawa at patakbuhin ang dropcaps.yaml file upang suriin ang mga kakayahan ng container gamit ang sumusunod na command:
> $ kubectl exec - -stdin - -tty dropcaps - - aboMaaaring suriin ang mga kapasidad sa pamamagitan ng pagpapatakbo ng dropcaps file:
> # capsh - -print
Mapapansin natin na ang pod na ito ay bumaba sa CAP_MKNOD na kakayahan kumpara sa unang pod.
Hakbang 9 : I-drop ang Lahat ng Kakayahan sa Kubernetes SecurityContext
Dahil ang Kubernetes ay maaaring mag-drop ng isang solong kakayahan, maaari rin nitong i-drop ang lahat ng mga kakayahan sa pamamagitan ng securityContext. Sa hakbang na ito, i-drop ang lahat ng mga kakayahan ng container sa pamamagitan ng pagpapahiwatig ng ibinigay na command:
> nano samplenocap.yamlPagkatapos nito, i-configure ang samplenocap.yaml file gamit ang sumusunod na command:
> lumikha ng kubectl -f samplenocap.yaml
Ngayon, lumipat tayo sa susunod na hakbang upang i-drop ang lahat ng mga kapasidad sa aming mga setting ng securityContext.
Hakbang 10: I-configure ang Lahat ng Mga Kakayahan sa YAML File
Sa hakbang na ito, buksan ang yaml file na ginawa sa Hakbang 9. Pagkatapos, i-configure sa loob ng container.securityContext at i-drop ang lahat ng kakayahan ng container.
Ang na-configure na file ay tulad ng ipinapakita:
Hakbang labing-isa : Suriin ang mga Kakayahan
Patakbuhin ang nocaps sa capsh upang makita ang impormasyon tungkol sa mga kakayahan. Sa hakbang na ito, gamitin ang sumusunod na command at ipakita ang lahat ng mga kakayahan ng container:
> kubectl exec - -stdin - -tty walang sumbrero - - aboMaaaring suriin ang mga kapasidad sa sumusunod na paglalarawan sa pamamagitan ng pagpapatakbo ng samplenocaps yaml file sa capsh:
> # capsh - -print
Ang nakaraang output ay nagpapakita na ang kasalukuyang='' at bounding set='' ay walang laman ngayon. Matagumpay na natanggal ang mga kakayahan.
Hakbang 1 2 : I-install ang Bash
Sa hakbang na ito, i-install ang Bash sa pamamagitan ng apk dahil hindi gagana ang ilang function ng system kung wala kaming anumang mga kakayahan. Kahit na ang aming lalagyan ay gumagana bilang isang ugat, ang pag-install ng Bash package ay nabigo.
> # apk magdagdag ng bash
Hakbang 1 3 : Suriin ang Impormasyon ng Mga Kakayahan
Mayroong ilang mga paraan upang tingnan ang mga kakayahan ng aming lalagyan tulad ng paggamit ng capsh at proc command. Sa hakbang na ito, ipinapakita namin ang mga kapasidad ng lalagyan gamit ang proc command at ipinapakita ng proc ang mga kapasidad bilang bitmap. Bagama't hindi ito gaanong nababasa gaya ng resulta mula sa capsh, ang bawat bit na tinukoy dito ay kumakatawan sa isang tiyak na kakayahan.
> # cd /proc/1/
Dito, makikita natin na ang partikular na lalagyang ito ay walang pinaganang mga kakayahan; lahat ng mga halagang ito ay zero.
Hakbang 1 4 : Pagdaragdag ng Isang Kakayahan sa Kubernetes SecurityContext
Sa mga nakaraang hakbang, ibinaba namin ang isang kakayahan na CAP_MKNOD at ibinaba ang lahat ng kakayahan. Ngunit, sa hakbang na ito, maaari naming idagdag ang mga kakayahan pabalik.
Isagawa ang sumusunod na utos upang lumikha ng yAML file:
> nano sampleadd.yamlPagkatapos nito, i-configure ang sampleadd.yaml file.
> lumikha ng kubectl -f sampleadd.yaml
Ngayon, subukan natin ang sampleadd.yaml file at magdagdag ng isang kapasidad sa aming mga setting ng securityContext.
Hakbang 1 5 : I-configure ang Single Capability sa YAML File
Ngayon, i-configure natin ang file sa pamamagitan ng pagdaragdag ng kakayahan sa spec.container.securityContext sa capabilities.add [“MKNOD”].
Ang kakayahan ay ipinapakita sa YAML file.
Hakbang 16 : Suriin ang mga Kakayahan
Sa hakbang na ito, patakbuhin ang addcaps upang suriin ang mga kakayahan gamit ang sumusunod na command:
> kubectl exec - -stdin - -tty addcaps - - bilangAng karagdagang kapasidad ay makikita sa sumusunod na ibinigay na output:
kasalukuyang = cap_mknod+ep
Bounding set = cap_mknod
> # capsh - -print
Konklusyon
Una mong natutunan mula sa ipinatupad na halimbawa ang tungkol sa mga default na kakayahan ng container na itinalaga sa oras ng pagtakbo na ipinapakita gamit ang capsh command. Susunod, natutunan mong mag-drop ng isang kakayahan sa isang container na may pangalang CAP_MKNOD. Pagkatapos, natutunan mo rin kung paano i-drop ang lahat ng kakayahan ng container gamit ang //drop: –all configuration. Pagkatapos, gumamit kami ng dalawang paraan upang ipakita ang mga kakayahan ng mga lalagyan – gamit ang capsh at proc command.