有用過Docker的人應該都知道Container預設的user是root,但是這個root user因為安全性的考量,權限比一般Linux的root user小。
我們可以在Dockerfile中,加上USER來改變預設的user:
USER 1000
後面的1000是user id,也可以帶入user名稱。
我們如果想要幫這個user開啟更多權限可以:
# 加入NET_ADMIN的權限
docker run --cap-add NET_ADMIN
# 拿掉NET_ADMIN的權限
docker run --cap-drop NET_ADMIN
# 特權模式,所有權限全開
docker run --privileged
這邊的NET_ADMIN是網路管理員的權限,要看更多種的話可以參考 docker容器权限设置--cap-add | --cap-drop | privileged。
那麼在Kubernetes要怎麼實現呢?
apiVersion: v1
kind: Pod
metadata:
name: web-Pod
spec:
securityContext:
runAsUser: 1000
containers:
- name: ubuntu
image: ubuntu
command: ["sleep", "3600"]
# Pod和Container都可以設定
securityContext:
runAsUser: 1001
capabilities:
add: ["MAC_ADMIN"]
我們只要在YAML中加入securityContext就可以了。
那從上面可以發現我在Pod和Container都加入了securityContext,兩者都有決定runAsUser,這時候Container的user id會是多少呢?
答案是1001。
如果只設定Pod,那這個Pod內的Container都會被帶入這個設定。但是如果Container裡面也有設定的話就會優先於Pod~
當初會想參加鐵人賽是因為在找資料的過程中,常常得到過去鐵人賽前輩文章的幫助,又剛好在準備CKA考試,想要向前輩一樣把自己的筆記分享出去~
一開始是想說要準備很多的存稿,這樣應該就不會太有壓力。誰知道當我報名參賽沒多久,就因為一些原因導致我決定馬上要換工作,在職的工作加上密集的面試讓我只帶著一篇存稿的狀況參賽QQ
嘗試將筆記用白話文寫出來的過程對我來說真的非常有幫助。很多時候我在寫的過程中會突然發現自己好像對某些觀念不是很準確,這時候我就必須去查資料、問朋友來搞清楚,這段過程真的感到獲益良多。我的面試也因為準備鐵人賽而得到幫助,並且找到理想的工作~
沒有存稿加上知識儲備量不足,而我也不是每天都有大量的時間可以充分地準備,所以有幾天都沒有寫完就交出去。對此我是真的感到很抱歉。
當初是以考CKA為目的來參賽,目前寫的範圍還沒有包含全部的考試範圍,還沒寫到的部份就是還沒準備的部分,所以我還是會將剩下的內容補完再去參加考試~現在想想在職用30天準備還是太天真了,未來如果還會參賽的話,一定不會是這種狀況QQ
沒想到隔年參賽情況更加慘烈
附上 CKA 完賽心得
https://ithelp.ithome.com.tw/articles/10331789#response-326269
docker容器权限设置--cap-add | --cap-drop | privileged