我面临与我们严格的安全策略相关的问题,这些策略是根据最佳实践配置的。以下是我们正在使用的安全上下文:
spec:
securityContext:
runAsUser: <user id, any except 0>
privileged: false
containers:
securityContext:
runAsNonRoot: true
readOnlyRootFilesystem: true
allowPrivilegeEscalation: false
此设置可以很好地强化我们的生产容器,但在调试时我们遇到了问题。
例如,当我们需要使用 TCPDUMP 验证网络连接时,我们可以使用 kubectl debug --profile=netadmin。完整命令:
kubectl debug -it <target-container> --image=nicolaka/netshoot --profile=netadmin --target=<target-container> -- tcpdump
这允许我们获得必要的NET_ADMIN,但是调试容器在非root用户下运行,导致以下错误:
Warning: would violate PodSecurity "baseline:latest": non-default capabilities (containers "debugger-jb8sv", "debugger-zklnx", "debugger-mmt72", "debugger-gd8lt" must not include "NET_ADMIN", "NET_RAW" in securityContext.capabilities.add)
tcpdump: eth0: You don't have permission to perform this capture on that device
(socket: Operation not permitted)
我想它应该通过 sysadmin 配置文件修复,但截至目前,sysadmin 配置文件在 kubectl 1.29 中不可用。
任何人都可以建议一种方法来解决这个问题,同时保持我们的安全标准吗?任何建议将不胜感激。
如果未来的 Kubernetes 版本计划使用“sysadmin”或类似的配置文件,请等待其正式发布。不建议在生产中使用实验性功能,因此请保持更新。因此,您将 Pod 安全标准应用于最新版本:强制模式下的基线标准。
本教程向您展示了如何在集群级别强制实施基线 Pod 安全标准,该标准将标准配置应用于集群中的所有命名空间。要将 Pod 安全标准应用于特定命名空间,请参阅有关应用 Pod 的官方 kuberntes 文档命名空间级别的安全标准。 基线 Pod 安全标准提供了一个方便的中间立场,可以保持豁免列表简短并防止已知的权限升级。此外,为了防止 pod 在 kube 系统中失败,您将免除命名空间应用 Pod 安全标准。
根据有关 Pod 安全标准的 Kubernetes 文档:“Kubernetes 生态系统中正在开发执行策略的其他替代方案,例如:Kubewarden、Kyverno、OPA Gatekeeper”。
您可以考虑特权较低的工具:寻找核心功能不需要“NET_ADMIN”的调试工具。例如:nslookup、dig、ping 和 traceroute、curl 等。还可以使用 kubectl exec 在目标容器内运行命令并检查其日志。 kubectl logs 查看容器日志。
请参阅此官方文档
为 Pod 或容器配置安全上下文