【问题标题】:Kubernetes kubectl command to lookup Key in configMap or SecretsKubernetes kubectl 命令在 configMap 或 Secrets 中查找 Key
【发布时间】:2021-01-12 14:51:41
【问题描述】:

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

【问题讨论】:

标签: kubernetes


【解决方案1】:

创建以下 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

【讨论】:

    【解决方案2】:

    这可能不是最好的解决方案,但它确实有效,目前这是我想到的唯一方法。如果我能找到不同的解决方案,我会编辑这个答案。

    如果您的kubectl 命令将仅指定resource 而没有特定名称,它将打印来自该指定资源的所有对象的信息。 kubectl describe cm 将打印所有ConfigMaps 的描述

    为了测试,我从 documentation example 创建了 5 个 ConfigMaps(带有 data.game.properties 和 data.ui.properties)。在其中 3 个中,我设置了相同的键 test,其值为 135

    $ 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,然后通过键或值打印grep

    $ 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=configmap1cm3 包括test=configmap3cm5 包括test=configmap5。除了YAML,您还可以使用JSON

    此外,由于ConfigMapnamespaced,您可以使用-A 标志检查所有namespaces

    $ kubectl get cm -o yaml -A | grep test
    

    可能难以阅读,但在控制台输出中会突出显示。

    Secrets 也可以这样做。

    【讨论】:

      猜你喜欢
      • 2020-10-31
      • 1970-01-01
      • 2019-05-09
      • 1970-01-01
      • 2018-10-04
      • 2019-01-08
      • 1970-01-01
      • 1970-01-01
      • 2016-11-08
      相关资源
      最近更新 更多