3.17 节点网络安全

2024-05-16 06:48
文章标签 节点 网络安全 3.17

本文主要是介绍3.17 节点网络安全,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 1、pod使用宿主节点的linux命名空间
    • 1.1 pod使用宿主节点网络命名空间
    • 1.2 pod使用宿主节点的端口
    • 1.3 pod使用宿主节点的PID和IPC命名空间
  • 2、配置容器的安全性
    • 2.1 使用指定用户运行容器
    • 2.2 限制容器用root用户运行
    • 2.3 容器获取宿主内核完整权限
    • 2.4 为容器添加宿主内核功能
    • 2.5容器中禁用内核功能
    • 2.6 阻止对容器根文件写入

1、pod使用宿主节点的linux命名空间

linux支持6类命名空间:进程通信(IPC)命名空间、进程PID命名空间、网络命名空间、挂载命名空间、UTS命名空间、用户命名空间。pod通过命名空间与其他pod或宿主机默认命名空间隔离。每个pod有自己的命名空间,比如每个pod有自己的网络命名空间,有自己的PID命名空间,有自己的IPC命名空间(有自己的IPC空间,仅允许pod内部的进程进行通信)。

1.1 pod使用宿主节点网络命名空间

之前章节pod都有自己的虚拟IP,但是一些系统级别的pod需要在宿主节点的默认网络空间中运行,可以在pod -> spec中通过设置hostNetwork为true来实现。一旦pod使用宿主节点的网络接口,pod不再拥有自己的虚拟IP,如果pod中某一进程绑定了某端口,那么该端口就被直接绑定到了宿主节点的端口上。创建pod运行在宿主节点如下:

apiVersion: v1
kind: Pod
metadata:name: host-network-pod
spec:hostNetwork: true   #使用宿主节点的网络命名空间containers:- name: mycentosimage: softwarebird/mycentos:0.1imagePullPolicy: IfNotPresentcommand: ["sh", "-c", "sleep 3600"]
[root@k8s-master01 security]# kubectl exec host-network-pod ifconfig
docker0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255ether 02:42:40:d3:7d:11  txqueuelen 0  (Ethernet)RX packets 0  bytes 0 (0.0 B)RX errors 0  dropped 0  overruns 0  frame 0TX packets 0  bytes 0 (0.0 B)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet 192.168.137.10  netmask 255.255.255.0  broadcast 192.168.137.255ether 00:0c:29:85:c1:95  txqueuelen 1000  (Ethernet)RX packets 67899  bytes 31980563 (30.4 MiB)RX errors 0  dropped 0  overruns 0  frame 0TX packets 47534  bytes 6031278 (5.7 MiB)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0flannel.1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1450inet 10.244.1.0  netmask 255.255.255.255  broadcast 0.0.0.0ether b6:df:39:53:cd:d0  txqueuelen 0  (Ethernet)RX packets 0  bytes 0 (0.0 B)RX errors 0  dropped 0  overruns 0  frame 0TX packets 0  bytes 0 (0.0 B)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536inet 127.0.0.1  netmask 255.0.0.0loop  txqueuelen 1  (Local Loopback)RX packets 63  bytes 4023 (3.9 KiB)RX errors 0  dropped 0  overruns 0  frame 0TX packets 63  bytes 4023 (3.9 KiB)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

容器运行与节点网络一直,ip地址都为192.168.137.10

1.2 pod使用宿主节点的端口

pod实现使用宿主节点的端口,而不使用宿主节点默认的命名空间,适用与流量发到节点的端口时,直接路由到pod中,不需其他中转。由于两个进程不能绑定到同一个节点,因此节点上只能调度一个使用宿主节点指定端口的pod。可以通过配置spec.containers.ports实现该功能。pod对应yaml文件如下:

apiVersion: v1
kind: Pod
metadata:name: host-port-pod
spec:containers:- name: mycentosimage: softwarebird/mycentos:0.1imagePullPolicy: IfNotPresentcommand: ["sh", "-c", "sleep 3600"]ports:- containerPort: 80hostPort: 8000    #通过请求节点端口8000直接请求podprotocol: TCP

1.3 pod使用宿主节点的PID和IPC命名空间

与上述类似,可以设置hostPID使pod可以看到宿主节点的进程,否则pod只可以看到pod内部的进程;可以设置hostIPC可以使pod与宿主节点进程进行进程通信。创建pod的yaml文件如下:

apiVersion: v1
kind: Pod
metadata:name: host-PID-IPC-pod
spec:hostPID: truehostIPC: truecontainers:- name: mycentosimage: softwarebird/mycentos:0.1imagePullPolicy: IfNotPresentcommand: ["sh", "-c", "sleep 3600"]

2、配置容器的安全性

除了以上pod使用宿主节点的名称空间,还可以通过设置pod.spec.containers.securityContext属性,配置整个pod或容器的安全属性。

2.1 使用指定用户运行容器

pod中容器运行使用的用户是做镜像时的用户,即在dockerfile文件中通过USER指定的用户,如果没有指定的话,运行容器默认使用的root用户。也可以在pod.spec.containers.securityContext.runAsUser中设置用户,会覆盖掉镜像中dockerfile中指定用户。

apiVersion: v1
kind: Pod
metadata:name: run-as-use-pod
spec:containers:- name: mycentosimage: softwarebird/mycentos:0.1imagePullPolicy: IfNotPresentcommand: ["sh", "-c", "sleep 3600"]securityContext:runAsUser: 1002

2.2 限制容器用root用户运行

为防止通过root用户运行容器,可以设置pod.spec.containers.securityContext.runAsNonRoot,让容器以非root用户运行,如果dockerfile中没有指定USER用户,会默认用root用户运行,会导致容器创建失败,pod资源清单如下所示:

apiVersion: v1
kind: Pod
metadata:name: run-as-not-root-pod
spec:containers:- name: mycentosimage: softwarebird/mycentos:0.1imagePullPolicy: IfNotPresentcommand: ["sh", "-c", "sleep 3600"]securityContext:runAsNonRoot: true

通过该描述文件创建pod后,因mycentos镜像中没有指定USER用户,导致pod创建 失败,如下所示:

[root@k8s-master01 security]# kubectl get pod
NAME                       READY   STATUS                       RESTARTS   AGE
run-as-not-root-pod        0/1     CreateContainerConfigError   0          6m4s

2.3 容器获取宿主内核完整权限

可以设置pod.spec.containers.securityContext.privileged属性来设置容器获取宿主节点完整内核权限,该类型的容器可以使用宿主节点上的所有设备。未设置该属性的,容器只能看到容器内部的设备,容器内部可以直接操作宿主机。如下所示

apiVersion: v1
kind: Pod
metadata:name: privileged-pod
spec:containers:- name: mycentosimage: softwarebird/mycentos:0.1imagePullPolicy: IfNotPresentcommand: ["sh", "-c", "sleep 3600"]securityContext:privileged: true

2.4 为容器添加宿主内核功能

如若为容器赋予完整的宿主内核权限,则容器的权限非常高,一旦容器被黑客侵入便可以操作宿主节点。可以为容器设置指定的宿主内核权限。如下所示

apiVersion: v1
kind: Pod
metadata:name: add-privileged-pod
spec:containers:- name: mycentosimage: softwarebird/mycentos:0.1imagePullPolicy: IfNotPresentcommand: ["sh", "-c", "sleep 3600"]securityContext:capabilities: 	#在容器内修改时间会修改宿主节点的时间add:- SYS_TIME

capabilities列表如下:
audit_control CAP_AUDIT_CONTROL
audit_write CAP_AUDIT_WRITE
chown CAP_CHOWN
dac_override CAP_DAC_OVERRIDE
dac_read_search CAP_DAC_READ_SEARCH
fowner CAP_FOWNER
fsetid CAP_FSETID
ipc_lock CAP_IPC_LOCK
ipc_owner CAP_IPC_OWNER
kill CAP_KILL
lease CAP_LEASE
linux_immutable CAP_LINUX_IMMUTABLE
mac_admin CAP_MAC_ADMIN
mac_override CAP_MAC_OVERRIDE
mknod CAP_MKNOD
net_admin CAP_NET_ADMIN
net_bind_service CAP_NET_BIND_SERVICE
net_broadcast CAP_NET_BROADCAST
net_raw CAP_NET_RAW
setfcap CAP_SETFCAP
setgid CAP_SETGID
setpcap CAP_SETPCAP
setuid CAP_SETUID
sys_admin CAP_SYS_ADMIN
sys_boot CAP_SYS_BOOT
sys_chroot CAP_SYS_CHROOT
sys_module CAP_SYS_MODULE
sys_nice CAP_SYS_NICE
sys_pacct CAP_SYS_PACCT
sys_ptrace CAP_SYS_PTRACE
sys_rawio CAP_SYS_RAWIO
sys_resource CAP_SYS_RESOURCE
sys_time CAP_SYS_TIME
sys_tty_config CAP_SYS_TTY_CONFIG
syslog CAP_SYSLOG
wake_alarm CAP_WAKE_ALARM

2.5容器中禁用内核功能

如若宿主节点目录或文件挂载到容器中,容器默认是可以修改文件所有者权限的,可以配置禁用容器的修改宿主文件所有者权限,如下所示

apiVersion: v1
kind: Pod
metadata:name: privileged-pod
spec:containers:- name: mycentosimage: softwarebird/mycentos:0.1imagePullPolicy: IfNotPresentcommand: ["sh", "-c", "sleep 3600"]securityContext:capabilities: 		#禁止容器修改文件的所有者权限drop:- CHOWNvolumeMounts:- mountPath: /hello                 #挂载到容器位置name: hellovolumes:- name: hellohostPath:path: /root/hello                 #节点上位置

2.6 阻止对容器根文件写入

为防止对容器根目录写入,防止对根目录的攻击,可以通过securityContext.readOnlyRootFilesystem设置,阻止对容器根目录写入。如下所示

apiVersion: v1
kind: Pod
metadata:name: readonly-rootfilesystem-pod
spec:containers:- name: mycentosimage: softwarebird/mycentos:0.1imagePullPolicy: IfNotPresentcommand: ["sh", "-c", "sleep 3600"]securityContext:readOnlyRootFilesystem: true   # 阻止对容器根目录写入volumeMounts:- name: myvolumemountPath: /volumereadOnly: falsevolumes:- name: myvolumehostPath:path: /root/data   #可以对挂在卷/root/data进行写入type: DirectoryOrCreate

参考《k8s in action》

这篇关于3.17 节点网络安全的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/994178

相关文章

web网络安全之跨站脚本攻击(XSS)详解

《web网络安全之跨站脚本攻击(XSS)详解》:本文主要介绍web网络安全之跨站脚本攻击(XSS)的相关资料,跨站脚本攻击XSS是一种常见的Web安全漏洞,攻击者通过注入恶意脚本诱使用户执行,可能... 目录前言XSS 的类型1. 存储型 XSS(Stored XSS)示例:危害:2. 反射型 XSS(Re

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

day-51 合并零之间的节点

思路 直接遍历链表即可,遇到val=0跳过,val非零则加在一起,最后返回即可 解题过程 返回链表可以有头结点,方便插入,返回head.next Code /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}*

【每日一题】LeetCode 2181.合并零之间的节点(链表、模拟)

【每日一题】LeetCode 2181.合并零之间的节点(链表、模拟) 题目描述 给定一个链表,链表中的每个节点代表一个整数。链表中的整数由 0 分隔开,表示不同的区间。链表的开始和结束节点的值都为 0。任务是将每两个相邻的 0 之间的所有节点合并成一个节点,新节点的值为原区间内所有节点值的和。合并后,需要移除所有的 0,并返回修改后的链表头节点。 思路分析 初始化:创建一个虚拟头节点

如何做好网络安全

随着互联网技术的飞速发展,网站已成为企业对外展示、交流和服务的重要窗口。然而,随之而来的网站安全问题也日益凸显,给企业的业务发展和用户数据安全带来了巨大威胁。因此,高度重视网站安全已成为网络安全的首要任务。今天我们就来详细探讨网站安全的重要性、面临的挑战以及有什么应对方案。 一、网站安全的重要性 1. 数据安全与用户隐私 网站是企业存储和传输数据的关键平台,包括用户个人信息、

JS和jQuery获取节点的兄弟,父级,子级元素

原文转自http://blog.csdn.net/duanshuyong/article/details/7562423 先说一下JS的获取方法,其要比JQUERY的方法麻烦很多,后面以JQUERY的方法作对比。 JS的方法会比JQUERY麻烦很多,主要则是因为FF浏览器,FF浏览器会把你的换行也当最DOM元素。 <div id="test"><div></div><div></div

驱动(RK3588S)第七课时:单节点设备树

目录 需求一、设备树的概念1、设备树的后缀名:2、设备树的语法格式3、设备树的属性(重要)4、设备树格式举例 二、设备树所用函数1、如何在内核层种获取设备树节点:2、从设备树上获取 gpio 口的属性3、获取节点上的属性只针对于字符串属性的4、函数读取 np 结点中的 propname 属性的值,并将读取到的 u32 类型的值保存在 out_value 指向的内存中,函数的返回值表示读取到的

OpenStack离线Train版安装系列—3控制节点-Keystone认证服务组件

本系列文章包含从OpenStack离线源制作到完成OpenStack安装的全部过程。 在本系列教程中使用的OpenStack的安装版本为第20个版本Train(简称T版本),2020年5月13日,OpenStack社区发布了第21个版本Ussuri(简称U版本)。 OpenStack部署系列文章 OpenStack Victoria版 安装部署系列教程 OpenStack Ussuri版

OpenStack离线Train版安装系列—2计算节点-环境准备

本系列文章包含从OpenStack离线源制作到完成OpenStack安装的全部过程。 在本系列教程中使用的OpenStack的安装版本为第20个版本Train(简称T版本),2020年5月13日,OpenStack社区发布了第21个版本Ussuri(简称U版本)。 OpenStack部署系列文章 OpenStack Victoria版 安装部署系列教程 OpenStack Ussuri版

OpenStack离线Train版安装系列—1控制节点-环境准备

本系列文章包含从OpenStack离线源制作到完成OpenStack安装的全部过程。 在本系列教程中使用的OpenStack的安装版本为第20个版本Train(简称T版本),2020年5月13日,OpenStack社区发布了第21个版本Ussuri(简称U版本)。 OpenStack部署系列文章 OpenStack Victoria版 安装部署系列教程 OpenStack Ussuri版