4. Flux 安装与配置:使用 CLI 安装 Flux、引导 Git 仓库、配置 SSH 密钥与 Webhook
本章聚焦于 Flux 的落地安装与核心配置。作为云原生 GitOps 工具链的第一步,正确的安装与引导决定了后续资源配额校准的稳定性。我们将使用官方 CLI 工具 flux 完成集群引导,并配置安全的 SSH 通信与自动化 Webhook 触发。
4.1 前置条件与 CLI 安装
在安装 Flux 之前,请确保环境满足以下要求:
| 组件 | 版本要求 | 说明 |
|---|---|---|
| Kubernetes 集群 | >= 1.21 | 支持 Kubernetes 自定义资源(CRD) |
| kubectl | >= 1.21 | 与集群版本匹配 |
| Git 仓库 | GitHub / GitLab / Bitbucket | 用于存储清单与配置 |
| flux CLI | v2.x 最新稳定版 | 安装引导工具 |
使用以下命令安装 flux CLI(Linux / macOS):
# 下载并安装 flux CLI
curl -s https://fluxcd.io/install.sh | sudo bash
# 验证安装
flux --version
choco install flux-cli。
4.2 引导 Git 仓库与集群
Flux 的引导过程会创建必要的 CRD、控制器,并将 Git 仓库与集群关联。核心命令为 flux bootstrap,它自动完成以下步骤:
- 在集群中安装 Flux 控制器(source-controller、kustomize-controller、helm-controller、notification-controller)。
- 在 Git 仓库中创建初始目录结构(
clusters/、flux-system/)。 - 生成 SSH 密钥对并输出公钥,用于仓库授权。
- 将 Flux 组件清单提交至仓库,实现自管理。
以 GitHub 为例,执行引导命令:
export GITHUB_=<your-personal-access->
export GITHUB_USER=<your-github-username>
flux bootstrap github \
--owner=$GITHUB_USER \
--repository=flux-config \
--branch=main \
--path=./clusters/production \
--personal
--personal 参数表示使用个人仓库;若为组织仓库,需替换为 --repository=<org/repo> 并确保 具有 repo 权限。
引导成功后,Flux 会在集群中创建 flux-system 命名空间,并自动同步仓库中的清单。
4.3 配置 SSH 密钥
Flux 使用 SSH 密钥与 Git 仓库进行安全通信。引导过程中自动生成的密钥对存储在 Kubernetes Secret 中:
# 查看生成的密钥 Secret
kubectl get secret -n flux-system flux-system
# 提取公钥(用于添加到 Git 仓库的 Deploy Keys)
flux export source git flux-system \
--namespace flux-system | grep -A 10 "ssh-rsa"
将公钥添加到 Git 仓库的 Deploy Keys 中(以 GitHub 为例):
| 步骤 | 操作 |
|---|---|
| 1 | 进入仓库 Settings → Deploy Keys |
| 2 | 点击 "Add deploy key" |
| 3 | 粘贴公钥内容,勾选 "Allow write access" |
| 4 | 保存后,Flux 即可通过 SSH 拉取/推送代码 |
4.4 配置 Webhook 实现自动同步
默认情况下,Flux 以轮询方式(默认 1 分钟)检查 Git 仓库变更。通过配置 Webhook,可以实现代码推送后立即触发同步,缩短延迟。
Flux 支持两种 Webhook 接收方式:
- Notification Controller:内置接收器,通过
ReceiverCRD 定义。 - Flux Webhook Forwarder:轻量级代理,适用于多集群场景。
以下为使用 Notification Controller 配置 GitHub Webhook 的步骤:
# 1. 创建 Receiver 资源
cat <<EOF | kubectl apply -f -
apiVersion: notification.toolkit.fluxcd.io/v1beta3
kind: Receiver
metadata:
name: github-receiver
namespace: flux-system
spec:
type: github
events:
- "push"
secretRef:
name: webhook-
resources:
- kind: GitRepository
name: flux-system
EOF
# 2. 创建 Webhook Secret
kubectl create secret generic webhook- \
--namespace=flux-system \
--from-literal==<your-random-secret>
# 3. 获取 Receiver 暴露的地址
kubectl get receiver github-receiver -n flux-system \
-o jsonpath='{.status.webhook}'
将获取到的 Webhook URL 和 配置到 GitHub 仓库的 Webhook 设置中:
- Payload URL:Receiver 的
.status.webhook地址 - Content type:
application/json - Secret:与
webhook-中的值一致 - Events:选择 "Just the push event"
ngrok 或 Ingress 暴露 Receiver 服务。Flux 官方也提供 flux webhook 命令用于本地测试。
4.5 安装与配置流程总览
下图展示了从 CLI 安装到 Webhook 配置的完整链路:
4.6 验证安装状态
安装完成后,使用以下命令验证 Flux 组件是否正常运行:
# 检查 Flux 控制器 Pod 状态
kubectl get pods -n flux-system
# 查看 Flux 自定义资源
kubectl get gitrepositories -A
kubectl get kustomizations -A
# 检查同步状态
flux get kustomizations --watch
如果所有 Pod 处于 Running 状态,且 GitRepository 与 Kustomization 显示 Ready,则说明安装与配置成功。
flux-system 命名空间下的 source-controller 和 kustomize-controller 日志中无认证错误或网络超时。若出现 SSH 连接失败,请重新检查 Deploy Key 的权限与公钥内容。
4.7 常见问题与排错
| 问题 | 可能原因 | 解决方案 |
|---|---|---|
bootstrap 超时 |
网络限制或 权限不足 | 检查 GITHUB_ 是否包含 repo 和 admin:public_key 权限 |
| SSH 连接被拒绝 | 公钥未正确添加到 Deploy Keys | 使用 flux export source git 重新获取公钥并验证 |
| Webhook 未触发同步 | Receiver 未暴露或 Secret 不匹配 | 检查 Receiver 的 .status.webhook 地址是否可达, 是否一致 |
| 同步循环或冲突 | 手动修改了集群资源 | 使用 flux reconcile 强制同步,或回滚 Git 仓库变更 |
通过以上步骤,您已成功完成 Flux 的安装、Git 仓库引导、SSH 密钥配置与 Webhook 集成。下一阶段将进入 Flux 的资源配额校准实战配置。