2. 环境准备:Kubernetes集群搭建、Fluent Bit Helm Chart安装、测试工具链准备

本章聚焦于搭建一套可复用的测试环境,为后续的准入控制校验与接口调用测试提供基础设施。环境包含三个核心层:Kubernetes 集群(运行 Fluent Bit 工作负载)、Fluent Bit Helm Chart(管理版本与配置)、测试工具链(发起与验证 API 请求)。

环境版本对齐建议: 本课程测试环境使用 Kubernetes v1.28、Helm v3.14、Fluent Bit v2.2.x。若使用其他版本,请确认 Admission Webhook API 版本(admission.k8s.io/v1)与 Fluent Bit 配置字段兼容性。

2.1 Kubernetes 集群搭建(本地测试环境)

推荐使用 kind(Kubernetes in Docker)或 minikube 搭建单节点集群,便于快速重置与版本切换。以下以 kind 为例:

# 创建 kind 集群配置文件
cat <<EOF > kind-cluster.yaml
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
  - role: control-plane
    kubeadmConfigPatches:
      - |
        apiVersion: kubeadm.k8s.io/v1beta3
        kind: ClusterConfiguration
        apiServer:
          extraArgs:
            enable-admission-plugins: "ValidatingAdmissionWebhook,MutatingAdmissionWebhook"
EOF

# 创建集群
kind create cluster --config kind-cluster.yaml --name fluentbit-test

# 验证集群状态
kubectl cluster-info --context kind-fluentbit-test
kubectl get nodes
关键检查点: 确保 API Server 已启用 ValidatingAdmissionWebhook 与 MutatingAdmissionWebhook 准入插件。若使用云托管集群(如 EKS、AKS),默认已开启,无需额外配置。

集群搭建完成后,核心组件关系如下图所示:

Kubernetes 集群组件关系(kind 本地环境) 控制平面 API Server etcd Scheduler Controller Manager Admission Webhooks (Validating + Mutating) 工作节点 kubelet kube-proxy Container Runtime Fluent Bit Pod (DaemonSet) 本地主机 Docker kind 节点容器 kubectl Helm CLI Postman / curl

2.2 Fluent Bit Helm Chart 安装

使用官方 Helm Chart 部署 Fluent Bit,便于版本管理与配置注入。安装步骤:

  1. 添加 Helm 仓库
helm repo add fluent https://fluent.github.io/helm-charts
helm repo update
  1. 创建命名空间与配置
kubectl create namespace fluentbit-system

# 创建 values.yaml 用于后续版本漂移测试
cat <<EOF > fluentbit-values.yaml
image:
  repository: cr.fluentbit.io/fluent/fluent-bit
  tag: "2.2.2"
  pullPolicy: IfNotPresent

config:
  service: |
    [SERVICE]
        Daemon       Off
        Log_Level    info
        Parsers_File parsers.conf
        Parsers_File custom_parsers.conf

  inputs: |
    [INPUT]
        Name        tail
        Path        /var/log/containers/*.log
        Tag         kube.*
        Mem_Buf_Limit 5MB
        Skip_Long_Lines On

  filters: |
    [FILTER]
        Name        kubernetes
        Match       kube.*
        Merge_Log   On
        Keep_Log    Off

  outputs: |
    [OUTPUT]
        Name        stdout
        Match       *
        Format      json_lines

tolerations:
  - operator: Exists

resources:
  limits:
    memory: 128Mi
  requests:
    cpu: 100m
    memory: 64Mi
EOF
  1. 安装 Fluent Bit
helm install fluent-bit fluent/fluent-bit \
  --namespace fluentbit-system \
  --values fluentbit-values.yaml \
  --version 0.30.0
  1. 验证安装
kubectl get pods -n fluentbit-system -o wide
kubectl get daemonset -n fluentbit-system
kubectl logs -n fluentbit-system -l app.kubernetes.io/name=fluent-bit --tail=20
版本漂移测试准备: 后续章节将通过修改 fluentbit-values.yaml 中的 image.tag 字段(如从 2.2.2 改为 2.1.9 或 2.3.0),模拟版本漂移场景,触发准入控制校验。

2.3 测试工具链准备

测试工具链用于发起 AdmissionReview 请求、验证 Webhook 响应、检查集群状态。以下为各工具的安装与验证方法:

工具 版本要求 安装方式 验证命令
kubectl ≥ v1.28 包管理器 / 二进制下载 kubectl version --client
curl ≥ 7.68 系统预装 / apt/yum curl --version
Postman ≥ v10.x 官网下载 / Snap 启动后创建测试请求
Helm ≥ v3.14 脚本安装 / 二进制 helm version
jq ≥ 1.6 包管理器 jq --version

各工具在测试流程中的角色如下:

  • kubectl:创建/更新 Fluent Bit 资源、查看 Webhook 配置、检查 Pod 状态。
  • curl:直接向 API Server 发送 AdmissionReview JSON 请求,绕过 kubectl 进行底层验证。
  • Postman:构建可视化测试集合,保存请求模板,批量执行版本漂移测试用例。
  • jq:解析 AdmissionReview 响应 JSON,提取 allowed 字段与 status.message。
Postman 环境变量建议: 创建集合级变量 api_server_url(如 https://127.0.0.1:6443)、webhook_、fluentbit_namespace,便于切换测试环境。

测试工具链与集群的交互流程如下图所示:

测试工具链与集群交互流程 测试工具层 Postman curl kubectl jq Kubernetes API 层 API Server Admission Webhook (Validating) 认证 / 授权 工作负载层 Fluent Bit Pod DaemonSet ConfigMap 版本漂移目标

2.4 环境验证清单

完成上述步骤后,执行以下验证项,确保环境就绪:

验证项 预期结果 验证命令
集群节点状态 Ready kubectl get nodes
Fluent Bit Pod 运行 Running (每个节点一个) kubectl get pods -n fluentbit-system
Helm Release 状态 deployed helm list -n fluentbit-system
Admission Webhook 配置 ValidatingWebhookConfiguration 存在 kubectl get validatingwebhookconfigurations
curl 访问 API Server 返回 401 或 200(取决于认证) curl -k https://localhost:6443/livez
Postman 连通性 发送 GET 请求返回集群版本 Postman → GET /version
常见问题:
  • 若 Fluent Bit Pod 处于 CrashLoopBackOff,检查 kubectl logs 确认配置语法错误。
  • 若 Admission Webhook 未生效,确认 API Server 启动参数包含 --enable-admission-plugins。
  • Postman 访问 API Server 需配置 TLS 证书或使用 --insecure 跳过验证(仅限本地测试)。