如何在GCP负载均衡器中添加/替换Let's Encrypt SSL证书
自动化在GCP负载均衡器中添加/替换Let's Encrypt证书(替代UI操作)
我目前用GCP负载均衡器处理HTTP和HTTPS流量,SSL证书用的是Let's Encrypt的,已经配了cron定时任务自动刷新证书并上传到GCloud,但手动在UI里更新负载均衡器的证书实在太麻烦,想整个自动化脚本替代UI操作。下面是我现有的脚本框架,求完善lb_cert函数的实现:
#!/bin/bash # 此脚本需以root或sudo权限运行 cert_path=/etc/letsencrypt/live/domain.co project_ids=("domain-xxxxx") date=`date +%d-%m-%Y` certname="domain-cert-${date}" lb_cert() { # 这里需要补充实现负载均衡器证书替换的逻辑 } # 调用函数处理每个项目 for project in "${project_ids[@]}" do echo "处理项目: $project" gcloud config set project "$project" # 先上传新证书到GCP(对应UI里的「上传SSL证书」操作) gcloud compute ssl-certificates create "$certname" \ --certificate "${cert_path}/fullchain.pem" \ --private-key "${cert_path}/privkey.pem" # 调用负载均衡器证书替换函数 lb_cert "$project" "$certname" done
补充完整的lb_cert函数(对应UI操作的自动化)
下面是填充后的lb_cert函数,每一步都对应你在GCP控制台UI里的手动操作逻辑:
lb_cert() { local project=$1 local new_cert=$2 # 替换成你的目标HTTPS代理名称,对应UI里「负载均衡器」→「目标代理」中的HTTPS代理 local target_proxy="your-https-target-proxy-name" echo "在项目 $project 中更新目标代理 $target_proxy 的证书" # 步骤1: 获取当前目标代理使用的旧证书(对应UI里查看代理的证书配置) old_certs=$(gcloud compute target-https-proxies describe "$target_proxy" \ --format="value(sslCertificates)") # 步骤2: 替换目标代理的证书为新证书(对应UI里编辑代理、替换SSL证书) # 如果要保留旧证书作为备份,可以把old_certs加在后面,比如--ssl-certificates "$new_cert,$old_certs" gcloud compute target-https-proxies update "$target_proxy" \ --ssl-certificates "$new_cert" # 可选步骤: 删除旧证书(如果不需要保留的话,对应UI里删除旧证书) # 注意:如果旧证书还被其他代理/资源使用,绝对不要删除! # for cert in $old_certs # do # echo "删除旧证书: $cert" # gcloud compute ssl-certificates delete "$cert" --quiet # done echo "项目 $project 的证书更新完成" }
使用注意事项
- 务必把
your-https-target-proxy-name替换成你实际的目标HTTPS代理名称 - 如果有多个目标代理需要更新,可以在函数里添加循环逻辑批量处理
- 可选的删除旧证书部分请谨慎启用,执行前要确认旧证书没有被其他资源引用
- 运行脚本的账号需要具备足够的GCP权限(至少需要
compute.sslCertificates.create、compute.targetHttpsProxies.update权限)
内容的提问来源于stack exchange,提问作者mrdotb
相关产品推荐
相关产品推荐

