Kubernetes中如何将cert-manager管理的证书挂载到LDAP Pod并配置SSL
方案实践参考
一、证书挂载与自动更新方案
1. 基础挂载配置
首先通过cert-manager申请对应域名的Certificate资源,cert-manager会自动将签发的证书、私钥、CA链存入你指定的Secret资源中,之后直接在LDAP的Deployment/StatefulSet中挂载该Secret即可:
- 在
volumes字段引用cert-manager生成的Secret - 通过
volumeMounts将证书挂载到LDAP服务读取证书的目录,例如OpenLDAP默认的/etc/ldap/sasl2/或者自定义的证书目录
示例配置片段:
# Deployment 配置片段 volumes: - name: ldap-tls secret: secretName: ldap-cert-secret # 你在Certificate中指定的Secret名称 containers: - name: openldap image: osixia/openldap:latest volumeMounts: - name: ldap-tls mountPath: /etc/ldap/certs readOnly: true env: - name: LDAP_TLS_CRT_FILENAME value: tls.crt - name: LDAP_TLS_KEY_FILENAME value: tls.key - name: LDAP_TLS_CA_CRT_FILENAME value: ca.crt
2. 证书有效期感知与更新自动加载
cert-manager默认会在证书到期前30天自动重新签发并更新关联的Secret内容,不需要手动干预,你可以通过两种方式处理更新后的证书加载:
- 无侵入自动重载方案:在集群中部署Reloader组件,给LDAP的Deployment添加annotation
reloader.stakater.com/auto: "true",当关联的Secret内容发生变化时,Reloader会自动滚动重启LDAP Pod,加载新证书,不需要修改LDAP镜像或配置。 - 监控告警方案:通过cert-manager自带的Prometheus指标
certmanager_certificate_expiration_timestamp_seconds配置告警规则,在证书到期前提前收到通知,手动触发重载。如果LDAP镜像支持SIGHUP信号热加载证书,也可以部署一个轻量sidecar定期检测证书文件变更,触发信号重载无需重启Pod。
二、非侵入式Ingress SSL终结方案
LDAP是TCP协议,常规处理HTTP的Ingress规则不适用,但主流的Ingress Controller(例如Nginx Ingress)都支持TCP/UDP服务代理,完全可以在Ingress层完成SSL终结,不需要修改LDAP服务的任何配置:
- 首先给Nginx Ingress Controller的启动参数添加配置项
--tcp-services-configmap=<ingress-controller命名空间>/tcp-services - 创建对应ConfigMap,配置LDAPS端口代理规则,直接指定cert-manager生成的证书Secret即可:
apiVersion: v1 kind: ConfigMap metadata: name: tcp-services namespace: ingress-nginx data: "636": "<your-ldap-namespace>/<your-ldap-service-name>:389:::ldap-cert-secret"
- 确保Ingress Controller的Service暴露了636端口,之后客户端直接通过Ingress的域名+636端口访问LDAPS服务即可,SSL证书校验、解密都由Ingress完成,后端LDAP服务接收到的是明文流量,完全不需要做任何适配。证书更新后Nginx Ingress会自动加载新的Secret内容,无需重启服务。
两种方案适用场景:如果LDAP仅为集群内部服务提供认证,直接挂载证书+Reloader的方案性能更高;如果需要对外暴露LDAP服务,或者不想修改现有LDAP部署配置,优先选择Ingress层SSL终结的方案。
内容的提问来源于stack exchange,提问作者László Stahorszki
相关产品推荐
相关产品推荐

