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