使用Garden自动化部署cert-manager与ExternalDNS实现HTTPS服务
前言
在现代云原生应用开发中,TLS证书管理和DNS记录配置是确保应用安全性和可用性的关键环节。本文将介绍如何利用Garden平台,结合cert-manager和ExternalDNS两大Kubernetes Operator,实现从代码提交到HTTPS服务暴露的全自动化流程。
技术栈概述
核心组件
- Garden:一个开源的开发工作流自动化平台,能够简化Kubernetes应用的开发、测试和部署流程
- cert-manager (v1.11.0):Kubernetes原生证书管理控制器,自动处理TLS证书的签发和续订
- ExternalDNS (v6.13.3):自动同步Kubernetes服务与Ingress资源到云DNS服务
架构优势
这种组合方案为开发团队带来以下显著优势:
- 自动化证书生命周期管理:从申请到续订全程无需人工干预
- 动态DNS记录同步:服务部署后自动创建/更新DNS记录
- 开发环境一致性:通过Garden确保本地与生产环境配置一致
- 安全最佳实践:默认启用HTTPS,减少安全配置疏漏
项目结构解析
├── charts
│ ├── cluster-issuers # 集群级证书签发器配置
├── frontend # React应用代码
│ ├── Dockerfile # 容器构建文件
│ ├── garden.yml # Garden模块配置
│ └── ... # 标准React项目结构
├── garden.yml # 主部署配置
├── project.garden.yml # 项目级变量配置
└── README.md
环境准备
基础设施要求
- Kubernetes集群:版本1.16+,需开放HTTP/HTTPS入口
- 域名所有权:如example.com,需在DNS托管服务商处管理
- DNS服务API Token:需具备DNS区域编辑权限
- 容器镜像仓库:如Docker官方仓库、Quay等私有仓库
- kubectl上下文配置:确保已正确配置集群访问权限
关键配置说明
在project.garden.yml
中需要配置的核心变量:
variables:
# 容器仓库配置
registryHostname: docker.io
registryNamespace: your-username
# 证书管理配置
CERT_MANAGER_INSTALL_CRDS: true
GENERATE_PROD_CERTS: false # 初始使用测试证书
# DNS配置
DNS_DOMAIN: [your-domain.com]
DNS_EMAIL: admin@your-domain.com
DNS_PROXIED: false # 是否启用DNS代理
详细部署流程
1. 初始部署
执行以下命令开始首次部署:
export DNS_API_TOKEN=your-token
garden deploy --yes
此时系统将依次完成:
- cert-manager Operator安装
- ExternalDNS部署
- React应用容器构建与部署
- 基础Ingress资源配置
2. 测试证书阶段
修改配置启用Let's Encrypt测试证书:
GENERATE_STG_CERTS: true
重新部署后,可通过以下命令验证证书状态:
kubectl get cert
# 预期输出
NAME READY SECRET AGE
staging-cert True staging-cert 2m
此时访问应用会看到浏览器安全警告,这是测试证书的预期行为。
3. 生产证书切换
确认测试证书工作正常后,切换到生产环境:
GENERATE_PROD_CERTS: true
tlsCertificates:
- name: production-cert
secretRef:
name: production-cert
最终部署完成后,应用将通过HTTPS安全访问,浏览器显示绿色锁标志。
最佳实践建议
- 分阶段验证:始终先使用测试证书验证流程
- 证书监控:设置警报监控证书过期情况
- DNS策略:
- 生产环境建议设置适当TTL
- 考虑启用DNS代理增强安全性
- 资源隔离:为不同环境使用独立DNS区域
- 备份策略:定期备份ClusterIssuer关键配置
常见问题排查
-
证书未就绪:
- 检查cert-manager Pod日志
- 验证ACME挑战是否完成:
kubectl describe challenge
-
DNS记录未更新:
- 检查ExternalDNS日志
- 验证DNS服务Token权限
-
镜像拉取失败:
- 确认registrySecret配置正确
- 检查kubectl get secrets输出
结语
通过本文介绍的Garden集成方案,开发团队可以实现从代码提交到HTTPS服务上线的完整自动化流程。这种方案特别适合需要频繁部署的CI/CD环境,既保证了开发效率,又不牺牲生产环境的安全性要求。后续可考虑在此基础上添加监控、日志等观测性组件,构建更完善的云原生应用平台。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考