使用 kubectl patch 将 DNS Rewrite Rule 添加到 CoreDNS Configmap

Use kubectl patch to add DNS Rewrite Rule to CoreDNS Configmap

我想使用 kubectl patch 命令将 DNS 重写规则添加到 coredns 配置映射中,如 Custom DNS Entries For 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 - 得到类似的结果,但这看起来有点难看,而且我想使用 JSON 扩展我对 kubctl patch 的了解。谢谢!

在您的情况下,您不能使用 patch 修改 ConfigMap。

data.Corefile 是一个键,它的值(Corefile 内容)的类型是:string.

它被api-server当作一串字节。您不能使用 kubectl patch 修补字符串的一部分。

其次:

I want to expand my knowledge of kubctl patch using JSON

Corefile 甚至不是有效的 json 文件。即使是,api-server 也看不到 json/yaml,因为 api-server 它只是一串随机的字母数字字符。


那你能做什么?

您还剩下 kubectl get ... | sed ... | kubectl replace -f - ,这是一个完全有效的解决方案。