首页 > 解决方案 > 创建补丁以添加 Kubernetes 注释

问题描述

我想编写一个变异 webhook来为所有没有明确提供的入口对象添加一个默认入口类。

根据我发现的示例,我需要为 webhook 提供适当的 json 补丁才能返回。

我首先使用 kubectl 尝试了我的补丁:

$ kubectl patch ingress mying --type='json' -p='[{"op": "add", "path": "/metadata/annotations/key", "value":"value"}]'
The  "" is invalid

当尚不存在注释元素时,这似乎不起作用。

$ kubectl patch ingress mying --type='json' -p='[{"op": "add", "path": "/metadata/annotations", "value":{"key":"value"}}]'
ingress.extensions/kafka-monitoring-topics-ui patched

创建完整的注释元素工作正常,但在我的情况下,我需要一个kubernetes.io/ingress.class包含斜杠的键。

kubectl patch ingress mying --type='json' -p='[{"op": "add", "path": "/metadata/annotations", "value":{"kubernetes.io/ingress.class":"value"}}]'
ingress.extensions/kafka-monitoring-topics-ui patched

这在创建注释对象时工作正常。但是,如果已经存在一些注释并且我只是想添加一个,那么似乎不可能添加一个。

简单地使用[{"op": "add", "path": "/metadata/annotations", "value":{"kubernetes.io/ingress.class":"value"}}]会删除所有现有的注释,而类似的东西'[{"op": "add", "path": "/metadata/annotations/kubernetes.io/ingress.class", "value": "value"}]由于包含斜线而不起作用。

长话短说:使用适当的补丁简单地添加入口类的正确方法是什么?

PS:是的,我知道kubectl annotate,但不幸的是,这对我的 webhook 没有帮助。

标签: gokuberneteswebhookspatch

解决方案


对我来说更容易的是annotate而不是patch

kubectl annotate ingress mying kubernetes.io/ingress.class=value

--dry-run -o yaml如果您想在应用更改之前对其进行测试,请添加标志。


推荐阅读