kubewarden/load-testing

GitHub: kubewarden/load-testing

基于 Locust 的 Kubewarden Policy Server 专用负载测试套件,支持直连和间接两种压测模式。

Stars: 1 | Forks: 1

[![Kubewarden Infra Repository](https://github.com/kubewarden/community/blob/main/badges/kubewarden-infra.svg)](https://github.com/kubewarden/community/blob/main/REPOSITORIES.md#infra-scope) [![Stable](https://img.shields.io/badge/status-stable-brightgreen?style=for-the-badge)](https://github.com/kubewarden/community/blob/main/REPOSITORIES.md#stable) 该仓库包含 Kubewarden Policy Server 的负载测试。 负载测试使用 [locust](https://locust.io/) 进行。 # 仓库组织结构 该仓库定义了两种类型的测试,分别位于以下目录中: * `direct-connection`:locust 将直接访问 Kubewarden 的 Policy Server。 此测试有助于了解 Policy Server 的运行状况。 * `indirect-connection`:locust 将模拟用户对 Kubernetes API server 进行操作。这些请求将导致 Kubernetes API server 访问 Policy Server。在这种情况下,报告的每秒请求数 (RPS) 会明显降低。创建此测试是因为 Policy Server 的初始版本受到一个罕见错误的影响,该错误会导致 Policy Server 停止运行。此错误仅在连接由 Kubernetes API server 发起时才会重现。有关更多详细信息,请参阅 [this issue](https://github.com/kubewarden/policy-server/issues/239)。 你应该运行哪个测试?这取决于你的范围。如果你想确保你的更改没有引入任何性能回归,请使用 `direct-connection`。 # 前置条件 部署 Kubewarden stack 并确保: * Stack 部署在 `kubewarden` Namespace 内 * 存在一个 `default` Policy Server 这可以通过遵循 Kubewarden 的快速入门文档来实现。 一旦整个 stack 启动并运行,部署以下策略: ``` kubectl apply -f policies.yaml ``` 确保 `default` Policy Server 实例已启动并正在运行: ``` kubectl get pods -n kubewarden ``` # 安装 测试将在 Kubernetes 集群内运行,即部署 Kubewarden stack 的同一个集群。 我们将使用 [this helm chart](https://github.com/deliveryhero/helm-charts/tree/master/stable/locust) 安装 locust。 按照以下步骤操作: ``` helm repo add deliveryhero https://charts.deliveryhero.io/ ``` 容器化的 locust 随后将从一个 ConfigMap 加载测试代码,该 ConfigMap 包含 `main.py`,另一个包含 python 支持文件或 fixtures。 首先,让我们为所有 locust 资源创建一个 Namespace: ``` kubectl create ns locust ``` 然后,创建用于 direct 测试的 ConfigMaps: ``` kubectl create configmap -n locust kubewarden-locustfile-direct --from-file direct-connection/main.py kubectl create configmap -n locust kubewarden-locust-direct-lib --from-file direct-connection/lib ``` 最后,创建用于 indirect 测试的 ConfigMaps: ``` kubectl create configmap -n locust kubewarden-locustfile-indirect --from-file indirect-connection/main.py kubectl create configmap -n locust kubewarden-locust-indirect-lib --from-file indirect-connection/lib ``` 现在我们需要决定要运行哪种类型的测试套件。 要执行 `direct-connection` 测试,请运行以下命令: ``` helm install -n locust locust deliveryhero/locust -f direct-connection/values.yaml ``` 要执行 `indirect-connection` 测试,请运行以下命令: ``` helm install -n locust locust deliveryhero/locust -f indirect-connection/values.yaml ``` ### indirect 测试的额外步骤 要执行 indirect 测试,必须定义一条特殊的 RBAC 规则。 这只需执行一次,通过运行以下命令: ``` kubectl apply -f rbac.yaml ``` 此 RBAC 规则授予与 locust 关联的 Service Accounts 对 `default` Namespace 内定义的资源的 [`admin`](https://kubernetes.io/docs/reference/access-authn-authz/rbac/#user-facing-roles) 访问权限。这是在 `default` Namespace(执行 `AdmissionPolicy` 策略的地方)内伪造用户请求到 Kubewarden stack(位于不同的 Namespace 内)所必需的。 ## 在测试之间切换 要在两种测试之间切换,请执行类似以下的命令,只需选择正确的 `values.yaml`: ``` helm upgrade -n locust locust deliveryhero/locust --values indirect-connection/values.yaml ``` 例如,此命令确保将运行 `indirect-connection` 测试。 ### 访问 locust Web UI 并运行测试 要访问 locust 的 UI,请运行以下命令: ``` kubectl port-forward -n locust service/locust 8089:8089 ``` 保持命令运行并使用浏览器打开 [localhost:8089](http://localhost:8089)。 自定义负载测试设置并按 "start swarming"。
标签:API服务器, ASM汇编, DevOps工具, Go, Kubewarden, Locust, Python, RPS, Ruby工具, 准入控制器, 压力测试, 子域名突变, 安全策略, 性能测试, 提示词设计, 无后门, 混沌工程, 直接连接测试, 策略引擎, 策略服务器, 网络安全挑战, 负载测试, 逆向工具, 间接连接测试