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



我有一个包含许多 Kubernetes YAML 对象的文件。 我正在寻找一种从文本文件中删除所有 K8s 秘密 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可以做到这一点(jq下面(

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

您可能需要在示例末尾删除 null 文档,它会导致输出中出现一些奇怪

请注意,还有一个不同的yq实用程序似乎没有执行jq所做的事情,因此我不确定如何使该实用程序工作。

使用命令awk在每次出现---时拆分文件的 shell 脚本怎么样?(有关示例,请参阅此链接的第 5 节和第 6 节。这样,脚本可以单独评估每个部分,并将与Secret不对应的部分发送到新的输出文件。

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

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

并替换为:

---

在这里测试。

注意:最后,您可能有一些额外的---需要"手动"删除 - 但这应该不是什么大问题。

最新更新