go - 创建补丁以添加 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 没有帮助。
解决方案
对我来说更容易的是annotate
而不是patch
:
kubectl annotate ingress mying kubernetes.io/ingress.class=value
--dry-run -o yaml
如果您想在应用更改之前对其进行测试,请添加标志。
推荐阅读
- amazon-web-services - 适用于全球的 AWS EC2 性能
- r - R:单细胞跟踪 X 和 Y 坐标(位置)在时间过程中的变化
- javascript - 使用 AWS PinPoint 从 Web 应用程序发送推送通知
- java - 如何通过recycleview适配器显示字符串数组内容
- html - 如何将文本对齐到屏幕右侧并具有背景颜色?
- javascript - 作为对象引用的变量不起作用
- android - Android O 电源状态隐式广播替代
- mysql - 在 UNION 之后 MySql 没有更新
- uwp - 消除粘性滚动标题中的摆动
- angular - Angular 5 Material 数据表'this.dataSource.connect 不是函数'