1.修改容器内主机名和/etc/hosts 文件,让持久生效,通过修改资源清单方式
---
kind: Pod
apiVersion: v1
metadata:
name: root
spec:
hostname: myhost # 修改主机名
hostAliases: # 修改 /etc/hosts
- ip: 192.168.88.240 # IP 地址
hostnames: # 名称键值对
- harbor # 主机名
containers:
- name: apache
image: myos:httpd
2.root特权容器
1.系统进程特权,可以引起宿主机数据的变更
hostPID: true # 特权,共享系统进程
2.pod容器网络特权
hostNetwork: true # 特权,共享主机网络
3.root特权
securityContext: # 安全上下文值
privileged: true # root特权容器
# root用户特权的使用
[root@node-0001 /]# mkdir /sysroot
[root@node-0001 /]# mount /dev/vda1 /sysroot
[root@node-0001 /]# mount -t proc proc /sysroot/proc
[root@node-0001 /]# chroot /sysroot
sh-4.2# : 此处已经是 node 节点上的 root 用户了
--- #特权资源文件编写
kind: Pod
apiVersion: v1
metadata:
name: root
spec:
hostPID: true # 特权,共享系统进程
hostNetwork: true # 特权,共享主机网络
containers:
- name: apache
image: myos:httpd
securityContext: # 安全上下文值
privileged: true # root特权容器
3.pod安全策略(基于名称空间来设置)
1.语法:...pod-security.kubernetes.io/标签:策略
kubectl label namespace myweb pod-security.kubernetes.io/标签:策略
2.pod准入控制标签:
1)enforce:违反策略会导致pod被拒绝
2)audit:违反策略会触发审计日志,但是pod仍然可以被接受
3)warn:违反策略会查发警告信息,但是pod仍然可以被接受
3.pod安全策略
1)privileged:不受限制的策略,提供最大范围权限,可以允许设置特权提升规则
2)baseline:弱限制性的策略,禁止已知的策略提升权限,允许使用默认的pod配置
3)restricted:非常严格的限制性策略,几乎不允许任何特权提升的行为
4.测试安全策略:kubectl label namespaces mytest pod-security.kubernetes.io/warn=baseline
kubectl -n mytest apply -f root.yaml
即使这个名称空间设置的弱限制性策略,由于没有设置安全声明,也不能成功创建
5.pod设置安全声明
---
kind: Pod
apiVersion: v1
metadata:
name: nonroot
spec:
containers:
- name: php
image: myos:php-fpm
securityContext: # 声明安全策略
allowPrivilegeEscalation: false # 容器内没有权限提升的行为
runAsNonRoot: true # 容器运行在非 root 用户下
runAsUser: 65534 # 运行容器用户的 UID
seccompProfile: # 容器使用了默认的安全配置
type: "RuntimeDefault"
capabilities: # 容器禁用了所有特权能力
drop: ["ALL"]
1.修改容器内主机名和/etc/hosts 文件,让持久生效,通过修改资源清单方式
---
kind: Pod
apiVersion: v1
metadata:
name: root
spec:
hostname: myhost # 修改主机名
hostAliases: # 修改 /etc/hosts
- ip: 192.168.88.240 # IP 地址
hostnames: # 名称键值对
- harbor # 主机名
containers:
- name: apache
image: myos:httpd
2.root特权容器
1.系统进程特权,可以引起宿主机数据的变更
hostPID: true # 特权,共享系统进程
2.pod容器网络特权
hostNetwork: true # 特权,共享主机网络
3.root特权
securityContext: # 安全上下文值
privileged: true # root特权容器
# root用户特权的使用
[root@node-0001 /]# mkdir /sysroot
[root@node-0001 /]# mount /dev/vda1 /sysroot
[root@node-0001 /]# mount -t proc proc /sysroot/proc
[root@node-0001 /]# chroot /sysroot
sh-4.2# : 此处已经是 node 节点上的 root 用户了
--- #特权资源文件编写
kind: Pod
apiVersion: v1
metadata:
name: root
spec:
hostPID: true # 特权,共享系统进程
hostNetwork: true # 特权,共享主机网络
containers:
- name: apache
image: myos:httpd
securityContext: # 安全上下文值
privileged: true # root特权容器
3.pod安全策略(基于名称空间来设置)
1.语法:...pod-security.kubernetes.io/标签:策略
kubectl label namespace myweb pod-security.kubernetes.io/标签:策略
2.pod准入控制标签:
1)enforce:违反策略会导致pod被拒绝
2)audit:违反策略会触发审计日志,但是pod仍然可以被接受
3)warn:违反策略会查发警告信息,但是pod仍然可以被接受
3.pod安全策略
1)privileged:不受限制的策略,提供最大范围权限,可以允许设置特权提升规则
2)baseline:弱限制性的策略,禁止已知的策略提升权限,允许使用默认的pod配置
3)restricted:非常严格的限制性策略,几乎不允许任何特权提升的行为
4.测试安全策略:kubectl label namespaces mytest pod-security.kubernetes.io/warn=baseline
kubectl -n mytest apply -f root.yaml
即使这个名称空间设置的弱限制性策略,由于没有设置安全声明,也不能成功创建
5.pod设置安全声明
---
kind: Pod
apiVersion: v1
metadata:
name: nonroot
spec:
containers:
- name: php
image: myos:php-fpm
securityContext: # 声明安全策略
allowPrivilegeEscalation: false # 容器内没有权限提升的行为
runAsNonRoot: true # 容器运行在非 root 用户下
runAsUser: 65534 # 运行容器用户的 UID
seccompProfile: # 容器使用了默认的安全配置
type: "RuntimeDefault"
capabilities: # 容器禁用了所有特权能力
drop: ["ALL"]