Используйте патч kubectl, чтобы добавить правило перезаписи DNS в CoreDNS Configmap

Я хочу использовать команду kubectl patch, чтобы добавить правило перезаписи DNS в конфигурационную карту coredns, как описано в Пользовательские записи DNS для Kubernetes. Карта конфигурации по умолчанию выглядит так:

apiVersion: v1
data:
  Corefile: |
    .:53 {
        log
        errors
        health
        kubernetes cluster.local in-addr.arpa ip6.arpa {
           pods insecure
           upstream
           fallthrough in-addr.arpa ip6.arpa
           ttl 30
        }
        prometheus :9153
        forward . /etc/resolv.conf
        cache 30
        loop
        reload
        loadbalance
    }
kind: ConfigMap
....

и я хочу добавить строку

rewrite name old.name new.name

но то, как указать добавление строки в элемент.: 53, сбивает меня с толку.

Я знаю, что могу получить аналогичный результат, используя kubectl get ... | sed ... | kubectl replace -f -, но это выглядело бы некрасиво, к тому же я хочу расширить свои знания о kubctl patch с помощью JSON. Спасибо!


person Steve    schedule 15.09.2020    source источник


Ответы (1)


Вы не можете изменить ConfigMap, используя patch в вашем случае.

data.Corefile - это ключ, и его значение (содержимое Corefile) имеет тип: string.

Он обрабатывается api-сервером как строка байтов. Вы не можете исправить часть строки патчем kubectl.

И во-вторых:

Я хочу расширить свои знания о патче kubctl с помощью JSON

Corefile даже не является допустимым файлом json. Даже если бы это было так, api-server не видит json / yaml, для api-server это просто строка случайных буквенно-цифровых символов.


Так что ты можешь сделать?

У вас остаётся kubectl get ... | sed ... | kubectl replace -f - , и это абсолютно верное решение.

person Matt    schedule 15.09.2020