HackyViolette

人生暇つぶし

PodSpecとContainerフィールドでのSecurityContextの違い

CKAD試験勉強シリーズです。

SecurityContext は PodSpec(spec.securityContext)とContainer(spec.containers[*].securityContext)のどちらでも設定することができます。

基本的にはこれらはスコープが異なります。

spec:
  securityContext:       # Podスコープで適用される
    runAsUser: 1010
  containers:
  - name: hoge
    image: busybox
    securityContext:     # hogeで適用される(Podスコープより強い)
      runAsUser: 1011
  - name: fuga
    image: busybox
    # securityContextが設定されていないのでPodスコープのものが適用される

最初は単に Pod と Container のスコープの違いだけかと思っていましたが、どうやら指定できるフィールドが異なるようです。

PodSpecのSecurityContext

https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core

ContainerのSecurityContext

https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core

試験で出そうな範囲に絞ると以下の違いがあります。

フィールド PodSpec Container
runAsUser
runAsGroup
privileged
capabilities

権限周りはContainerのフィールドに入れないといけないようです。

spec:
  securityContext:                   # Podスコープで適用される
    runAsUser: 1010
    # ここではcapabilitiesは指定できない
  containers:
  - name: hoge
    image: busybox
    securityContext:
      capabilities:                  # capabilitiesはcontainersの中で指定
        add: ["SYS_TIME"]
  - name: fuga
    image: busybox

一旦ここまで。ありがとうございました。