Files
kuboard-press/learning/k8s-intermediate/config/sec-ctx/pod.md
huanqing.shao b4a2a48480 Adsense
2019-10-12 20:01:03 +08:00

85 lines
3.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
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 1000groupID 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: