如何在root用户下使用kubectl debug来调试生产容器?

问题描述 投票:0回答:1

我面临与我们严格的安全策略相关的问题,这些策略是根据最佳实践配置的。以下是我们正在使用的安全上下文:

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 security debugging kubectl kubernetes-security
1个回答
0
投票

如果未来的 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 或容器配置安全上下文

了解更多信息。

© www.soinside.com 2019 - 2024. All rights reserved.