簡體   English   中英

如何自動從 yaml 文件中刪除 kubernetes 機密?

[英]How can I automate the removal of kubernetes secrets from a yaml file?

我有一個包含許多 Kubernetes YAML 對象的文件。 我正在尋找一種從文本文件中刪除所有 K8s Secret YAML 對象的方法,這些對象由 YAML 塊中包含的"kind: Secret"字符串標識。 這應該刪除從“apiVersion”到“---”之前的所有內容,表示下一個 object 的開始。

我調查了 Sed、Python 和 yq 工具,但沒有運氣。 YAML 可以按任何順序包含任意數量的機密。

如何自動剝離這些“秘密”塊?

apiVersion: v1
data:
  username: dGVzdAo=
  password: dGVzdHBhc3N3b3JkCg==
kind: Secret
metadata:
  name: my-secret-1
type: Opaque
---
apiVersion: v1
kind: Pod
metadata:
  name: test-site
  labels:
    app: web
spec:
  containers:
    - name: front-end
      image: nginx
      ports:
        - containerPort: 80
    - name: rss-reader
      image: nickchase/rss-php-nginx:v1
      ports:
        - containerPort: 88
---
apiVersion: v1
data:
  username: dGVzdAo=
  password: dGVzdHBhc3N3b3JkCg==
kind: Secret
metadata:
  name: my-secret-2
type: Opaque
---

yq可以做到這一點(下面還有jq

pip install yq
yq --yaml-output 'select(.kind != "Secret")' input.yaml

您可能需要在示例末尾刪除 null 文檔,它在 output 中引起了一點奇怪

請注意,還有一個不同的yq實用程序似乎不像jq那樣做,所以我不知道如何使它工作。

使用命令---在每次出現時拆分文件的 shell 腳本怎么 (有關示例,請參閱此鏈接的第 5 節和第 6 節。)通過這種方式,腳本可以單獨評估每個部分,並將與Secret不對應的部分發送到新的 output 文件。

純粹使用正則表達式,您可能會搜索

(^|---).*?kind: Secret.*?(---|$)

並替換為:

---

在這里測試。

注意:最后,您可能有一些額外的---您需要“手動”刪除它們 - 但這應該沒什么大不了的。

暫無
暫無

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

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