在自定义K8s flexvolume开发过程中,我观察到容器能够查看K8s minion(主机(上运行的完整块设备列表。基本上,如果在容器上执行"lsblk",主机操作系统上的"lsblk"命令输出也是可见的。同样,如果容器c1具有分配的柔性体积v1,并且c2具有v2;并且c1和c2都在同一个K8s主机上运行,那么c1操作系统可以在"lsblk"输出中看到v1和v2。在c1只能访问v1而不能访问v2的情况下,这是预期的,但出于某些安全方面,我们不希望c1 os查看c2或K8s主机访问的任何块设备。K8s正在使用docker作为集装箱化服务。
请任何人在这里指导以实现预期的配置。K8s命名空间还有路要走吗?如果是,你能举个例子吗?提前谢谢。
- 持久卷和主机卷/路径没有名称空间
- 但是,持久卷声明PVC属于单个命名空间
- 您可以通过PVC使用存储,这样每个命名空间都可以访问自己的PVC
- 按名称空间分隔容器/pod
- 在生产中不使用主机卷
- 使用podSecurityPolicy允许特定的卷类型并拒绝其他卷类型,如HostPaths
此外,已经绑定到一个PVC的PV不能绑定到另一个,与命名空间无关。这意味着即使用户试图制造一种PVC,该PVC声称来自不同的命名空间,它将失败。使用三叉戟时,PV和PVC默认情况下同时销毁。可以更改此行为,以便PV被保留,但PV与PVC结合了一次,然后未绑定的再也无法绑定。
https://netapp.io/2018/06/15/highly-secure-kubernetes-persistent-volumes/
使用pod安全策略限制pod不能访问主机路径,只能访问某些特定的卷类型和pvs
https://kubernetes.io/docs/concepts/policy/pod-security-policy/#volumes-和文件系统
AllowedHostPaths - See Volumes and file systems.
Volumes and file systems
Volumes - Provides a whitelist of allowed volume types. The allowable values correspond to the volume sources that are defined when creating a volume. For the complete list of volume types, see Types of Volumes. Additionally, * may be used to allow all volume types.
The recommended minimum set of allowed volumes for new PSPs are:
configMap
downwardAPI
emptyDir
persistentVolumeClaim
secret
projected