如何在命名空间之间复制Kubernetes Secret
时间:2020-02-23 14:30:19 来源:igfitidea点击:
如何将Kubernetes机密从一个名称空间复制到另一个名称空间?Secret是一个Kubernetes对象,它存储敏感数据,例如密码,令牌或者密钥。此类信息可能以其他方式放在Pod规范中或者图像中,但要在Pod和服务之间共享,最好是作为Kubernetes对象来完成。 Kubernetes集群用户可以创建机密,系统还可以创建一些机密。
在本教程中,如果使用OpenShift,我们将复制已经在名称空间或者项目中创建的密钥,并将其应用于其他名称空间。这通常适用于机密,例如注册表机密,共享git凭据,SSL证书和密钥,共享API凭据等。我们将创建一个测试秘密,并向我们展示如何将其从一个项目复制到另一个项目。
创建Kubernetes的Secret
我们将使用文件中的用户名和密码创建一个秘密。
echo -n 'admin' > ./username.txt echo -n 'Password' > ./password.txt
运行kubectl create secret命令以将这些文件打包为Secret并在API服务器上创建对象。
$kubectl create secret generic my-user-pass --from-file=./username.txt --from-file=./password.txt secret/my-user-pass created
我们也可以直接使用kubectl创建秘密,而无需文件。
kubectl create secret generic my-user-pass --from-literal='username=admin' --from-literal='password=Password'
机密对象的名称必须是有效的DNS子域名。
列出机密:
$kubectl get secrets
将秘密数据转换为base-64
这是我们手动将机密数据转换为base-64表示形式的方法:
$echo -n 'admin' | base64 YWRtaW4= $echo -n 'Password' | base64 UGFzc3dvcmQ=
yaml列表文件如下所示。
apiVersion: v1 kind: Secret metadata: name: my-user-pass data: username: YWRtaW4= password: UGFzc3dvcmQ=
在命名空间之间复制Kubernetes秘密
使用以下命令语法将机密从一个名称空间复制到另一个名称空间。
kubectl get secret <secret-name> \ --namespace=<source-nemespace> \ --export -o yaml | \ kubectl apply --namespace=<new-namespace> -f
在我的例子中,我会运行:
kubectl get secret my-user-pass \ --namespace=namespace1 \ --export -o yaml | \ kubectl apply --namespace=namespace2 -f
命令执行输出:
secret/my-user-pass created
在命名空间中确认秘密创建。
$kubectl get secret -n namespace2 my-user-pass NAME TYPE DATA AGE my-user-pass Opaque 2 38s
解密机密以确认数据正确:
secret_name="my-user-pass" namespace="namespace2" kubectl get secret -n $namespace $secret_name -o go-template='{{range $k,$v := .data}}{{printf "%s: " $k}}{{if not $v}}{{$v}}{{else}}{{$v | base64decode}}{{end}}{{"\n"}}{{end}}'
命令输出:
password.txt: Password username.txt: admin
如果我们有jq,则可以使用以下命令进行解密。
$kubectl get secret my-user-pass -o json | jq '.data | map_values(@base64d)' { "password.txt": "Password", "username.txt": "admin" }
这样便可以轻松地在Kubernetes和OpenShift Cluster中的命名空间之间复制密钥。