详情页标题前

阿里云容器服务ACKDNS原理和配置说明-云淘科技

详情页1

本文介绍Kubernetes集群中集群DNS服务原理,并针对不同场景介绍如何进行DNS策略配置。

前提条件

在进行内置DNS配置前,请确保您已完成以下操作:

  • 创建Kubernetes托管版集群

  • 获取集群KubeConfig并通过kubectl工具连接集群

背景信息

ACK集群默认部署了一套DNS服务,通过kube-dns的服务名暴露DNS服务。您可执行以下命令查看kube-dns的服务详情。

kubectl get svc kube-dns -n kube-system

预期输出:

NAME       TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)                  AGE
kube-dns   ClusterIP   172.24.0.10           53/UDP,53/TCP,9153/TCP   27d

ACK部署的DNS服务后端是两个名为CoreDNS的Pod。您可执行以下命令查看CoreDNS的Pod详情。

kubectl get deployment coredns -n kube-system

预期输出:

NAME      READY   UP-TO-DATE   AVAILABLE   AGE
coredns   2/2     2            2           27d

集群DNS域名解析原理

ACK集群中kubelet的启动参数有--cluster-dns=--cluster-domain=,这两个参数分别被用来设置集群DNS服务器的IP地址和主域名后缀。

Pod内的DNS域名解析配置文件为/etc/resolv.conf,文件内容如下。

nameserver xx.xx.0.10
search kube-system.svc.cluster.local svc.cluster.local cluster.local
options ndots:5

参数

描述

nameserver

定义DNS服务器的IP地址。

search

设置域名的查找后缀规则,查找配置越多,说明域名解析查找匹配次数越多。ACK集群匹配有kube-system.svc.cluster.localsvc.cluster.localcluster.local3个后缀,最多进行8次查询才能得到正确解析结果,因为集群里面进行IPV4和IPV6查询各四次。

options

定义域名解析配置文件选项,支持多个KV值。例如该参数设置成ndots:5,说明如果访问的域名字符串内的点字符数量超过ndots值,则认为是完整域名,并被直接解析;如果不足ndots值,则追加search段后缀再进行查询。

根据上述Pod内的配置,集群会将域名请求(集群内部定义的服务或是集群外部域名)查询发往集群DNS服务器获取结果。

集群dnsPolicy配置和场景说明

ACK支持通过dnsPolicy字段为每个Pod配置不同的DNS策略。目前ACK集群支持四种策略:

  • ClusterFirst:通过CoreDNS来做域名解析,Pod内/etc/resolv.conf配置的DNS服务地址是集群DNS服务的kube-dns地址。该策略是集群工作负载的默认策略。

  • None:忽略集群DNS策略,需要您提供dnsConfig字段来指定DNS配置信息。

  • Default:Pod直接继承集群节点的域名解析配置。即在ACK集群直接使用ECS的/etc/resolv.conf文件(文件内配置的是阿里云DNS服务)。

  • ClusterFirstWithHostNet:强制在hostNetWork网络模式下使用ClusterFirst策略(默认使用Default策略)。

针对上述四种策略,本文列举四种场景分别介绍如何配置dnsPolicy。

  • 场景一:使用ACK集群提供的CoreDNS来做域名解析

    针对这种场景,可使用dnsPolicy: ClusterFirst策略。示例配置如下:

    apiVersion: v1
    kind: Pod
    metadata:
      name: alpine
      namespace: default
    spec:
      containers:
      - image: alpine
        command:
          - sleep
          - "10000"
        imagePullPolicy: Always
        name: alpine
      dnsPolicy: ClusterFirst
  • 场景二:Pod层面自定义DNS配置

    当您需要给Deployment类型的工作负载指定DNS配置时,可使用dnsPolicy: None策略。示例配置如下:

    apiVersion: v1
    kind: Pod
    metadata:
      name: alpine
      namespace: default
    spec:
      containers:
      - image: alpine
        command:
          - sleep
          - "10000"
        imagePullPolicy: Always
        name: alpine
      dnsPolicy: None
      dnsConfig:
        nameservers: ["169.254.xx.xx"]
        searches:
        - default.svc.cluster.local
        - svc.cluster.local
        - cluster.local
        options:
        - name: ndots
          value: "2"

    其中,dnsConfig中的参数说明如下:

    参数

    描述

    nameservers

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

    searches

    Pod中主机名查找的DNS搜索域列表。此属性是可选的。指定后,提供的列表将合并到从所选DNS策略生成的基本搜索域名中,并删除重复的域名。Kubernetes最多允许6个搜索域。

    options

    可选的对象列表,其中每个对象可以具有name属性(必需)和value属性(可选)。此属性中的内容将合并到从指定的DNS策略生成的选项中,并删除重复的条目。

    更多信息,请参见Kubernetes官网的DNS配置说明。

  • 场景三:采用阿里云ECS的DNS配置

    当您的应用Pod不需要访问集群内的其他服务,只需要通过阿里云DNS来做解析,也不希望DNS解析经过CoreDNS,可以采用dnsPolicy: Default策略。示例配置如下:

    apiVersion: v1
    kind: Pod
    metadata:
      name: alpine
      namespace: default
    spec:
      containers:
      - image: alpine
        command:
          - sleep
          - "10000"
        imagePullPolicy: Always
        name: alpine
      dnsPolicy: Default
  • 场景四:在HostNetwork网络模式下访问集群服务

    如果您的应用Pod使用hostNetwork:true来配置网络,Pod中运行的应用程序可以直接看到宿主机的网络接口,其DNS策略默认为Default,不能访问集群内的服务。如果您希望在此网络模式下访问集群内服务,可使用dnsPolicy: ClusterFirstWithHostNet策略。示例配置如下:

    apiVersion: v1
    kind: Pod
    metadata:
      name: alpine
      namespace: default
    spec:
      hostNetwork: true
      dnsPolicy: ClusterFirstWithHostNet
      containers:
      - image: alpine
        command:
          - sleep
          - "10000"
        imagePullPolicy: Always
        name: alpine

使用HostAliases配置容器Pod的/etc/hosts

当您希望在容器Pod内部解析某一域名到固定IP地址时,可以在CoreDNS启用hosts插件,具体操作,请参见CoreDNS的扩展配置。

若您希望解析域名到固定IP地址仅生效在某个容器Pod内,您可以通过HostAliases字段修改容器Pod内/etc/hosts文件实现该操作。示例配置如下:

apiVersion: v1
kind: Pod
metadata:
  name: hostaliases-pod
spec:
  hostAliases:
  - ip: "127.0.**.**"
    hostnames:
    - "foo.local"
    - "bar.local"
  - ip: "10.1.**.**"
    hostnames:
    - "foo.remote"
  containers:
  - name: cat-hosts
    image: busybox:1.28
    command:
    - cat
    args:
    - "/etc/hosts"

当为Pod的spec字段中增加hostAliases字段后,Pod启动后/etc/hosts文件会被初始化成以下内容。

# Kubernetes-managed hosts file.
127.0.**.**	localhost
::1	localhost ip6-localhost ip6-loopback
fe00::0	ip6-localnet
fe00::0	ip6-mcastprefix
fe00::1	ip6-allnodes
fe00::2	ip6-allrouters
10.200.**.**	hostaliases-pod

# Entries added by HostAliases.
127.0.**.**	foo.local	bar.local
10.1.**.**	foo.remote	bar.remote

可以看到,foo.local、bar.local、foo.remote域名都已经绑定到固定IP。

内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家

阿里云企业补贴进行中: 马上申请

腾讯云限时活动1折起,即将结束: 马上收藏

同尘科技为腾讯云授权服务中心。

购买腾讯云产品享受折上折,更有现金返利:同意关联,立享优惠

转转请注明出处:https://www.yunxiaoer.com/157974.html

(0)
上一篇 2023年12月10日 上午1:13
下一篇 2023年12月10日
详情页2

相关推荐

  • 请教阿里云DNS,二级域名解析不成功,需要设置哪里吗?-云小二-阿里云

    请教阿里云DNS,二级域名解析不成功,需要设置哪里吗? 以下为热心网友提供的参考意见 如果您的阿里云DNS二级域名解析不成功,首先需要确认您已在云解析DNS控制台中添加了对应的解析记录。如果没有设置解析记录,解析功能是无法正常工作的。同时,也需要检查您的解析线路是否已配置为默认,如未配置请修改为默认,然后等待一段时间(例如10分钟),再进行测试。 此外,还需…

    2024年1月4日
  • 阿里云负载均衡为ALB添加CNAME记录-云淘科技

    您可以在域名解析中添加CNAME记录,将自定义域名解析指向应用型负载均衡ALB的公网服务域名。 简介 CNAME记录即别名记录,又称别名解析,您可以在域名解析服务中添加CNAME记录,将自定义域名指向应用型负载均衡ALB的DNS名称,实现通过自定义域名访问ALB。具体实现方案如下图所示: 前提条件已创建应用型负载均衡。 操作步骤 登录应用型负载均衡ALB控制…

    阿里云负载均衡 2023年12月10日
  • 阿里云容器服务ACK【组件升级】CoreDNS升级公告-云淘科技

    为了提升ACK集群内域名解析服务的稳定性,建议您升级集群的CoreDNS至最新版本。本文介绍如何升级CoreDNS的版本。 背景信息 低于1.7.0版本的CoreDNS存在以下问题,可能会影响ACK集群内域名解析服务的稳定性: CoreDNS与APIServer连通性异常(例如APIServer重启、APIServer迁移、网络抖动)时,CoreDNS会因错…

    阿里云容器服务 2023年12月10日
  • 信息流广告,信息流部分建议宽度830px,只针对默认列表样式,顺序随机
  • 阿里的这个公共阿里云DNS,可以解决这种问题不?-云小二-阿里云

    我有个服务,前些天被攻击流量大,我就套了cloudflare缓存。前几天攻击少了,就换到正常解析关掉缓存,结果福建地区的马上把域名解析成127.0.0.1. 别的地方都没事。大家有遇到吗。这种情况还有救吗?阿里的这个公共阿里云DNS,可以解决这种问题不? 以下为热心网友提供的参考意见 DNS可以解决,此回答整理自钉群“【外部】阿里云DNS客户交流4群”

    阿里云 2023年12月29日
  • 阿里云容器服务ACK【组件升级】CoreDNS升级公告-云淘科技

    为了提升ACK集群内域名解析服务的稳定性,建议您升级集群的CoreDNS至最新版本。本文介绍如何升级CoreDNS的版本。 背景信息 低于1.7.0版本的CoreDNS存在以下问题,可能会影响ACK集群内域名解析服务的稳定性: CoreDNS与APIServer连通性异常(例如APIServer重启、APIServer迁移、网络抖动)时,CoreDNS会因错…

    阿里云容器服务 2023年12月10日

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
本站为广大会员提供阿里云、腾讯云、华为云、百度云等一线大厂的购买,续费优惠,保证底价,买贵退差。