3.0 KiB
3.0 KiB
vssueId, layout, description, meta
| vssueId | layout | description | meta | |||||
|---|---|---|---|---|---|---|---|---|
| 109 | LearningLayout | Kubernetes教程_为Pod容器组配置Security Context安全上下文。在 Pod 的定义中增加 securityContext 字段,即可为 Pod 指定 Security 相关的设定。通过该字段指定的内容将对该 Pod 中所有的容器生效。 |
|
为Pod设置Security Context
在 Pod 的定义中增加 securityContext 字段,即可为 Pod 指定 Security 相关的设定。 securityContext 字段是一个 PodSecurityContext 对象。通过该字段指定的内容将对该 Pod 中所有的容器生效。
Pod示例
以下面的 Pod 为例:
<<< @/.vuepress/public/statics/learning/sec-ctx/security-context-1.yaml {7,8,9,21}
在上面的例子中:
spec.securityContext.runAsUser字段指定了该 Pod 中所有容器的进程都以UserID1000的身份运行,spec.securityContext.runAsGroup字段指定了该 Pod 中所有容器的进程都以GroupID3000的身份运行- 如果该字段被省略,容器进程的GroupID为 root(0)
- 容器中创建的文件,其所有者为 userID 1000,groupID 3000
spec.securityContext.fsGroup字段指定了该 Pod 的 fsGroup 为 2000- 数据卷 (本例中,对应挂载点
/data/demo的数据卷为sec-ctx-demo) 的所有者以及在该数据卷下创建的任何文件,其 GroupID 为 2000
- 数据卷 (本例中,对应挂载点
执行Pod示例
-
创建 Pod
kubectl apply -f https://kuboard.cn/statics/learning/sec-ctx/security-context-1.yaml -
验证 Pod 已运行
kubectl get pod security-context-demo -
进入容器的命令行界面
kubectl exec -it security-context-demo -- sh -
在该命令行界面中,查看正在运行的进程
ps请注意,所有的进程都以 user 1000 的身份运行(由 runAsUser 指定),输出结果如下所示:
PID USER TIME COMMAND 1 1000 0:00 sleep 1h 6 1000 0:00 sh ... -
在命令行界面中,切换到目录
/data,并查看目录中的文件列表cd /data ls -l请注意,
/data/demo目录的 groupID 为 2000(由 fsGroup 指定),输出结果如下所示:drwxrwsrwx 2 root 2000 4096 Oct 4 05:08 demo -
在命令行界面中,切换到目录
/data/demo,并创建一个文件cd /data/demo echo hello > testfile ls -l请注意,
testfile的 groupID 为 2000 (由 FSGroup 指定),输出结果如下所示:-rw-r--r-- 1 1000 2000 6 Oct 4 05:09 testfile -
在命令行界面中执行
id命令,输出结果如下所示:$ id uid=1000 gid=3000 groups=2000请注意:
- gid 为 3000,与
runAsGroup字段所指定的一致 - 如果
runAsGroup字段被省略,则 gid 取值为 0(即 root),此时容器中的进程将可以操作 root Group 的文件
- gid 为 3000,与
-
执行
exit退出命令行界面
🎉 🎉 🎉