使用Garden自动化部署cert-manager与ExternalDNS实现HTTPS服务

使用Garden自动化部署cert-manager与ExternalDNS实现HTTPS服务

garden Automation for Kubernetes development and testing. Spin up production-like environments for development, testing, and CI on demand. Use the same configuration and workflows at every step of the process. Speed up your builds and test runs via shared result caching garden 项目地址: https://gitcode.com/gh_mirrors/ga/garden

前言

在现代云原生应用开发中,TLS证书管理和DNS记录配置是确保应用安全性和可用性的关键环节。本文将介绍如何利用Garden平台,结合cert-manager和ExternalDNS两大Kubernetes Operator,实现从代码提交到HTTPS服务暴露的全自动化流程。

技术栈概述

核心组件

  1. Garden:一个开源的开发工作流自动化平台,能够简化Kubernetes应用的开发、测试和部署流程
  2. cert-manager (v1.11.0):Kubernetes原生证书管理控制器,自动处理TLS证书的签发和续订
  3. 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

环境准备

基础设施要求

  1. Kubernetes集群:版本1.16+,需开放HTTP/HTTPS入口
  2. 域名所有权:如example.com,需在DNS托管服务商处管理
  3. DNS服务API Token:需具备DNS区域编辑权限
  4. 容器镜像仓库:如Docker官方仓库、Quay等私有仓库
  5. 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安全访问,浏览器显示绿色锁标志。

最佳实践建议

  1. 分阶段验证:始终先使用测试证书验证流程
  2. 证书监控:设置警报监控证书过期情况
  3. DNS策略
    • 生产环境建议设置适当TTL
    • 考虑启用DNS代理增强安全性
  4. 资源隔离:为不同环境使用独立DNS区域
  5. 备份策略:定期备份ClusterIssuer关键配置

常见问题排查

  1. 证书未就绪

    • 检查cert-manager Pod日志
    • 验证ACME挑战是否完成:kubectl describe challenge
  2. DNS记录未更新

    • 检查ExternalDNS日志
    • 验证DNS服务Token权限
  3. 镜像拉取失败

    • 确认registrySecret配置正确
    • 检查kubectl get secrets输出

结语

通过本文介绍的Garden集成方案,开发团队可以实现从代码提交到HTTPS服务上线的完整自动化流程。这种方案特别适合需要频繁部署的CI/CD环境,既保证了开发效率,又不牺牲生产环境的安全性要求。后续可考虑在此基础上添加监控、日志等观测性组件,构建更完善的云原生应用平台。

garden Automation for Kubernetes development and testing. Spin up production-like environments for development, testing, and CI on demand. Use the same configuration and workflows at every step of the process. Speed up your builds and test runs via shared result caching garden 项目地址: https://gitcode.com/gh_mirrors/ga/garden

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

邢娣蝶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值