要为ArgoCD签发证书,您需要按照以下步骤进行配置:
安装和配置Cert-Manager。您可以在这里找到安装指南:https://cert-manager.io/docs/installation/kubernetes/
创建用于签发证书的ClusterIssuer或Issuer资源。例如,下面是一个ClusterIssuer的示例:
apiVersion: cert-manager.io/v1alpha2
kind: ClusterIssuer
metadata:
name: letsencrypt-prod
spec:
acme:
server: https://acme-v02.api.letsencrypt.org/directory
email: <your-email-address>
privateKeySecretRef:
name: letsencrypt-prod
solvers:
- http01:
ingress:
class: nginx
- 创建证书资源,定义名称、命名空间和要签发证书的域名列表。下面是一个证书资源的示例:
apiVersion: cert-manager.io/v1alpha2
kind: Certificate
metadata:
name: argocd-tls-certificate
namespace: argocd
spec:
secretName: argocd-tls-secret # 用于存储密钥和证书的 Secret 名称。
duration: 2160h # 证书有效期限,默认是 90 天。
renewBefore: 360h # 在证书过期前多少时间开始自动更新,默认值是 30 天。
commonName: argocd.example.com # 主机名或 IP 地址列表中使用的常见名称。
dnsNames:
- argocd.example.com # 希望签发证书的主机名列表。
issuerRef:
name: letsencrypt-prod # 要使用的 ClusterIssuer 或 Issuer 的名称。
kind: ClusterIssuer
部署ArgoCD。确保您已按照官方指南部署了ArgoCD,并且有一个可公开访问的Ingress资源。
为ArgoCD Ingress资源添加TLS注释。下面是一个示例:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: argocd-server-ingress
namespace: argocd
annotations:
cert-manager.io/cluster-issuer: letsencrypt-prod # 指定用于签发证书的 ClusterIssuer 或 Issuer 的名称。
nginx.ingress.kubernetes.io/ssl-redirect: "true" # 强制所有HTTP请求重定向到HTTPS。
nginx.ingress.kubernetes.io/backend-protocol: "HTTPS" # 后端使用 HTTPS 协议通信。
spec:
tls:
- hosts:
- argocd.example.com # 所需 TLS 证书中包含的主机名列表。
secretName: argocd-tls-secret # 存储证书和密钥的 Secret 名称,必须与 Certificate 中定义的一致。
rules:
- host: argocd.example.com # ArgoCD 可公开访问的主机名或 IP 地址。
http:
paths:
- backend:
serviceName: argocd-server-service # 在后台运行 ArgoCD API 的 Service 的名称。
servicePort: https # ArgoCD API 使用的端口。
- 等待证书签发。Cert-Manager会自动处理证书签发,您可以使用以下命令检查证书的状态:
kubectl describe certificate argocd-tls-certificate -n argocd
一旦证书签发完成,ArgoCD将能够使用TLS加密与客户端进行安全通信。