簡體   English   中英

Kubernetes kubectl 命令在 configMap 或 Secrets 中查找 Key

[英]Kubernetes kubectl command to lookup Key in configMap or Secrets

我有大約 10 個 ConfigMap 和一些秘密,它們將我的配置存儲在鍵和值中。 我正在尋找可以用來在任何可用的 configMap 或機密中找到我的密鑰的任何 kubectl 命令? 我知道我可以打開每個文件並找到我的密鑰,但是是否有任何kubectl命令可以查找所有 configMap 或 Serects 以找到我的密鑰?

這可能不是最好的解決方案,但它有效,目前這是我想到的唯一方法。 如果我能找到不同的解決方案,我會編輯這個答案。

如果您的kubectl命令將僅指定沒有特定名稱的resource ,它將打印來自該指定資源的所有對象的信息。 kubectl describe cm將打印所有ConfigMaps的描述

為了測試,我從文檔示例(使用 data.game.properties 和 data.ui.properties)創建了 5 個ConfigMap 在其中 3 個中,我使用值135設置了相同的鍵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 ,然后通過鍵或值打印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 您也可以使用JSON YAML

此外,由於ConfigMapnamespaced ,您可以使用-A標志來檢查所有namespaces

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

它可能難以閱讀,但在控制台 output 中會突出顯示。

你可以對Secrets做同樣的事情。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM