如何在OpenShift中使用oc命令批量修改路由的TLS证书与密钥
OpenShift oc命令批量修改Edge路由TLS证书配置
如果你仅需要调整TLS配置中的cert和key参数,同时保留路由其余原有配置(如CA证书、不安全策略、端口绑定、域名等),可以通过以下方案实现单路由修改和批量修改:
单个Edge路由证书更新命令
使用oc patch命令可实现指定字段定向修改,不会覆盖其他已有配置:
oc patch route test-route -n test \ -p '{"spec":{"tls":{"certificate":"'"$(cat /data/new-test.crt.pem)"'","key":"'"$(cat /data/new-test.key.pem)"'"}}}'
批量更新多路由证书配置
场景1:多个路由使用相同的新证书
如果需要更新指定命名空间下所有Edge类型路由的证书,可直接遍历执行:
# 先读取新证书内容到变量,避免重复读取文件 NEW_CERT=$(cat /data/new-test.crt.pem) NEW_KEY=$(cat /data/new-test.key.pem) # 批量遍历所有edge类型路由执行更新 oc get routes -n test -o jsonpath='{.items[?(@.spec.tls.termination=="edge")].metadata.name}' | tr ' ' '\n' | while read ROUTE_NAME; do oc patch route ${ROUTE_NAME} -n test \ -p '{"spec":{"tls":{"certificate":"'"${NEW_CERT}"'","key":"'"${NEW_KEY}"'"}}}' echo "已更新路由: ${ROUTE_NAME}" done
场景2:每个路由对应独立的证书文件
提前将证书文件按{路由名}.crt.pem、{路由名}.key.pem的格式统一存放在指定目录,即可批量匹配更新:
# 自定义证书存放目录和目标命名空间 CERT_DIR="/data/certs/" TARGET_NS="test" for CERT_FILE in ${CERT_DIR}/*.crt.pem; do ROUTE_NAME=$(basename ${CERT_FILE} .crt.pem) # 校验对应私钥文件存在后再执行更新 if [ -f "${CERT_DIR}/${ROUTE_NAME}.key.pem" ]; then NEW_CERT=$(cat ${CERT_FILE}) NEW_KEY=$(cat ${CERT_DIR}/${ROUTE_NAME}.key.pem) oc patch route ${ROUTE_NAME} -n ${TARGET_NS} \ -p '{"spec":{"tls":{"certificate":"'"${NEW_CERT}"'","key":"'"${NEW_KEY}"'"}}}' echo "已更新路由: ${ROUTE_NAME}" else echo "路由${ROUTE_NAME}对应的私钥文件不存在,跳过更新" fi done
注意:正式执行前可以在
oc patch命令末尾添加--dry-run=client -o yaml参数,预览修改内容确认符合预期后再正式运行,避免误改配置。
内容的提问来源于stack exchange,提问作者ddakker
相关产品推荐
相关产品推荐

