kustomize通过“base+overlay”模式管理nginx多环境配置:base存放通用deployment、service、configmap等基础资源;overlay按环境(dev/test/prod)用patchesstrategicmerge、configmapgenerator和secretgenerator定制镜像、探针、tls等差异化配置,纯yaml声明式管理,所见即所得。

在云原生环境中,用 Kustomize 管理不同环境的 Nginx 配置,核心是把“通用部分”和“差异部分”拆开:Nginx 的基础部署结构(如 Deployment、Service、ConfigMap)放在 base,而各环境特有的配置(如镜像版本、日志级别、健康检查路径、资源限制)通过 overlay 补丁定制。整个过程不写模板、不引入新语法,纯靠 Kubernetes 原生 YAML 和声明式补丁完成。
搭建 base 目录:定义 Nginx 的通用结构
这是所有环境共用的起点,包含最小可运行的 Nginx 资源:
-
base/deployment.yaml:声明基础 Pod 模板,使用通用镜像(如
nginx:1.25),不指定环境相关字段(如 livenessProbe.path、resources) -
base/service.yaml:定义 ClusterIP Service,端口固定为 80,selector 匹配统一 label(如
app: nginx) -
base/configmap.yaml:存放默认 nginx.conf 内容(用
|多行字面量),例如静态文件根目录设为/usr/share/nginx/html - base/kustomization.yaml:列出上述三个资源,并设置基础 namePrefix(可选),内容类似:
- deployment.yaml
- service.yaml
- configmap.yaml
构建 overlay 目录:按环境差异化定制
每个环境(dev/test/prod)新建一个子目录,只放该环境独有的改动,复用 base 的全部内容:
-
overlay/dev/kustomization.yaml:引用 base,并用
patchesStrategicMerge修改开发环境特性 —— 比如把 livenessProbe 改为/healthz,CPU limit 设为100m,并挂载一个调试用的 ConfigMap -
overlay/test/kustomization.yaml:同样引用 base,但 patch 中启用更严格的 readinessProbe,并将 nginx.conf 中的
error_log级别调高到warn -
overlay/prod/kustomization.yaml:替换镜像为带版本号的私有镜像(如
harbor.example.com/web/nginx:v1.25.3),添加resources.requests/limits,并通过configMapGenerator动态生成含 TLS 参数的 nginx.conf
用 secretGenerator 和 configMapGenerator 管理敏感与动态配置
避免硬编码密码或证书路径,让配置更安全、更易更新:
- 在 overlay/prod/kustomization.yaml 中,用
secretGenerator从本地文件生成 TLS Secret:
secretGenerator:
- name: nginx-tls
files:
- tls.crt
- tls.key - 用
configMapGenerator基于环境变量生成 Nginx 的 upstream 配置:
configMapGenerator:
- name: nginx-upstream
literals:
- BACKEND_SERVICE=api-prod.svc.cluster.local:8080 - 这些生成的资源会自动注入到 Deployment 的 volumes 或 envFrom 中,无需手动改 YAML
验证与部署:所见即所得
每次变更后,先预览实际生效的 YAML,再推送到集群:
- 查看 dev 环境最终配置:
kustomize build overlay/dev | kubectl apply -f -或先用kustomize build overlay/dev > dev-manifest.yaml人工检查 - 对比 prod 和 test 的差异:
diff ,一眼定位镜像、探针、资源等区别 - CI/CD 流水线中,直接执行
kubectl apply -k overlay/$ENV即可完成部署,$ENV 取值为 dev/test/prod











