3. 环境准备:安装 Cosign CLI、配置 OIDC 身份提供商、搭建本地 K8s 集群
本章是整门课程的实践起点。在完成 Sigstore 理论体系学习后,你需要一个可操作的本地环境来验证镜像签名、身份认证与 K8s 准入控制的全链路。我们将依次完成三个核心组件的安装与配置:Cosign CLI(签名工具)、OIDC 身份提供商(身份源)、本地 K8s 集群(运行环境)。
环境兼容性提示:本课程所有操作在 macOS 12+ / Ubuntu 22.04 / Windows WSL2 上均验证通过。Cosign v2.x 要求 Go 1.19+,建议使用最新稳定版。
3.1 安装 Cosign CLI
Cosign 是 Sigstore 项目提供的命令行工具,用于对容器镜像进行签名、验证和存储。它直接与 Fulcio(证书颁发机构)和 Rekor(透明日志)交互,是实现镜像身份认证的核心客户端。
3.1.1 安装方式对比
| 安装方式 | 适用平台 | 命令示例 | 备注 |
|---|---|---|---|
| Homebrew | macOS / Linux | brew install cosign |
推荐 macOS 用户 |
| Go Install | 跨平台 | go install github.com/sigstore/cosign/v2/cmd/cosign@latest |
需预装 Go 1.19+ |
| 二进制下载 | Linux / Windows | wget https://github.com/sigstore/cosign/releases/latest/download/cosign-linux-amd64 |
手动放置到 PATH |
| Docker 镜像 | 所有平台 | docker run --rm gcr.io/projectsigstore/cosign version |
适合 CI/CD 临时使用 |
3.1.2 验证安装
安装完成后,执行以下命令确认版本与可用性:
cosign version
# 输出示例(版本号可能不同):
# ______ ______ _______. __ _______ .__ __.
# / | / __ \ / || | / _____|| \ | |
# | ,----'| | | | | (----`| | | | __ | \| |
# | | | | | | \ \ | | | | |_ | | . ` |
# | `----.| `--' | .----) | | | | |__| | | |\ |
# \______| \______/ |_______/ |__| \______| |__| \__|
# cosign: 2.2.3
# git commit: 9b1f8c7a8b9c1d2e3f4a5b6c7d8e9f0a1b2c3d4
关键检查点:确保输出中包含
cosign 字样和版本号。如果出现 command not found,请检查 PATH 是否包含安装目录,或使用路径执行。
3.2 配置 OIDC 身份提供商
Sigstore 使用 OIDC 协议将用户的短期身份(如 GitHub 账号、Google 邮箱)绑定到镜像签名上。你需要至少配置一个 OIDC 提供商作为身份源。本课程以 GitHub 和 Google 为例。
3.2.1 GitHub OIDC 配置
GitHub Actions 原生支持 OIDC 生成,适合 CI/CD 流水线。若在本地开发环境使用,需通过 oauth2 设备流完成认证。
- 创建 GitHub OAuth App(可选,仅本地设备流需要):
- 访问 GitHub Settings → Developer settings → OAuth Apps → New OAuth App
- 填写 Application name:
Sigstore-Local-Dev - Homepage URL:
http://localhost:8080 - Authorization callback URL:
http://localhost:8080/callback
- 获取 Client ID 和 Client Secret,后续用于 Cosign 的 OIDC 交互。
- 测试认证流程:
cosign login ghcr.io -u <你的GitHub用户名> --password-stdin <输入Personal Access >
3.2.2 Google OIDC 配置
Google 作为 OIDC 提供商,适合个人开发者或使用 Google Workspace 的组织。
| 步骤 | 操作说明 | 关键参数 |
|---|---|---|
| 1 | 打开 Google Cloud Console → APIs & Services → Credentials | 项目需启用 IAM API |
| 2 | 创建 OAuth 2.0 Client ID,应用类型选“Desktop app” | 名称:Sigstore Desktop Client |
| 3 | 记录 Client ID 和 Client Secret | 用于 cosign initialize 的 OIDC 参数 |
| 4 | 设置环境变量(可选) | export COSIGN_GOOGLE_CLIENT_ID=xxx |
3.2.3 验证 OIDC 连通性
使用 Cosign 的 initialize 命令测试与 OIDC 提供商的通信:
# 使用 GitHub 身份(设备流)
cosign initialize --oidc-issuer https://.actions.githubusercontent.com
# 使用 Google 身份
cosign initialize --oidc-issuer https://accounts.google.com
# 成功标志:控制台输出 "Successfully initialized Sigstore client"
常见问题:如果初始化失败,检查网络是否能访问
fulcio.sigstore.dev 和 rekor.sigstore.dev。中国大陆用户可能需要配置代理或使用 Sigstore 的公共镜像。
3.3 搭建本地测试 K8s 集群
为了测试准入控制策略,你需要一个本地 K8s 集群。我们推荐 Kind(Kubernetes in Docker)或 Minikube,两者均支持快速创建单节点或多节点集群。
3.3.1 工具选择对比
| 特性 | Kind | Minikube |
|---|---|---|
| 底层依赖 | Docker | Docker / Hyper-V / VirtualBox |
| 集群启动速度 | ~30 秒 | ~60 秒 |
| 多节点支持 | 原生支持(通过配置文件) | 需额外驱动 |
| 持久化存储 | 需手动配置 | 内置 hostPath 支持 |
| 适用场景 | CI/CD、快速测试 | 本地开发、学习 |
3.3.2 使用 Kind 创建集群
- 安装 Kind:
# macOS brew install kind # Linux (amd64) curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.20.0/kind-linux-amd64 chmod +x ./kind sudo mv ./kind /usr/local/bin/kind - 创建集群配置文件(可选,用于多节点或自定义配置):
cat <<EOF > kind-config.yaml kind: Cluster apiVersion: kind.x-k8s.io/v1alpha4 nodes: - role: control-plane - role: worker - role: worker EOF - 启动集群:
kind create cluster --name sigstore-demo --config kind-config.yaml # 输出示例: # Creating cluster "sigstore-demo" ... # ✓ Ensuring node image (kindest/node:v1.28.0) 🖼 # ✓ Preparing nodes 📦 📦 📦 # ✓ Writing configuration 📜 # ✓ Starting control-plane 🕹️ # ✓ Installing CNI 🔌 # ✓ Installing StorageClass 💾 # Set kubectl context to "kind-sigstore-demo" - 验证集群状态:
kubectl cluster-info --context kind-sigstore-demo kubectl get nodes
3.3.3 使用 Minikube 创建集群
# 安装 Minikube
brew install minikube
# 启动集群(指定驱动为 docker)
minikube start --driver=docker --cpus=2 --memory=4096
# 验证
minikube status
kubectl get nodes
推荐选择:本课程后续章节将使用 Kind 作为默认集群,因为它与 Docker 集成更紧密,且支持通过配置文件快速重建环境。如果你更习惯 Minikube,操作步骤基本一致,只需注意
kubectl context 的切换。
3.4 环境验证清单
完成上述安装后,执行以下命令确认所有组件就绪:
# 1. 验证 Cosign
cosign version
# 2. 验证 OIDC 初始化
cosign initialize --oidc-issuer https://.actions.githubusercontent.com
# 3. 验证 K8s 集群
kubectl get nodes
kubectl get pods -A
# 4. 验证容器运行时(Docker)
docker info | grep "Server Version"
如果所有命令均返回正常输出,说明你的环境已准备就绪,可以进入下一章:使用 Cosign 对镜像进行签名与验证。
环境快照建议:在继续后续实验前,建议使用
kind export logs 或 minikube snapshot save 保存当前集群状态。这样在后续操作出现问题时,可以快速回滚到干净环境。