为解决 CVE-2020-8554 而创建
注意: 此 chart 在 Kubernetes 1.21 版本中已弃用,自 1.22 版本起不再支持。要缓解 CVE-2020-8554,请在集群上启用 DenyServiceExternalIPs 准入控制器。
externalip-webhook 是一个验证 webhook,用于阻止服务使用随机外部 IP。集群管理员可以通过指定 allowed-external-ip-cidrs 参数来配置允许用作外部 IP 的 CIDR 列表。Webhook 将仅允许创建不需要外部 IP 或其外部 IP 在管理员指定范围内的服务。
该仓库基于 kubebuilder 构建。
要将外部 IP 限制到特定 CIDR,请取消注释并更新 webhook.yaml 中的 allowed-external-ip-cidrs。
注意:如果启用了 auth-proxy,则在 metrics_server_auth_proxy.yaml 中更新 allowed-external-ip-cidrs。
要使用此仓库中的清单部署 webhook,环境中必须安装 kustomize。
你可以在此处下载 kustomize:https://kubernetes-sigs.github.io/kustomize/installation/
make deploy
make docker-build IMG=DOCKER_IMAGE_TAG
make deploy IMG=DOCKER_IMAGE_TAG
为了方便部署,已创建了一个 rancher-externalip-webhook Helm chart。
要将外部 IP 限制到特定 CIDR,请在 helm 命令中设置 allowedExternalIPCidrs 值
构建 webhook docker 镜像并生成新 chart 版本
make rancher-ci
仅生成新 chart 版本
make rancher-chart-ci
Helm chart 修订版将生成在 build/chart 文件夹下。Helm chart 归档文件 build/chart/latest/rancher-externalip-webhook-<VERSION>.tgz 和 Helm chart 文件夹 build/chart/rancher-externalip-webhook
部署 chart
helm -n externalip-webhook template rancher-externalip-webhook build/chart/latest/rancher-externalip-webhook-<VERSION>.tgz --output-dir . --set metrics.enabled=true --set metrics.prometheusExport=true
kubectl apply -R -f ./rancher-externalip-webhook
Webhook 默认运行在 externalip-validation-system 命名空间下。可以通过更新 kustomization.yaml 文件中的 namespace 和 namePrefix 来更改。
Webhook 证书可以通过 cert-manager 生成,也可以通过上传证书的方式提供。以下部分说明了如何实现。
取消注释 kustomization.yaml 文件中所有包含 'CERTMANAGER' 的部分。
webhook-server-cert,命名空间与 kustomization.yaml 一致。caBundle 字段。每当 webhook 拒绝服务创建或更新操作时,它会发出 webhook_failed_request_count 指标。
取消注释 webhook.yaml 中的 --metrics-addr 以及 containers.Port 中的对应部分。
按照此处的步骤导出 webhook 指标。
了解如何参与 Kubernetes 社区,请访问社区页面。
你可以通过以下方式联系此项目的维护者:
参与 Kubernetes 社区需遵守 Kubernetes 行为准则。