如何将SSL证书从Kubernetes Secrets导出并复原为证书PEM和密钥文件

发布时间 2023-07-04 16:48:19作者: 伟成

首先,您需要使用 kubectl 工具从 Kubernetes 导出 Secret 到一个 yaml 文件,这通常使用如下命令:

kubectl get secret my-secret -o yaml > my-secret.yaml

然后我们可以创建一个简单的 bash 脚本来处理 yaml 文件并导出证书:

#!/bin/bash

# 解析 yaml 文件并得到证书内容
certData=$(cat my-secret.yaml | grep tls.crt | awk '{print $2}')
keyData=$(cat my-secret.yaml | grep tls.key | awk '{print $2}')

# 导出证书和密钥
echo $certData | base64 --decode > cert.pem
echo $keyData | base64 --decode > key.pem

这个脚本将从您的 yaml 文件中提取 tls.crt 和 tls.key(这是 Kubernetes 中默认的 SSL Secret 格式)的内容,然后使用 base64 解码并将结果导出到 pem 文件中。

这个脚本假定您的 yaml 文件名称为 my-secret.yaml,并且您的证书和密钥分别以 base64 编码存储在 tls.crttls.key 中。根据您的实际情况,您可能需要修改这些参数以适应您的环境。

文心一言


当导出SSL证书和私钥时,需要小心处理敏感数据。以下是一个基于Python的示例脚本,用于将Kubernetes Secrets中的证书和私钥导出为PEM格式的文件。

python

import yaml  
import base64  
import os  
  
# 读取Kubernetes Secrets的YAML文件  
with open('secrets.yaml', 'r') as file:  
    secrets_yaml = yaml.safe_load(file)  
  
# 从YAML中提取证书和私钥数据  
certificate = base64.b64decode(secrets_yaml['data']['tls.crt'].encode('utf-8'))  
private_key = base64.b64decode(secrets_yaml['data']['tls.key'].encode('utf-8'))  
  
# 导出证书和私钥到文件  
certificate_filename = 'certificate.pem'  
private_key_filename = 'private_key.pem'  
  
with open(certificate_filename, 'wb') as certificate_file:  
    certificate_file.write(certificate)  
  
with open(private_key_filename, 'wb') as private_key_file:  
    private_key_file.write(private_key)  
  
print(f'Certificate saved to {certificate_filename}')  
print(f'Private key saved to {private_key_filename}')

请确保将secrets.yaml文件替换为您实际的Kubernetes Secrets YAML文件的路径。此脚本将证书保存到certificate.pem文件,私钥保存到private_key.pem文件。