IDC

容器服务 在 TKE 中实现自定义域名解析 - 最佳实践

作者:admin 2021-09-16 我要评论

操作场景 在使用容器服务 TKE 或弹性容器集群 EKS 时,可能会有解析自定义内部域名的需求,例如: 在集群外自建了集中存储服务,需要将集群中的监控或日志数据采...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

操作场景

在使用容器服务 TKE 或弹性容器集群 EKS 时,可能会有解析自定义内部域名的需求,例如:

  • 在集群外自建了集中存储服务,需要将集群中的监控或日志数据采集通过固定内部域名发送到存储服务。
  • 传统业务在进行容器化改造过程中,部分服务的代码配置了用固定域名调用内部其他服务,且无法修改配置,即无法使用 Kubernetes 的 Service 名称进行调用。

方案选择

本文将介绍以下3种在集群中使用自定义域名解析的方案示例:

方案 优势
方案1:使用 CoreDNS Hosts 插件配置任意域名解析 简单直观,可以添加任意解析记录。
方案2:使用 CoreDNS Rewrite 插件指向域名到集群内服务 无需提前知道解析记录的 IP 地址,但要求解析记录指向的地址必须部署在集群中。
方案3:使用 CoreDNS Forward 插件将自建 DNS 设为上游 DNS 可以管理大量的解析记录,记录的管理都在自建 DNS 中,增删记录无需修改 CoreDNS 配置。
说明:

方案1和方案2,每次添加解析记录都需要修改 CoreDNS 配置文件(无需重启)。请根据自身需求评估并选择具体方案。

方案示例

方案1:使用 CoreDNS Hosts 插件配置任意域名解析

  1. 执行以下命令,修改 CoreDNS 的 configmap。示例如下:

    kubectl edit configmap coredns -n kube-system
  2. 修改 hosts 配置,将域名加入 hosts,示例如下:

    hosts {
        192.168.1.6     harbor.oa.com
        192.168.1.8     es.oa.com
        fallthrough
    }
    说明:

    harbor.oa.com 指向192.168.1.6;es.oa.com 指向192.168.1.8。

    完整配置示例如下:

    apiVersion: v1
    data:
      Corefile: |2-
        .:53 {
            errors
            health
            kubernetes cluster.local. in-addr.arpa ip6.arpa {
                pods insecure
                upstream
                fallthrough in-addr.arpa ip6.arpa
            }
            hosts {
                192.168.1.6     harbor.oa.com
                192.168.1.8     es.oa.com
                fallthrough
            }
            prometheus :9153
            forward . /etc/resolv.conf
            cache 30
            reload
            loadbalance
        }
    kind: ConfigMap
    metadata:
      labels:
        addonmanager.kubernetes.io/mode: EnsureExists
      name: coredns
      namespace: kube-system

方案2:使用 CoreDNS Rewrite 插件指向域名到集群内服务

如果需要使用自定义域名的服务部署在集群中,可以使用 CoreDNS 的 Rewrite 插件,将指定域名解析到某个 Service 的 ClusterIP。

  1. 执行以下命令,修改 CoreDNS 的 configmap。示例如下:

    kubectl edit configmap coredns -n kube-system
  2. 执行以下命令,加入 Rewrite 配置。示例如下:

    rewrite name es.oa.com es.logging.svc.cluster.local
    说明:

    es.oa.com 指向部署在 logging 命名空间下的 es 服务,如有多个域名可添加多行。

    完整配置示例如下:

    apiVersion: v1
    data:
      Corefile: |2-
        .:53 {
            errors
            health
            kubernetes cluster.local. in-addr.arpa ip6.arpa {
                pods insecure
                upstream
                fallthrough in-addr.arpa ip6.arpa
            }
            rewrite name es.oa.com es.logging.svc.cluster.local
            prometheus :9153
            forward . /etc/resolv.conf
            cache 30
            reload
            loadbalance
        }
    kind: ConfigMap
    metadata:
      labels:
        addonmanager.kubernetes.io/mode: EnsureExists
      name: coredns
      namespace: kube-system

方案3:使用 CoreDNS Forward 插件将自建 DNS 设为上游 DNS

  1. 查看 forward 配置。forward 默认配置如下所示,指非集群内域名通过 CoreDNS 所在节点 /etc/resolv.conf 文件中配置的 nameserver 解析。

    forward . /etc/resolv.conf
  2. 配置 forward,将 /etc/resolv.conf 显式替换为自建的 DNS 服务器地址。示例如下:

    forward . 10.10.10.10

    完整配置示例如下:

    apiVersion: v1
    data:
      Corefile: |2-
        .:53 {
            errors
            health
            kubernetes cluster.local. in-addr.arpa ip6.arpa {
                pods insecure
                upstream
                fallthrough in-addr.arpa ip6.arpa
            }
            prometheus :9153
            forward . 10.10.10.10
            cache 30
            reload
            loadbalance
        }
    kind: ConfigMap
    metadata:
      labels:
        addonmanager.kubernetes.io/mode: EnsureExists
      name: coredns
      namespace: kube-system
  3. 将自定义域名的解析记录配置到自建 DNS。建议将节点上 /etc/resolv.conf 中的 nameserver 添加到自建 DNS 的上游,因为部分服务依赖腾讯云内部 DNS 解析,如果未将其设为自建 DNS 的上游,可能导致部分服务无法正常工作。本文以 BIND 9 为例修改配置文件,将上游 DNS 地址写入 forwarders 中。示例如下:

    options {
        forwarders {
                183.60.83.19;
                183.60.82.98;
        };
        ...

参考文档

  • CoreDNS Hosts 插件文档
  • CoreDNS Rewrite 插件文档
  • CoreDNS Forward 插件文档

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
腾讯云代理商
精彩导读
海外云服务器
热门资讯
腾讯云代理商