iT邦幫忙

2026 iThome 鐵人賽

DAY 19
0
Kubernetes

從零開始的 Kubernetes 基礎觀念與實作系列 第 19 篇

從零開始的 Kubernetes 基礎觀念與實作 DAY19

  • 分享至 

  • xImage
  •  

Security Context

這篇介紹 Security Context,它可以指定 Pod 或容器執行時使用的身分與權限,減少應用程式不必要的權限。
例如,可以讓容器以非 root 使用者執行、限制程序取得額外權限,或將容器的根檔案系統設為唯讀。

Pod 與 Container 層級的設定

securityContext 可以設定在 Pod 層級,也可以設定在 Container 層級:

  • Pod 層級:設定會套用到 Pod 中的容器,例如 runAsUser、runAsGroup 和 fsGroup。
  • Container 層級:設定只套用到指定容器,例如 allowPrivilegeEscalation 和 readOnlyRootFilesystem。

若同一項設定同時出現在 Pod 與 Container 層級,Container 層級的設定會優先套用;未在 Container 層級設定的項目則可沿用 Pod 層級設定。

常見設定

  • runAsUser:指定容器程序使用的 Linux 使用者 ID。
  • runAsGroup:指定容器程序使用的主要群組 ID。
  • runAsNonRoot:要求容器以非 root 使用者執行。
  • fsGroup:設定 Pod 中程序存取磁碟區時使用的補充群組 ID。
  • allowPrivilegeEscalation:控制程序是否能取得比父程序更多的權限。
  • readOnlyRootFilesystem:將容器的根檔案系統設為唯讀。

以下範例把 Pod 中的容器設為使用 UID 1000、GID 3000 執行,並禁止權限提升及寫入根檔案系統:

apiVersion: v1
kind: Pod
metadata:
  name: security-demo
spec:
  securityContext:
    runAsUser: 1000
    runAsGroup: 3000
    runAsNonRoot: true
  containers:
    - name: security-demo
      image: busybox
      command: ["sh", "-c", "id && sleep 3600"]
      securityContext:
        allowPrivilegeEscalation: false
        readOnlyRootFilesystem: true

將根檔案系統設為唯讀後,應用程式若需要寫入暫存檔或日誌,可能會無法正常運作。可以視需求把可寫入的路徑掛載為 Volume。

部署並確認執行身分

kubectl apply -f security-demo.yaml
kubectl get pod security-demo
kubectl exec security-demo -- id

image

id 指令可以查看容器程序實際使用的使用者與群組。若 Pod 無法啟動或應用程式出錯,可以查看狀態與事件:

kubectl describe pod security-demo
kubectl logs security-demo

小結

Security Context 能限制 Pod 或容器的執行身分與權限,降低應用程式以過高權限執行的風險。實際設定時,仍需確認容器映像和應用程式支援指定的 UID、GID,以及唯讀檔案系統等限制。
Kubernetes 官方文件也建議依需求以較低權限執行容器,並限制權限提升。


上一篇
從零開始的 Kubernetes 基礎觀念與實作 DAY18
下一篇
從零開始的 Kubernetes 基礎觀念與實作 DAY20
系列文
從零開始的 Kubernetes 基礎觀念與實作 共 20 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言