#!/bin/bash
# 创建一个目录存放导出的证书
mkdir -p exported_certificates
cd exported_certificates || exit
# 获取所有命名空间
namespaces=$(kubectl get namespaces -o jsonpath='{.items[*].metadata.name}')
# 遍历每个命名空间
for ns in $namespaces; do
echo "Processing namespace: $ns"
# 获取该命名空间中所有包含tls证书的secret(使用临时文件避免管道为空的问题)
temp_file=$(mktemp)
kubectl get secrets -n "$ns" -o jsonpath='{range .items[?(@.type=="kubernetes.io/tls")]}{.metadata.name}{"\n"}{end}' 2>/dev/null > "$temp_file"
secrets=$(cat "$temp_file")
rm "$temp_file"
# 如果有符合条件的secret,进行处理
if [ -n "$secrets" ]; then
# 为每个命名空间创建子目录
mkdir -p "$ns"
cd "$ns" || continue
# 遍历每个secret
while IFS= read -r secret; do
echo " Exporting secret: $secret"
# 导出CA证书(如果存在)
if kubectl get secret "$secret" -n "$ns" -o jsonpath='{.data.ca\.crt}' > /dev/null 2>&1; then
kubectl get secret "$secret" -n "$ns" -o jsonpath='{.data.ca\.crt}' | base64 -d > "${ns}_${secret}_ca.crt"
fi
# 导出tls证书
kubectl get secret "$secret" -n "$ns" -o jsonpath='{.data.tls\.crt}' | base64 -d > "${ns}_${secret}_tls.crt"
# 导出tls私钥
kubectl get secret "$secret" -n "$ns" -o jsonpath='{.data.tls\.key}' | base64 -d > "${ns}_${secret}_tls.key"
done <<< "$secrets"
cd .. || exit
else
echo " No TLS secrets found in namespace: $ns"
fi
done
echo "Certificate export completed. Files are in exported_certificates directory."