Я хотел бы написать мутирующий webhook , чтобы добавить входной класс по умолчанию ко всем входящим объектам, которые явно не предоставляют его.
Согласно примерам я обнаружил, что мне нужно предоставить правильный json-патч для возврата webhook.
Я впервые попробовал свои патчи, используя 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.