Kubernetes--管理Pod对象的容器(3)
共享节点的网络名称空间
同一个Pod对象的各容器均运行于一个独立的、隔离的Network名称空间中,共享同一个网络协议栈及相关的网络设备。也有一些特殊的Pod对象需要运行于所在节点的名称空间中,执行系统级的管理任务,例如查看和操作节点的网络资源甚至是网络设备等。
通常,以kubeadm部署的Kubernetes集群中的 kube-apiserver、kube-controller-manager、kube-scheduler,以及kube-proxy和kube-flannel等通常都是第二种类型的Pod对象。事实上,仅需要设置spec.hostNetwork的属性为true即可创建共享节点网络名称空间的Pod对象,如下面的配置清单所示:
apiVersion: v1
kind: Pod
metadata:
name: pod-use-hostnetwork
spec:
containers:
- name: myapp
image: ikubernetes/myapp:v1
hostNetwork: true
将上面的配置清单保存于配置文件中,如pod-use-hostnetwork.yaml,将其创建于集群上,并查看其网络接口的相关属性信息以验证它是否能否共享使用工作节点的网络名称空间:
kubectl apply -f pod-use-hostnetwork.yaml
kubectl exec -it pod-use-hostnetwork -- sh
/ # ifconfig
eth0 Link······
······
如上述命令的结果显示所示,它打印出的是工作节点的网络设备及其相关的接口信息。这就意味着,Pod对象中运行的容器化应用也将监听于其所在的工作节点的IP地址之上,这可以通过直接向node03.ilinux.io节点发起请求来验证:
curl node03.ilinux.io
Hello MyApp | Version:v1 | <a href="hostname.html">Pod Name</a>
另外,在Pod对象中时还可以分别使用spec.hostPID和spec.hostPC来共享工作节点的PID和IPC名称空间。
设置Pod对象的安全上下文
Pod对象的安全上下文用于设定Pod或容器的权限和访问控制功能,其支持设置的常用属性包括以下几个方面。
- 基于用户ID(UID)和组ID(GID)控制访问对象(如文件)时的权限。
- 以特权或非特权的方式运行。
- 通过Linux Capabilities为其提供部分特权。
- 基于Seccomp过滤进程的系统调用。
- 基于SELinux的安全标签。
- 是否能够进行权限升级。
Pod对象的安全上下文定义在spec.securityContext字段中,而容器的安全上下文则定义在spec.containers[].securityContext字段中,且二者可嵌套使用的字段还有所不同。下面的配置清单示例为 busybox容器定义了安全上下文,它以uid为1000的非授权用户运行容器,并禁止权限升级:
apiVersion: v1
kind: Pod
metadata:
name: pod-with-securitycontext
spec:
containers:
- name: busybox
image: busybox
command: ["/bin/sh","-c","sleep 86400"]
securityContext:
runAsNonRoot: true
runAsUser: 1000
allowPrivilegeEscalation: false
将上面的配置清单保存于配置文件(如pod-with-securitycontext.yaml文件)中,而后创建于集群中即可验证容器进程的运行者身份:
kubectl apply -f pod-with-securitycontext.yaml
kubectl exec pod-with-securitycontext -- ps aux
PID USER TIME COMMAND
1 1000 0:00 sleep 86400
14 1000 0:00 pa aux
另外,可设置的安全上下文属性还有fsGroup、seLinuxOptions、supplementalGroups、sysctls、capabilities和privileged等,且Pod和容器各自支持的字段也有所不同,感兴趣的可按需对各属性进行测试。
最新文章
- IIS 如何设置多个Access-Control-Allow-Origin
- Daily Scrum02 12.17
- AC日记——I Hate It 洛谷 P1531
- PHP函数-检查某个值是否存在于数组中
- fzu 2171 防守阵地 II
- 条款22 template method 模式
- Python脚本控制的WebDriver 常用操作 <;七>;浏览器前进和后退操作
- Linux-head,tail用法
- python设计模式之装饰器模式
- PHP设置session多级路径并定期自动清理
- 在";";中添加";
- Git操作中crlf和lf冲突问题
- java压缩指定目录下的所有文件和文件夹的代码
- Jquyer相册
- Maven项目下的Mybatis逆向工程
- volatile与synchronized有什么区别?
- BeautifuSoup的使用
- css行内省略号、垂直居中
- 洛谷P1803 凌乱的yyy dp
- Android网络开发之基本介绍
热门文章
- GPS定位解决偏差
- 《Terraform 101 从入门到实践》 第三章 Modules模块化
- 822. 走方格(acwing)
- RestTemplate的超全讲解(全)转
- git操作出现 error: The following untracked working tree files would be overwritten by ...
- 学习Java Day7
- Python绘制神经网络模型图
- RETRO研究: 持续缓解的RA患者的减量维持方案[EULAR2015_SAT0056]
- Sonarqube安装(Docker)
- Postgresql 定制执行计划pg_hint_plan