临时创建多个 k8s 秘密

时间:2021-06-24 12:54:58

标签: kubernetes

使用以下命令:kubectl -n ns create secret generic test2 --from-literal=username=xxxxxx 我可以创建秘密。我想找到一种(以编程方式)使用列表而不是使用literal=username=xxxxxx 的方法,因为有时我需要多个文字。

我尝试的是以下内容:

NS=test-ns
SF=secrets.yaml
unset SECRET_NAMES
value+=(username)
value+=(password)
echo "" > $SF
for value in "${value[@]}"
do
        kubectl -n ${NS} create secret generic test2 \
                --from-literal=$value=xxxxxx \
                -o yaml >${NS}-$secret_name.yaml
done
cat $SF

但它失败了,因为它首先创建了用户名,然后它无法创建密码,因为秘密 test2 已经存在。你知道我该如何解决这个问题吗?

2 个答案:

答案 0 :(得分:2)

您可以根据需要多次重复 --from-literal 标志:

$ kubectl create secret generic test2 --from-literal=username=xxxxxx --from-literal=username2=xxxxxx
secret/test2 created

$ kubectl get secrets test2 -oyaml
apiVersion: v1
type: Opaque
kind: Secret
metadata:
  name: test2
data:
  username: eHh4eHh4
  username2: eHh4eHh4

答案 1 :(得分:0)

解决您对@whites11 回答的评论,引用如下:

<块引用>

是的,但这在我的情况下不起作用。问题是我创建了一个 jenkins 工作并且参数化了,我不知道每个用户会创建多少文字。

首先,您必须确定您希望用户如何在 Jenkin 作业参数中指定文字,例如使用“=”符号:

username=user1
password=p@ssword
realm=app
timezone=pdt

假设作业多行字符串参数作为 $SECRETS 传递给作业脚本。以下是对文字进行循环并构造所需的 kubectl 命令的方法:

ARGS=()
while read LINE
do 
    if [[ "${LINE}" != *"="* ]]; then continue; fi
    ARGS+=( "--from-literal=${LINE%%=*}=${LINE#*=}" )
done <<< "$SECRETS"

既然您在 kubectl create configmap 数组变量中有 ARGS 命令的参数,您可以像下面这样使用它:

NS=test-ns
kubectl -n ${NS} create secret generic test2 "${ARGS[@]}"
相关问题