共享节点的网络名称空间

同一个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和容器各自支持的字段也有所不同,感兴趣的可按需对各属性进行测试。

Kubernetes--管理Pod对象的容器(3)的更多相关文章

  1. k8s管理pod资源对象(上)

    一.容器于pod资源对象 现代的容器技术被设计用来运行单个进程时,该进程在容器中pid名称空间中的进程号为1,可直接接收并处理信号,于是,在此进程终止时,容器即终止退出.若要在一个容器中运行多个进程, ...

  2. Kubernetes之Pod使用

    一.什么是Podkubernetes中的一切都可以理解为是一种资源对象,pod,rc,service,都可以理解是 一种资源对象.pod的组成示意图如下,由一个叫”pause“的根容器,加上一个或多个 ...

  3. kubernetes concepts -- Pod Overview

    This page provides an overview of Pod, the smallest deployable object in the Kubernetes object model ...

  4. 2-1.了解Pod对象

    1.Pod参数定义 # 必填,版本号 apiVersion: string kind: Pod # 必填,元数据 metadata: # 必填,Pod对象的名称(命名规范需要符合RFC 1035规范) ...

  5. (转)Kubernetes 配置Pod和容器(十七) 使用Secrets管理安全证书

    转:https://www.jianshu.com/p/530b3642c642 本章节展示了如何把密码秘钥等敏感数据安全的注入到Pod里面. 转换安全数据成base-64表示 假设你有两个秘密数据: ...

  6. Kubernetes — 深入解析Pod对象:基本概念(二)

    作为 Kubernetes 项目里最核心的编排对象,Pod 携带的信息非常丰富.其中,资源定义(比如 CPU.内存等),以及调度相关的字段.在本篇,我们就先从一种特殊的 Volume 开始,来帮助你更 ...

  7. Docker Kubernetes 创建管理 Pod

    Docker Kubernetes 容器扩容与缩容 环境: 系统:Centos 7.4 x64 Docker版本:18.09.0 Kubernetes版本:v1.8 管理节点:192.168.1.79 ...

  8. [转帖] Kubernetes如何使用ReplicationController、Replica Set、Deployment管理Pod ----文章很好 但是还没具体操作实践 也还没记住.

    Kubernetes如何使用ReplicationController.Replica Set.Deployment管理Pod https://blog.csdn.net/yjk13703623757 ...

  9. Kubernetes基石-pod容器

    引用三个问题来叙述Kubernetes的pod容器 1.为什么不直接在一个Docker容器中运行所有的应用进程. 2.为什么pod这种容器中要同时运行多个Docker容器(可以只有一个) 3.为什么k ...

  10. Kubernetes — 深入解析Pod对象:基本概念(一)

    在上一篇文章中,我详细介绍了 Pod 这个 Kubernetes 项目中最重要的概念. 现在,你已经非常清楚:Pod,而不是容器,才是 Kubernetes 项目中的最小编排单位.将这个设计落实到 A ...

随机推荐

  1. Java:枚举类型

    Java:枚举类型 每博一文案 师父说:人活一世,每个人都有他的特别,每个人都值得被温柔相待.红尘一遭,每段经历都有它的必然, 每段经历都造就了现在的你,最快乐的事情,就是做自己,最浪漫的事情,就是爱 ...

  2. drf 认证组件、权限组件、频率组件

    认证组件 访问某个接口 需要登陆后才能访问 #第一步 写一个登录功能 用户表 User表 UserToken表 :存储用户登录状态 [这个表可以没有 如果没有 把字段直接卸载User表上也可以] 登录 ...

  3. C# SMTP发邮件不支持465端口的解决方案

    C# 发邮件帮助类传送门(465端口除外): https://www.cnblogs.com/dennisdong/p/15953790.html 一.问题解惑,为什么465发送失败 查阅资料得知,. ...

  4. 无法从“System.ReadOnlyMemory<byte>”转换为“byte[]”

    1.问题复现 RabbitMQ的官方示例:RabbitMQ消费端(接收端)获取消息时抛出异常,具体代码如下 var consumer = new EventingBasicConsumer(chann ...

  5. 视觉十四讲:第十二讲_RGB-D稠密点云

    1.点云地图 所谓点云,就是由一组离散的点表示的地图,最基本的点包含x,y,z三维坐标,也可以带有r,g,b的彩色信息. #include <iostream> #include < ...

  6. GoLang 的协程调度和 GMP 模型

    GoLang 的协程调度和 GMP 模型 GoLang 是怎么启动的 关于 GoLang 的汇编语言,请查阅 参考文献[1] 和 参考文献[2] 编写一个简单的 GoLang 程序 main.go, ...

  7. Symbol详解

    Symbol Symbol是es6引入的一个新的原始数据类型,是一个独一无二的值. 目前为止,js的数据类型有以下几种: 数据类型 说明 undefined undefined null null b ...

  8. Appium自动化(一)-window环境搭建详细教程

    一.软件环境所需要运用的工具 1.JAVA1.8.1以上环境 2.AndroidSDK 3.Appium Desktop(appium servers) 4.Appium Client 5.Appiu ...

  9. CF1418D Trash Problem

    题目传送门 思路 这题其实非常的简单,完全到不了 \(\mathcal *2100\). 发现这个题目描述有点诈骗,但是翻译的挺不错,实质上问题就是给你 \(n\) 个点,让你动态维护相邻两个点的差值 ...

  10. 钓鱼攻击之:OFFICE CVE-2017-11882

    钓鱼攻击之:OFFICE CVE-2017-11882 目录 钓鱼攻击之:OFFICE CVE-2017-11882 1 环境准备 2 利用过程 2.1 生成验证POC 2.2 CVE-2017-11 ...