StackRox Kubernetes 安全平台对容器环境进行风险分析,提供可见性和运行时告警,并通过强化环境来主动提高安全性。StackRox 集成了容器生命周期的每个阶段:构建、部署和运行时。
StackRox Kubernetes 安全平台基于原名为 Prevent 的产品构建,该产品本身曾被称为 Mitigate 和 Apollo。您可能会在代码或文档中找到对这些先前名称的引用。
您可以通过 Slack (#stackrox) 联系我们。其他方式,请访问我们的社区中心 stackrox.io。
有关活动更新、博客和其他资源,请关注 StackRox 社区网站 stackrox.io。
关于 StackRox 行为准则。
要报告漏洞或错误。
从 4.10 版本开始,可以使用 operator 安装 StackRox。
[!WARNING] 以下安装方法已弃用。
StackRox 提供通过 Helm Charts 快速安装。请遵循 Helm 安装指南 在你的系统上获取 helm CLI。然后运行 helm 快速安装脚本,或前往使用 Helm 手动安装章节查看配置选项。
最终,脚本会自动打开浏览器并让你登录 StackRox。由于证书是自签名的,可能会显示证书警告。请参阅访问 StackRox 用户界面 (UI) 部分了解更多关于警告的信息。认证后,你可以通过 https://localhost:8000/main/dashboard 访问仪表板。
按照 Helm 安装指南 在你的系统上获取 helm CLI。
使用 Helm 部署包括 4 个步骤:
首先,StackRox Central Services 将被添加到你的 Kubernetes 集群中。这包括 UI 和 Scanner。首先,将 stackrox/helm-charts/opensource 仓库添加到 Helm。```sh helm repo add stackrox https://raw.githubusercontent.com/stackrox/helm-charts/main/opensource/
若要查看仓库中所有可用的 Helm Chart,请运行(可以添加 `--devel` 选项以显示非发布版本)```sh
helm search repo stackrox
要安装 stackrox-central-services,您需要一个安全密码。该密码稍后在 UI 登录和创建 init bundle 时会用到。```sh ROX_ADMIN_PASSWORD="$(openssl rand -base64 20 | tr -d '/=+')"
从这里开始,您可以安装 stackrox-central-services 以在集群中部署 Central 和 Scanner 组件。
> **注意:**
> 即使您计划保护多个集群,也只需要部署一个 stackrox-central-services 实例。
要执行安装,请根据集群大小选择以下命令之一:
#### 默认 Central 安装
如果您要在大小合适的集群中安装,请使用默认安装命令:```sh
helm upgrade --install -n stackrox --create-namespace stackrox-central-services \
stackrox/stackrox-central-services \
--set central.adminPassword.value="${ROX_ADMIN_PASSWORD}" \
--set central.persistence.none="true"
如果您在单节点集群中安装,或者默认安装由于资源不足导致 Pod 卡在挂起状态,请改用以下命令来降低 stackrox-central-services 的资源需求。请记住,这些精简的资源设置不适合生产环境。```sh
helm upgrade --install -n stackrox --create-namespace stackrox-central-services
stackrox/stackrox-central-services
--set central.adminPassword.value="${ROX_ADMIN_PASSWORD}"
--set central.persistence.none="true"
--set central.resources.requests.memory=1Gi
--set central.resources.requests.cpu=1
--set central.resources.limits.memory=4Gi
--set central.resources.limits.cpu=1
--set central.db.resources.requests.memory=1Gi
--set central.db.resources.requests.cpu=500m
--set central.db.resources.limits.memory=4Gi
--set central.db.resources.limits.cpu=1
--set scanner.autoscaling.disable=true
--set scanner.replicas=1
--set scanner.resources.requests.memory=500Mi
--set scanner.resources.requests.cpu=500m
--set scanner.resources.limits.memory=2500Mi
--set scanner.resources.limits.cpu=2000m
要进一步自定义 Helm 安装,请参考以下文档:
deploy 脚本将执行以下操作:
您可以在 shell 中设置环境变量 MAIN_IMAGE_TAG,以确保获得您想要的版本。
如果您检出了一个提交,脚本将默认启动与该提交对应的镜像。如果需要,系统会自动拉取该镜像。
后续步骤因编排器而异。
按照以下指南,快速将特定版本的 StackRox 部署到您的 Kubernetes 集群的 stackrox 命名空间中。如果您想安装特定版本,请确保在 MAIN_IMAGE_TAG 中定义/设置它,否则将安装最新的夜间构建版本。
在您选择的工作目录中运行以下命令:``` git clone [email protected]:stackrox/stackrox.git cd stackrox MAIN_IMAGE_TAG=VERSION_TO_USE ./deploy/deploy.sh
几分钟后,所有资源应已部署完成。
**'admin' 用户的凭据可在 `./deploy/k8s/central-deploy/password` 文件中找到。**
> **注意:**
> 密码文件以明文形式存储在本地文件系统中,但 StackRox 据此创建的 Kubernetes Secret 是加密的。运行期间无法更改密码。如果丢失密码,则必须重新部署 central。
</details>
#### OpenShift
<details><summary>点击展开</summary>
在 OpenShift 上部署之前,请确保已安装 [oc - OpenShift Command Line](https://github.com/openshift/oc)。
按照以下指南,在 `stackrox` 命名空间中快速将特定版本的 StackRox 部署到你的 OpenShift 集群。请确保将最新的标签添加到 `MAIN_IMAGE_TAG` 变量中。
在你选择的工作目录中运行以下命令:```
git clone [email protected]:stackrox/stackrox.git
cd stackrox
MAIN_IMAGE_TAG=VERSION_TO_USE ./deploy/deploy.sh
几分钟后,所有资源应该都已部署。此过程将以以下消息完成。
'admin' 用户的凭据可以在 ./deploy/openshift/central-deploy/password 文件中找到。
注意: 虽然密码文件以明文形式存储在您的本地文件系统中,但 StackRox 使用的 Kubernetes Secret 是加密的,您将无法在运行时更改该 Secret。如果您丢失了密码,将不得不重新部署 central。
请在您选择的工作目录中运行以下命令:``` git clone [email protected]:stackrox/stackrox.git cd stackrox MAIN_IMAGE_TAG=latest ./deploy/deploy-local.sh
几分钟后,所有资源应部署完成。
**'admin'用户的凭据可以在 `./deploy/k8s/deploy-local/password` 文件中找到。**
</details>
## 访问 StackRox 用户界面 (UI)
<details><summary>点击展开</summary>
部署完成后(Operator、Helm 或脚本安装),应存在端口转发,因此您可以连接到 https://localhost:8000/。运行以下命令```sh
kubectl port-forward -n 'stackrox' svc/central "8000:443"
然后,在您的网页浏览器中访问 https://localhost:8000/。
用户名 = 默认用户是 admin
密码(Helm) = 密码在手动安装后位于 $ROX_ADMIN_PASSWORD 中,或在快速安装脚本末尾打印。
密码(脚本) = 密码将位于脚本安装的 /deploy/<orchestrator>/central-deploy/password.txt 文件夹中。
以下工具对于测试代码和构建镜像来说是必需的:
make reinstall-dev-tools 安装的各种 Go 代码检查工具。brew install bats 或 npm install -g bats 获取它。Xcode - 仅 macOS
通常您可能已经通过 brew 安装了这些工具。 然而,如果在构建 golang x/tools 时遇到错误, 请先确保已同意 EULA,方法如下:
更多信息,请参阅 <https://github.com/nodejs/node-gyp/issues/569>
</details>
#### 克隆 StackRox
<details><summary>点击展开</summary>```bash
# Create a GOPATH: this is the location of your Go "workspace".
# (Note that it is not – and must not – be the same as the path Go is installed to.)
# The default is to have it in ~/go/, or ~/development, but anything you prefer goes.
# Whatever you decide, create the directory, set GOPATH, and update PATH:
export GOPATH=$HOME/go # Change this if you choose to use a different workspace.
export PATH=$PATH:$GOPATH/bin
# You probably want to permanently set these by adding the following commands to your shell
# configuration (e.g. ~/.bash_profile)
cd $GOPATH
mkdir -p bin pkg
mkdir -p src/github.com/stackrox
cd src/github.com/stackrox
git clone [email protected]:stackrox/stackrox.git
为了提升体验,请事先安装工作流脚本。```bash $ cd $GOPATH/src/github.com/stackrox/stackrox $ make install-dev-tools $ make image
现在,你需要*自己*搭建一个Kubernetes集群,然后再继续。
开发可以在GCP或本地进行,使用[Docker Desktop](https://docs.docker.com/desktop/kubernetes/)、[Colima](https://github.com/abiosoft/colima#kubernetes)或[minikube](https://minikube.sigs.k8s.io/docs/start/)。
> **注意:**
> Docker Desktop和Colima更适合macOS开发,因为集群可以直接访问本地使用`make image`构建的镜像而无需额外配置。此外,Collector对这些工具的支持比minikube更好,因为minikube的驱动可能不可用。```bash
# To keep the StackRox Central's Postgres DB state between database upgrades and restarts, set:
$ export STORAGE=pvc
# To save time on rebuilds by skipping UI builds, set:
$ export SKIP_UI_BUILD=1
# To save time on rebuilds by skipping CLI builds, set:
$ export SKIP_CLI_BUILD=1
# When you deploy locally make sure your kube context points to the desired kubernetes cluster,
# for example Docker Desktop.
# To check the current context you can call a workflow script:
$ roxkubectx
# To deploy locally, call:
$ ./deploy/deploy-local.sh
# Now you can access StackRox dashboard at https://localhost:8000
# or simply call another workflow script:
$ logmein
更多信息请参阅通过脚本安装。要了解关于环境变量的更多信息,请查阅deploy/README.md。
$ make main-build-dockerized
$ make tag
$ make test
$ make style
$ make init-githooks
$ make fast-central
如果你正在使用 GoLand 进行开发,以下内容有助于改善体验。
确保已安装 Protocol Buffers 插件。该插件默认随 GoLand 安装。
如果没有安装,请使用 Help | Find Action...,输入 Plugins 并回车,然后切换到 Marketplace,输入插件名称并安装。
该插件默认不知道在 GoLand 中何处查找 .proto 导入,因此你需要显式配置路径。参见 https://github.com/jvolkman/intellij-protobuf-editor#path-settings。
GoLand | Preferences | Languages & Frameworks | Protocol Buffers。Configure automatically。+ 按钮,导航并选择仓库根目录中的 ./proto 目录。$HOME/go/pkg/mod/github.com/gogo/[email protected]
和 $HOME/go/pkg/mod/github.com/gogo/[email protected]/。带有 //go:build sql_integration 标注的 Go 测试需要一个监听在 5432 端口的 PostgreSQL 服务器。
由于身份验证在代码中的设置方式,最简单的方法是在容器中启动 Postgres,如下所示:```bash
$ docker run --rm --env POSTGRES_USER="$USER" --env POSTGRES_HOST_AUTH_METHOD=trust --publish 5432:5432 docker.io/library/postgres:15
With that running in the background, `sql_integration` tests can be triggered from IDE or command-line.
</details>
#### 调试
<details><summary>点击展开</summary>
**Kubernetes 调试器设置**
使用 GoLand,您可以在 IDE 中运行单元测试时自然地使用断点和调试器。
如果您想要调试本地甚至远程部署,请按照以下步骤操作。
1. 通过导出 `DEBUG_BUILD=yes` 在本地创建调试构建: ```bash
$ DEBUG_BUILD=yes make image
或者,当分支名称包含 -debug 子串时,也会创建调试构建。这在本地使用 make image 和在 CI 中均有效。
2. 使用此 README 文件中的说明部署镜像。既适用于 deploy-local.sh 也适用于 deploy.sh。
3. 在目标 Pod 中使用 workflow 仓库中的 roxdebug 命令启动调试器(以及端口转发)。 ```bash
$ roxdebug
注意: 如果使用主机挂载,你需要通过运行以下命令允许容器访问挂载点:
sudo chcon -Rt svirt_sandbox_file_t <full volume path>
从本仓库获取 image-setup.sh 脚本并运行它,以执行拉取/推送到本地 OpenShift 仓库。这是每个新集群的前提条件。```bash bash image-setup.sh
根据提供的输入,没有实际待翻译的内容。因此,输出为空。```bash
docker run -i --rm quay.io/stackrox-io/main:<tag> central generate interactive > openshift.zip
这将引导您完成安装程序,并生成一个 openshift.zip 文件。```bash
unzip openshift.zip -d openshift
(无内容,翻译结果为空)```bash
bash openshift/central.sh
以下信息已收集用于帮助安装和运行开源 StackRox 项目。这些建议是为 Red Hat Advanced Cluster Security for Kubernetes 产品制定的,且尚未在上游的 StackRox 项目中进行测试。
推荐的 Kubernetes 发行版
以下列出了 StackRox 已部署且问题最少的 Kubernetes 平台。
如果将 StackRox 部署到上述列表之外的 Kubernetes 发行版中,可能会遇到问题。
推荐的操作系统
已知 StackRox 可以在以下操作系统的最新版本上运行。
推荐的 Web 浏览器
下表列出了可以查看 StackRox Web 用户界面的浏览器。
</details>
<details><summary>安装 StackRox 安全集群服务</summary>
接下来,需要部署安全集群组件,用于从 Kubernetes 节点收集信息。
在 `CLUSTER_NAME` shell 变量中为安全集群设置一个有意义的集群名称。该集群将在 StackRox UI 的集群列表中以此名称标识。```sh
CLUSTER_NAME="my-secured-cluster"
设置安全集群服务应与Central通信的端点。如果在与stackrox-central-services相同的集群上部署stackrox-secured-cluster-services,请保持原样,否则将值更改为Central可访问的端点。```sh CENTRAL_ENDPOINT="central.stackrox.svc:443"
生成一个包含初始化秘密的 init bundle。init bundle 将保存在 `stackrox-init-bundle.yaml` 中,你将使用它来配置安全集群,如下所示。```sh
echo "$ROX_ADMIN_PASSWORD" | \
kubectl -n stackrox exec -i deploy/central -- bash -c 'ROX_ADMIN_PASSWORD=$(cat) roxctl --insecure-skip-tls-verify \
central init-bundles generate stackrox-init-bundle --output -' > stackrox-init-bundle.yaml
然后安装 stackrox-secured-cluster-services(使用你刚刚生成的初始化包)。
要执行安装,请根据你的集群大小选择以下命令之一。
如果你在一个规模适中的集群中安装,请使用默认的安装命令:```sh
helm upgrade --install -n stackrox --create-namespace stackrox-secured-cluster-services
stackrox/stackrox-secured-cluster-services
-f stackrox-init-bundle.yaml
--set clusterName="$CLUSTER_NAME"
--set centralEndpoint="$CENTRAL_ENDPOINT"
#### 在资源受限的集群中安装安全集群服务
如果你在单节点集群中安装,或者默认安装导致 Pod 因资源不足而卡在 Pending 状态,请改用以下命令以降低 stackrox-secured-cluster-services 的资源需求。请记住,这些降低后的资源设置不适合生产环境。```sh
helm upgrade --install -n stackrox --create-namespace stackrox-secured-cluster-services \
stackrox/stackrox-secured-cluster-services \
-f stackrox-init-bundle.yaml \
--set clusterName="$CLUSTER_NAME" \
--set centralEndpoint="$CENTRAL_ENDPOINT" \
--set sensor.resources.requests.memory=500Mi \
--set sensor.resources.requests.cpu=500m \
--set sensor.resources.limits.memory=500Mi \
--set sensor.resources.limits.cpu=500m
$ make fast-sensor
$ make proto-generated-srcs
</details>
#### 生产力
<details><summary>点击展开</summary>
[工作流仓库](https://github.com/stackrox/workflow) 包含一些帮助脚本,它们支持我们的开发工作流。使用 `roxhelp --list-all` 探索更多命令。```bash
# Change directory to rox root
$ cdrox
# Handy curl shortcut for your StackRox central instance
# Uses https://localhost:8000 by default or ROX_BASE_URL env variable
# Also uses the admin credentials from your last deployment via deploy.sh
$ roxcurl /v1/metadata
# Run quickstyle checks, faster than stackrox's "make style"
$ quickstyle
# The workflow repository includes some tools for supporting
# working with multiple inter-dependent branches.
# Examples:
$ smart-branch <branch-name> # create new branch
... work on branch...
$ smart-rebase # rebase from parent branch
... continue working on branch...
$ smart-diff # check diff relative to parent branch
... git push, etc.
Navigate | File....protoalert_service.proto$ roxdebug deploy/sensor
$ roxdebug --help
4. 配置 GoLand 以进行远程调试(仅需完成一次):
1. 打开 `Run | Edit Configurations …`,点击 `+` 图标添加新配置,选择 `Go Remote` 模板。
2. 选择 `Host:` `localhost` 和 `Port:` `40000`。为此配置命名。
3. 选择 `On disconnect:` `Leave it running`(这样可防止 GoLand 在重新连接时遗忘断点)。
5. 将 GoLand 附加到调试端口:选择 `Run | Debug…` 并选择已创建的配置。
如果一切正确,您应该会在屏幕下方的 `Debug | Debugger | Variables` 窗口中看到 `Connected` 消息。
6. 设置一些代码断点,触发相应操作,尽情调试!
更多信息,请参阅 [Debugging go code running in Kubernetes](https://github.com/stackrox/dev-docs/blob/main/docs/knowledge-base/%5BBE%5D%20Debugging-go-code-running-in-Kubernetes.md)。
</details>
## Generating Portable Installers
<details><summary>Kubernetes</summary>```bash
docker run -i --rm quay.io/stackrox-io/main:<tag> central generate interactive > k8s.zip
这将引导您完成安装程序并生成一个 k8s.zip 文件。```bash
unzip k8s.zip -d k8s
\u2060```bash
bash k8s/central.sh
现在 Central 已部署完成。使用用户界面部署 Sensor。