Патч Kubectl дает: Ошибка с сервера: не удается восстановить срез с карты - PullRequest
1 голос
/ 01 мая 2020

У меня есть этот объект входа, где я пытаюсь исправить secretName:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: hello-world
...
spec:
  rules:
  - host: my.host
    http:
      paths:
      - backend:
          serviceName: hello-world
          servicePort: 8080
  tls:
  - hosts:
    - my.host
    secretName: my-secret

Я хотел бы обновить секретное имя, используя kubectl patch Я пытался:

$ kubectl patch ing hello-world -p '{"spec":{"tls":{"secretName":"updated"}}}'
Error from server: cannot restore slice from map

и:

$ kubectl patch ing hello-world -p '[{"op": "replace", "path": "/spec/tls/secretName", "value" : "updated"}]'
Error from server (BadRequest): json: cannot unmarshal array into Go value of type map[string]interface {}

Есть предложения?

Ответы [ 2 ]

1 голос
/ 01 мая 2020

Вы можете обновить выше json поле массива следующим

kubectl patch ing hello-world --type json -p '[{"op": "replace", "path": "/spec/tls/0/secretName", "value" : "updated"}]'

Здесь вы должны указать индекс, в вашем случае это 0

1 голос
/ 01 мая 2020

tls - это массив / фрагмент, поэтому вы должны ссылаться на него и включать его в исходный патч.

$ kubectl patch ing hello-world -p '{"spec":{"tls":[{"hosts":["my.host"], "secretName": "updated"}]}}'

Хороший способ получить правильные значения -p (это у меня работает) это конвертировать их из YAML в JSON. Вы можете попробовать онлайн-инструмент, такой как this .

...