Kubernetes--管理Pod对象的容器(3)
共享节点的网络名称空间
同一个Pod对象的各容器均运行于一个独立的、隔离的Network名称空间中,共享同一个网络协议栈及相关的网络设备。也有一些特殊的Pod对象需要运行于所在节点的名称空间中,执行系统级的管理任务,例如查看和操作节点的网络资源甚至是网络设备等。
通常,以kubeadm部署的Kubernetes集群中的 kube-apiserver、kube-controller-manager、kube-scheduler,以及kube-proxy和kube-flannel等通常都是第二种类型的Pod对象。事实上,仅需要设置spec.hostNetwork的属性为true即可创建共享节点网络名称空间的Pod对象,如下面的配置清单所示:
1 2 3 4 5 6 7 8 9 | apiVersion: v1 kind: Pod metadata: name: pod-use-hostnetwork spec: containers: - name: myapp image: ikubernetes/myapp:v1 hostNetwork: true |
将上面的配置清单保存于配置文件中,如pod-use-hostnetwork.yaml,将其创建于集群上,并查看其网络接口的相关属性信息以验证它是否能否共享使用工作节点的网络名称空间:
1 2 3 4 5 | kubectl apply -f pod-use-hostnetwork.yaml kubectl exec -it pod-use-hostnetwork -- sh / # ifconfig eth0 Link······ ······ |
如上述命令的结果显示所示,它打印出的是工作节点的网络设备及其相关的接口信息。这就意味着,Pod对象中运行的容器化应用也将监听于其所在的工作节点的IP地址之上,这可以通过直接向node03.ilinux.io节点发起请求来验证:
1 2 | 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的非授权用户运行容器,并禁止权限升级:
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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文件)中,而后创建于集群中即可验证容器进程的运行者身份:
1 2 3 4 5 | 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和容器各自支持的字段也有所不同,感兴趣的可按需对各属性进行测试。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现