云容器引擎 CCE-工作负载DNS配置说明:通过工作负载YAML进行DNS配置

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

通过工作负载YAML进行DNS配置

您也可以通过YAML的方式创建工作负载,以nginx应用为例,其YAML文件中的DNS配置示例如下:
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: container-1
          image: nginx:latest
          imagePullPolicy: IfNotPresent
      imagePullSecrets:
        - name: default-secret
      dnsPolicy: None
      dnsConfig:
        options:
          - name: ndots
            value: '5'
          - name: timeout
            value: '3'
        nameservers:
          - 10.2.3.4
        searches:
          - my.dns.search.suffix
  • dnsPolicy字段说明:
    dnsPolicy字段是应用设置的DNS策略,默认值为“ClusterFirst”。dnsPolicy当前支持四种参数值:
    表1 dnsPolicy字段说明

    参数

    说明

    ClusterFirst(默认值)

    即在默认DNS配置中追加自定义的 域名 解析配置。应用会默认对接CoreDNS(CCE集群的CoreDNS默认级联云上DNS),自定义填写的dnsConfig会追加到默认DNS参数中。这种场景下,容器既能够解析service注册的集群内部域名,也能够解析发布到互联网上的外部域名。由于该配置下,域名解析文件设置了search搜索域列表和ndots: 5,因此当访问外部域名和集群内部长域名(如kubernetes.default.svc.cluster.local)时,大部分域名都会优先遍历search搜索域列表,导致至少有6次无效的DNS查询,只有访问集群内部短域名(如kubernetes)时,才不存在无效的DNS查询。

    ClusterFirstWithHostNet

    对于配置主机网络(hostNetwork)的应用,默认对接Pod所在节点域名解析配置,即kubelet的“--resolv-conf”参数指向的域名解析文件(CCE集群在该配置下对接云上DNS)。如需对接集群的Kube-DNS/CoreDNS,dnsPolicy字段需设置为ClusterFirstWithHostNet,此时容器的域名解析文件配置与“ClusterFirst”一致,也存在无效的DNS查询。
    ...
    spec:
      containers:
      - image: nginx:latest
        imagePullPolicy: IfNotPresent
        name: container-1
      restartPolicy: Always
      hostNetwork: true
      dnsPolicy: ClusterFirstWithHostNet

    Default

    即继承Pod所在节点域名解析配置,并在此基础上追加自定义的域名解析配置。容器的域名解析文件使用kubelet的“--resolv-conf”参数指向的域名解析文件(CCE集群在该配置下对接云上DNS),没有配置search搜索域列表和options。该配置只能解析注册到互联网上的外部域名,无法解析集群内部域名,且不存在无效的DNS查询。

    None

    即替换默认的域名解析配置,完全使用自定义的域名解析配置。设置为None之后,必须设置dnsConfig字段,此时容器的域名解析文件将完全通过dnsConfig的配置来生成。

    此处如果dnsPolicy字段未被指定,其默认值为ClusterFirst,而不是Default。

  • dnsConfig字段说明
    dnsConfig为应用设置DNS参数,设置的参数将合并到基于dnsPolicy策略生成的域名解析文件中。当dnsPolicy为“None”,应用的域名解析文件完全由dnsConfig指定;当dnsPolicy不为“None”时,会在基于dnsPolicy生成的域名解析文件的基础上,追加dnsConfig中配置的dns参数。
    表2 dnsConfig字段说明

    参数

    说明

    options

    DNS的配置选项,其中每个对象可以具有name属性(必需)和value属性(可选)。该字段中的内容将合并到基于dnsPolicy生成的域名解析文件的options字段中,dnsConfig的options的某些选项如果与基于dnsPolicy生成的域名解析文件的选项冲突,则会被dnsConfig所覆盖。

    nameservers

    DNS的IP地址列表。当应用的dnsPolicy设置为“None”时,列表必须至少包含一个IP地址,否则此属性是可选的。列出的DNS的IP列表将合并到基于dnsPolicy生成的域名解析文件的nameserver字段中,并删除重复的地址。

    说明:

    容器DNS配置文件中nameserver最多可设置3个 DNS地址

    • 当dnsPolicy设置为ClusterFirst时,如果集群使用CoreDNS,除CoreDNS地址外可追加2个自定义DNS地址,超出部分无效。
    • 当dnsPolicy设置为ClusterFirst时,如果集群同时使用CoreDNSNodeLocal DNSCache,除CoreDNS和NodeLocal DNSCache地址外可追加1个自定义DNS地址,超出部分无效。

    searches

    域名查询时的DNS搜索域列表,此属性是可选的。指定后,提供的搜索域列表将合并到基于dnsPolicy生成的域名解析文件的search字段中,并删除重复的域名。Kubernetes最多允许6个搜索域。

support.huaweicloud.com/usermanual-cce/cce_10_0365.html