Kubernetes Admission Controller Webhook 示例教程
项目介绍
admission-controller-webhook-demo
是一个开源项目,由 stackrox
开发,旨在提供一个简单的 HTTP 服务器,作为 Kubernetes 的 Mutating Admission Webhook。这个示例 webhook 的主要功能是强制执行更安全的默认设置,即要求容器以非 root 用户运行。尽管仍然可以以 root 用户运行容器,但该 webhook 会阻止这种操作,从而提高安全性。
项目快速启动
克隆项目
首先,克隆项目到本地:
git clone https://github.com/stackrox/admission-controller-webhook-demo.git
cd admission-controller-webhook-demo
构建镜像
如果需要自定义 webhook 服务器,可以构建并推送镜像:
export IMAGE=<your-image-tag>
make push-image
部署 Webhook
修改 deployment/deployment.yaml
中的镜像标签,并部署 webhook:
kubectl apply -f deployment/deployment.yaml
应用案例和最佳实践
强制非 Root 用户运行容器
该 webhook 的一个典型应用是强制所有容器以非 root 用户运行,从而提高集群的安全性。例如,当尝试部署一个以 root 用户运行的 Pod 时,webhook 会拒绝该请求:
apiVersion: v1
kind: Pod
metadata:
name: example-pod
spec:
containers:
- name: example-container
image: nginx
securityContext:
runAsUser: 0
部署上述 Pod 时,会收到如下错误:
Error from server (InternalError): error when creating "examples/pod-with-conflict.yaml": Internal error occurred: admission webhook "webhook-server.webhook-demo.svc" denied the request: runAsNonRoot specified but runAsUser set to 0 (the root user)
最佳实践
- 始终使用非 root 用户:在所有容器定义中,明确指定非 root 用户。
- 定期更新镜像:确保使用的镜像是最新的,以避免安全漏洞。
- 监控和日志:配置监控和日志收集,以便及时发现和响应异常行为。
典型生态项目
Kubernetes 生态
- Prometheus:用于监控 Kubernetes 集群的状态和性能。
- Grafana:用于可视化 Prometheus 收集的数据。
- Helm:用于管理 Kubernetes 应用的包。
- Istio:用于服务网格,提供流量管理、安全性和可观察性。
这些项目与 admission-controller-webhook-demo
结合使用,可以构建一个完整、安全且高效的 Kubernetes 生态系统。