Kubernetes kubectl命令用于在configMap或Secrets中查找密钥

Kubernetes kubectl命令用于在configMap或Secrets中查找密钥,kubernetes,Kubernetes,我有大约10个ConfigMap和一些秘密,它们将我的配置存储在key和value中。我正在寻找任何kubectl命令,我可以使用它在任何可用的configMap或secrets中查找我的密钥? 我知道我可以打开每个文件并找到我的密钥,但是有没有kubectl命令可以查找所有configMap或Serects以找到我的密钥?这可能不是最好的解决方案,但它可以工作,目前我想到的唯一方法是使用它。如果我将找到不同的解决方案,我将编辑此答案 如果kubectl命令只指定resource,而没有指定名称

我有大约10个ConfigMap和一些秘密,它们将我的配置存储在key和value中。我正在寻找任何kubectl命令,我可以使用它在任何可用的configMap或secrets中查找我的密钥?
我知道我可以打开每个文件并找到我的密钥,但是有没有
kubectl
命令可以查找所有configMap或Serects以找到我的密钥?

这可能不是最好的解决方案,但它可以工作,目前我想到的唯一方法是使用它。如果我将找到不同的解决方案,我将编辑此答案

如果
kubectl
命令只指定
resource
,而没有指定名称,则它将打印来自该指定资源的所有对象的信息
kubectl Descripte cm
将打印所有
ConfigMaps

对于测试,我已经从中创建了5个(带有data.game.properties和data.ui.properties)。在其中3个键中,我用值
1
3
5
设置了相同的键
test

$ kubectl get cm
NAME   DATA   AGE
cm1    1      20m
cm2    1      21m
cm3    1      21m
cm4    1      21m
cm5    1      21m
所以最简单的方法就是使用
kubest get cm-o yaml
,它将以yaml格式打印所有
ConfigMaps
,然后按键或值打印它们

$ kubectl get cm -o yaml | grep test
      test=configmap1
        {"apiVersion":"v1","data":{"game.properties":"enemies=aliens\nlives=3\ntest=configmap1\n"},"kind":"ConfigMap","metadata":{"annotations":{},"name":"cm1","namespace":"default"}}
      test=configmap3
        {"apiVersion":"v1","data":{"game.properties":"secret.code.allowed=true\nsecret.code.lives=30\ntest=configmap3\n"},"kind":"ConfigMap","metadata":{"annotations":{},"name":"cm3","namespace":"default"}}
      test=configmap5
        {"apiVersion":"v1","data":{"ui.properties":"allow.textmode=true\nhow.nice.to.look=fairlyNice \ntest=configmap5\n"},"kind":"ConfigMap","metadata":{"annotations":{},"name":"cm5","namespace":"default"}}
因此
cm1
包括
test=configmap1
cm3
包括
test=configmap3
cm5
包括
test=configmap5
。除了
YAML
之外,还可以使用
JSON

此外,由于
ConfigMap
名称空间的
,您可以使用
-A
标志检查所有
名称空间

$ kubectl get cm -o yaml -A | grep test
它可能很难读取,但在控制台输出中将突出显示它


您也可以使用。

创建以下kubectl插件

#!/bin/bash

kubectl get secrets -o go-template='{{range $s:=.items}}{{range $k,$v:=$s.data}}{{printf "Secret %s: %s\n" $s.metadata.name $k}}{{end}}{{end}}' | grep -i $1
kubectl get configmap -o go-template='{{range $s:=.items}}{{range $k,$v:=$s.data}}{{printf "CM %s: %s\n" $s.metadata.name $k}}{{end}}{{end}}' | grep -i $1
它必须位于执行路径上的某个位置,并且是可执行的

# Make script executable
chmod +x /home/mark/bin/kubectl-find-key

# Check it can be found
kubectl plugin list
最后,它可以按如下方式使用

$ kubectl find key database
CM myapp-details: DATABASE_HOSTNAME