云容器引擎 CCE-使用NodeLocal DNSCache提升DNS性能:使用NodeLocal DNSCache

时间:2024-05-31 08:37:35

使用NodeLocal DNSCache

默认情况下,应用的请求会通过CoreDNS代理,如果需要使用node-local-dns进行DNS缓存代理,您有以下几种方式可以选择:

  • 自动注入:创建Pod时自动配置Pod的dnsConfig字段。(kube-system等系统命名空间下的Pod不支持自动注入)
  • 手动配置:手动配置Pod的dnsConfig字段,从而使用NodeLocal DNSCache。

自动注入

自动注入需要满足如下条件:

  • 在安装插件时,开启DNSConfig自动注入
  • 命名空间添加node-local-dns-injection=enabled标签。例如,为default命名空间添加该标签的命令如下:

    kubectl label namespace default node-local-dns-injection=enabled

  • 新建Pod不位于kube-system和kube-public等系统命名空间。
  • 新建Pod没有被打上禁用DNS注入的标签node-local-dns-injection=disabled。
  • 新建Pod的DNSPolicy为ClusterFirstWithHostNet,或Pod为非hostNetwork且DNSPolicy为ClusterFirst。

开启自动注入后,创建的Pod会自动添加如下dnsConfig字段,nameservers中除了NodeLocal DNSCache的地址(169.254.20.10)外,还添加了CoreDNS的地址(10.247.3.10),保障了业务DNS请求高可用。

...
  dnsConfig:
    nameservers:
      - 169.254.20.10
      - 10.247.3.10
    searches:
      - default.svc.cluster.local
      - svc.cluster.local
      - cluster.local
    options:
      - name: timeout
        value: ''
      - name: ndots
        value: '5'
      - name: single-request-reopen
...

手动配置

手动配置即自行给Pod加上dnsConfig配置。

创建一个Pod,并在dnsConfig中的nameservers配置中添加NodeLocal DNSCache的地址(169.254.20.10)。

不同集群类型的NodeLocal DNSCache地址如下:

  • CCE Standard集群:169.254.20.10
  • CCE Turbo 集群:169.254.1.1
apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
  - image: nginx:alpine
    name: container-0
  dnsConfig:
    nameservers:
    - 169.254.20.10
    - 10.247.3.10
    searches:
    - default.svc.cluster.local
    - svc.cluster.local
    - cluster.local
    options:
    - name: ndots
      value: '2'
  imagePullSecrets:
  - name: default-secret
support.huaweicloud.com/usermanual-cce/cce_10_0362.html