如何自动从 yaml 文件中删除 kubernetes 机密?

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

我有一个包含许多 Kubernetes YAML 对象的文件。 我正在寻找一种从文本文件中删除所有 K8s Secret YAML 对象的方法,这些对象由 YAML 块中包含的 "kind: Secret" 字符串标识。这应该删除从“apiVersion”到“---”之前的所有内容,表示下一个对象的开始。

我研究过 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 can do this (and jq下)

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

您可能需要删除示例末尾的空文档,这会导致输出有点奇怪

注意 还有一个不同的 yq utility 似乎没有做什么 jq这样做我不确定如何使它起作用。

使用命令 awk 在每次出现 --- 时拆分文件的 shell 脚本怎么样? (有关示例,请参见此 link 的第 5 和第 6 节。)通过这种方式,脚本可以分别评估每个部分,并将那些不符合 Secret 的部分发送到新的输出文件。

纯粹使用正则表达式,您可以搜索

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

并替换为:

---

测试here.

注意:最后,您可能有一些额外的 --- 需要“手动”删除 - 但这应该没什么大不了的。