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

#patch #kubectl #configmap #coredns

#исправление #kubectl #configmap #coredns

Вопрос:

Я хочу использовать kubectl patch команду для добавления правила перезаписи DNS в coredns configmap, как описано в пользовательских записях 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. Спасибо!

Ответ №1:

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

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

API-сервер обрабатывает его как строку байтов. Вы не можете исправить часть строки с помощью исправления kubectl.

И, во-вторых:

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

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


Итак, что вы можете сделать?

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