
Kubernetes Goat 基于 KIND 的本地部署用 Docker 容器节点构建可攻防的 Kubernetes 学习集群【免费下载链接】kubernetes-goatKubernetes Goat is a Vulnerable by Design cluster environment to learn and practice Kubernetes security using an interactive hands-on playground 项目地址: https://gitcode.com/GitHub_Trending/ku/kubernetes-goat本文以 Kubernetes Goat 仓库中的 KIND 部署指南为核心完整讲解如何在本地用 KINDKubernetes IN Docker一键拉起 Kubernetes 集群并部署全部漏洞场景从kind、kubectl、helm三个前置工具的准备到setup-kind-cluster-and-goat.sh的逐行行为剖析、场景清单与端口映射再到环境访问与安全环境销毁。读完后你应能在自己的主机上从零搭建、验证并彻底拆除一套完整的 Kubernetes 安全攻防演练环境。什么是 KIND为什么用它跑 Kubernetes GoatKIND 是一个基于 Docker 容器充当 Kubernetes 节点container nodes来运行本地 Kubernetes 集群的工具。它最初是为测试 Kubernetes 本身而设计的同样适用于本地开发或 CI 场景。选择 KIND 的意义在于不依赖云厂商账号与配额一个 Docker 宿主就能承载完整的控制面与数据面集群即容器销毁集群只需删除几个容器非常适合用完即拆的安全实验Kubernetes Goat 的所有漏洞场景特权容器、hostPath 挂载、DinD 等在 KIND 节点容器上都能直接复现宿主机就是 KIND 节点容器本身隔离边界清晰、不污染宿主机。仓库中 KIND 相关的落地代码集中在 platforms/kind-setup 目录包含一键部署脚本、集群配置、访问脚本与拆机脚本官方文档入口为 guide/docs/how-to-run/kind.md。前置条件kind、kubectl 与 helm按文档要求开始部署前需在宿主系统上准备好三样工具并逐一验证工具用途验证命令kind创建并管理基于 Docker 的本地集群kind versionkubectl对集群执行 k8s 资源操作且需要cluster-admin 级别访问权限kubectl versionhelm部署 metadata-db 等 Helm Chart 场景helm version三项工具的安装方式可分别参照 kind、kubectl 与 Helm 的官方安装文档安装完成后确保它们在PATH中可用。kubectl version能正常返回版本信息说明 kubectl 与集群凭据链路基本就绪。一键部署流程部署步骤在 guide/docs/how-to-run/kind.md 中只有三步但背后是一条完整的自动化链路。第 1 步克隆仓库git clone https://github.com/madhuakula/kubernetes-goat.git第 2 步进入 KIND 部署目录cd kubernetes-goat/platforms/kind-setup第 3 步运行部署脚本bash setup-kind-cluster-and-goat.sh脚本内部到底做了什么阅读 platforms/kind-setup/setup-kind-cluster-and-goat.sh 源码可以看到脚本分四段执行环境自检先执行kind version未安装则提示并退出再执行docker version --format {{.Server.Version}}确认 Docker 守护进程可用任一失败都会提前终止避免后续步骤在半配置状态下执行。创建 KIND 集群kind create cluster --config kind-cluster-setup.yaml --name kubernetes-goat-cluster集群名固定为kubernetes-goat-cluster。配套的 kind-cluster-setup.yaml 内容极简kind: Cluster apiVersion: kind.x-k8s.io/v1alpha4 nodes: - role: control-plane即默认拓扑——单节点、control-plane 角色。这也意味着所有 workload包括特权容器与 hostPath 挂载类场景都运行在这个唯一的 KIND 节点容器上。切回仓库根目录cd ../..因为后续部署脚本引用的是仓库根目录下的scenarios/清单。部署 Kubernetes Goat调用根目录的 setup-kubernetes-goat.sh 完成全部场景的部署。值得注意的脚本细节是setup-kubernetes-goat.sh支持两个可选参数见其开头的参数解析循环--insecure设置KUBECTL_INSECURE--insecure-skip-tls-verify与HELM_INSECURE--kube-insecure-skip-tls-verify用于跳过 API Server 的 TLS 证书校验本地 KIND 集群通常自带受信 CA一般无需此参数--kubeconfig path显式指定 KUBECONFIG便于多集群环境下精确指向kubernetes-goat-cluster。脚本内部按以下顺序部署可对照 setup-kubernetes-goat.sh 逐行验证校验kubectl可用部署insecure super admin场景kubectl apply -f scenarios/insecure-rbac/setup.yaml创建集群级越权 RBAC这是后续多场景攻击链的起点通过 Helm 安装 metadata-db 场景helm install metadata-db scenarios/metadata-db/依次kubectl apply各漏洞场景清单scenarios/batch-check/job.yaml、scenarios/build-code/deployment.yaml、scenarios/cache-store/deployment.yaml、scenarios/health-check/deployment.yaml、scenarios/hunger-check/deployment.yaml、scenarios/internal-proxy/deployment.yaml、scenarios/kubernetes-goat-home/deployment.yaml、scenarios/poor-registry/deployment.yaml、scenarios/system-monitor/deployment.yaml、scenarios/hidden-in-layers/deployment.yaml输出提示确保所有 Pod 处于 Running 状态后再运行access-kubernetes-goat.sh。部署完成后的验证脚本执行完毕后回到仓库根目录确认资源就绪kubectl get pods此时应看到kubernetes-goat-home、health-check、internal-proxy、system-monitor、poor-registry、hunger-check、batch-check等负载陆续进入 Running 状态。访问 Kubernetes Goat 环境集群与场景就绪后在仓库根目录执行bash access-kubernetes-goat.shaccess-kubernetes-goat.sh 的工作方式是对每个目标 Pod 循环轮询其status.phase与containerStatuses[*].ready未就绪时每 10 秒重试一次全部就绪后为各 Pod 建立kubectl port-forward把本地 1230~1236 端口段映射到集群内各服务本地端口目标 Pod / 容器端口对应场景1230build-code:3000代码库中泄露敏感密钥1231health-check:80Docker-in-Docker 利用1232internal-proxy:3000K8s 世界中的 SSRF1233system-monitor:8080容器逃逸访问宿主系统1234kubernetes-goat-home:80Goat 门户首页1235poor-registry:5000攻击私有镜像仓库1236hunger-check:8080big-monolith命名空间资源 DoS随后浏览器访问http://127.0.0.1:1234即可进入 Kubernetes Goat 首页逐个点开场景开始演练。该脚本同样支持--insecure与--kubeconfig参数解析逻辑与 setup 脚本一致。KIND 环境下的安全特性为什么漏洞场景能生效Kubernetes Goat 的许多场景依赖特权容器与 hostPath 挂载例如 scenarios/health-check/deployment.yaml 中Pod 的securityContext.privileged: true以hostPath: /只读挂载宿主根目录host-root卷由一个busyboxinit 容器探测containerd.sock或docker.sock的位置再软链到统一卷container-socket-unified主容器把该 socket 挂到/var/run/docker.sock、/run/docker.sock等多个路径。在普通 Kubernetes 集群中这些挂载指向的是物理/虚拟机宿主而在 KIND 上宿主就是kubernetes-goat-cluster对应的 KIND 节点容器——你在其中做容器逃逸、DinD 利用边界止于该节点容器这正是 KIND 适合安全实验的原因真实漏洞链可完整复现但影响面可控。访问与拆除README 的完整操作对照platforms/kind-setup/README.md 将 Bash 与 WindowsPowerShell两套入口并列给出与本文主体流程完全一致操作BashWindows PowerShell部署集群 Goatbash setup-kind-cluster-and-goat.sh.\setup-kind-cluster-and-goat.ps1暴露场景到本地bash access-kubernetes-goat.sh.\access-kubernetes-goat.ps1拆除环境bash teardown-cluster.sh.\teardown-cluster.ps1其中 teardown-cluster.sh 只有两行核心逻辑先调用根目录的 teardown-kubernetes-goat.sh 清理 Goat 资源删除 superadmin ClusterRoleBinding 与 ServiceAccount、删除 all-your-base / belong-to-us 等 RBAC、helm delete metadata-db --no-hooks、删除 kube-system 中的 tiller-deploy并逐一kubectl delete -f各场景清单再执行kind delete cluster --name kubernetes-goat-cluster销毁整个 KIND 集群。README 也建议练习结束后彻底删除集群比逐个清理资源更干净。小结与下一步本文沿仓库 KIND 部署文档的主线覆盖了前置工具准备、一键部署脚本的内部机制、集群配置拓扑、场景部署顺序、端口转发映射、KIND 下漏洞场景的生效原理以及环境拆除方式。部署成功后可继续按 Getting Started 指南 从http://127.0.0.1:1234门户进入各个场景逐一演练各场景的完整 YAML 与镜像构建代码均可在仓库 scenarios 与 infrastructure 目录中对照阅读便于从能跑通深入到看得懂为什么这么脆弱。【免费下载链接】kubernetes-goatKubernetes Goat is a Vulnerable by Design cluster environment to learn and practice Kubernetes security using an interactive hands-on playground 项目地址: https://gitcode.com/GitHub_Trending/ku/kubernetes-goat创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考