Files
https-config/DEPLOYMENT-SUMMARY.md
argocd a44407558d Add HTTPS deployment summary and troubleshooting guide
- Complete deployment status
- ArgoCD HTTPS configuration fix explanation
- Idempotency guarantees
- Troubleshooting procedures
- Maintenance checklist

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-04 05:22:52 +08:00

189 lines
5.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# HTTPS配置部署总结
## ✅ 部署状态
### 已完成的组件
1. **cert-manager** - 自动证书管理
- 版本: v1.13.3
- 状态: 运行正常
- 命名空间: cert-manager
2. **ClusterIssuer** - Let's Encrypt证书签发
- letsencrypt-prod (生产环境) - Ready ✅
- letsencrypt-staging (测试环境) - Ready ✅
3. **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
```
4. **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`
```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检测变更 → 自动同步到集群 → 配置生效
```
### 验证幂等性
```bash
# 重新应用所有配置(应该无变化)
kubectl apply -f manifests/
# 检查ArgoCD同步状态
kubectl get application https-config -n argocd
```
## 🔍 故障排查
### 证书未就绪
```bash
# 检查证书状态
kubectl get certificate -A
# 查看证书详情
kubectl describe certificate <cert-name> -n <namespace>
# 检查cert-manager日志
kubectl logs -n cert-manager deployment/cert-manager
```
### HTTPS无法访问
```bash
# 检查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无法访问
```bash
# 检查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申请新证书
- **无需人工干预**: 完全自动化
## 🔐 安全建议
1. **DNS解析**: 确保域名正确解析到集群IP
2. **防火墙规则**: 开放443端口HTTPS
3. **证书监控**: 定期检查证书状态
4. **备份证书**: 虽然会自动续期但建议备份Secret
5. **速率限制**: Let's Encrypt有速率限制避免频繁申请
## 🎯 访问验证
### 从外部访问需要DNS和防火墙配置
```bash
curl -I https://argocd.jpc.net3w.com
curl -I https://git.jpc.net3w.com
curl -I https://test.jpc.net3w.com
```
### 从集群内部访问
```bash
kubectl run -it --rm debug --image=curlimages/curl --restart=Never -- \
curl -k -I https://argocd.jpc.net3w.com
```
## 📝 维护清单
### 日常维护
- [ ] 每周检查证书状态
- [ ] 每月检查cert-manager日志
- [ ] 每季度验证自动续期功能
### 配置变更
- [ ] 修改Git仓库中的配置文件
- [ ] 提交并推送到Gitea
- [ ] 等待ArgoCD自动同步3分钟内
- [ ] 验证变更生效
### 添加新服务
1. 创建Ingress配置添加TLS和cert-manager注解
2. 提交到Git仓库
3. ArgoCD自动部署
4. cert-manager自动申请证书
## 🎉 总结
**HTTPS配置完成**: 所有服务已启用HTTPS
**证书自动管理**: cert-manager自动申请和续期
**GitOps化**: 配置存储在Git支持版本控制
**幂等性保证**: 可以安全重复应用配置
**自动化**: 修改Git自动部署无需手动操作
您的K3s集群现在已经完全支持HTTPS并通过GitOps实现了自动化和幂等性管理