- Complete deployment status - ArgoCD HTTPS configuration fix explanation - Idempotency guarantees - Troubleshooting procedures - Maintenance checklist Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
5.1 KiB
5.1 KiB
HTTPS配置部署总结
✅ 部署状态
已完成的组件
-
cert-manager - 自动证书管理
- 版本: v1.13.3
- 状态: 运行正常
- 命名空间: cert-manager
-
ClusterIssuer - Let's Encrypt证书签发
- letsencrypt-prod (生产环境) - Ready ✅
- letsencrypt-staging (测试环境) - Ready ✅
-
SSL证书 - 所有证书已成功签发
NAMESPACE NAME READY SECRET argocd argocd-tls-cert True argocd-tls-cert default test-app-tls-cert True test-app-tls-cert gitea gitea-tls-cert True gitea-tls-cert -
HTTPS Ingress - 所有服务已启用HTTPS
- ArgoCD: https://argocd.jpc.net3w.com ✅
- Gitea: https://git.jpc.net3w.com ✅
- Test App: https://test.jpc.net3w.com ✅
🔧 关键配置修复
ArgoCD HTTPS配置
问题: ArgoCD默认使用自签名证书,与Ingress TLS终止冲突
解决方案: 配置ArgoCD以insecure模式运行(HTTP),让Ingress处理TLS终止
配置文件: manifests/07-argocd-insecure-config.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: argocd-cmd-params-cm
namespace: argocd
data:
server.insecure: "true"
原理:
- Ingress在443端口接收HTTPS请求
- Ingress使用cert-manager签发的证书进行TLS终止
- Ingress将解密后的HTTP请求转发到ArgoCD的80端口
- ArgoCD以HTTP模式运行,无需处理TLS
📁 Git仓库结构
https-config/
├── README.md # 说明文档
├── DEPLOYMENT-SUMMARY.md # 本文档
└── manifests/
├── 01-namespace.yaml # cert-manager命名空间
├── 02-cert-manager.yaml # cert-manager RBAC
├── 03-clusterissuer.yaml # Let's Encrypt配置
├── 04-ingress-argocd-tls.yaml # ArgoCD HTTPS Ingress
├── 05-ingress-gitea-tls.yaml # Gitea HTTPS Ingress
├── 06-ingress-test-app-tls.yaml # test-app HTTPS Ingress
└── 07-argocd-insecure-config.yaml # ArgoCD insecure模式配置
🔄 幂等性保证
GitOps管理
- ✅ 所有配置存储在Git仓库
- ✅ ArgoCD自动同步Git变更
- ✅ 支持重复应用,不会产生副作用
- ✅ 配置变更有完整历史记录
部署流程
修改Git配置 → ArgoCD检测变更 → 自动同步到集群 → 配置生效
验证幂等性
# 重新应用所有配置(应该无变化)
kubectl apply -f manifests/
# 检查ArgoCD同步状态
kubectl get application https-config -n argocd
🔍 故障排查
证书未就绪
# 检查证书状态
kubectl get certificate -A
# 查看证书详情
kubectl describe certificate <cert-name> -n <namespace>
# 检查cert-manager日志
kubectl logs -n cert-manager deployment/cert-manager
HTTPS无法访问
# 检查Ingress状态
kubectl get ingress -A
# 检查Traefik日志
kubectl logs -n kube-system -l app.kubernetes.io/name=traefik
# 测试内部访问
curl -k -I https://localhost/ -H "Host: <domain>"
ArgoCD无法访问
# 检查ArgoCD配置
kubectl get configmap argocd-cmd-params-cm -n argocd -o yaml
# 检查ArgoCD日志
kubectl logs -n argocd deployment/argocd-server
# 验证insecure模式
kubectl get configmap argocd-cmd-params-cm -n argocd -o jsonpath={.data.server.insecure}
📊 证书自动续期
cert-manager会自动管理证书续期:
- 检查周期: 每小时检查一次
- 续期时间: 证书到期前30天
- 续期方式: 自动向Let's Encrypt申请新证书
- 无需人工干预: 完全自动化
🔐 安全建议
- DNS解析: 确保域名正确解析到集群IP
- 防火墙规则: 开放443端口(HTTPS)
- 证书监控: 定期检查证书状态
- 备份证书: 虽然会自动续期,但建议备份Secret
- 速率限制: Let's Encrypt有速率限制,避免频繁申请
🎯 访问验证
从外部访问(需要DNS和防火墙配置)
curl -I https://argocd.jpc.net3w.com
curl -I https://git.jpc.net3w.com
curl -I https://test.jpc.net3w.com
从集群内部访问
kubectl run -it --rm debug --image=curlimages/curl --restart=Never -- \
curl -k -I https://argocd.jpc.net3w.com
📝 维护清单
日常维护
- 每周检查证书状态
- 每月检查cert-manager日志
- 每季度验证自动续期功能
配置变更
- 修改Git仓库中的配置文件
- 提交并推送到Gitea
- 等待ArgoCD自动同步(3分钟内)
- 验证变更生效
添加新服务
- 创建Ingress配置,添加TLS和cert-manager注解
- 提交到Git仓库
- ArgoCD自动部署
- cert-manager自动申请证书
🎉 总结
✅ HTTPS配置完成: 所有服务已启用HTTPS
✅ 证书自动管理: cert-manager自动申请和续期
✅ GitOps化: 配置存储在Git,支持版本控制
✅ 幂等性保证: 可以安全重复应用配置
✅ 自动化: 修改Git自动部署,无需手动操作
您的K3s集群现在已经完全支持HTTPS,并通过GitOps实现了自动化和幂等性管理!