腾讯云TKE-DNS案例: 自定义域名解析

2020-12-11 17:00:51 浏览数 (1)

背景

在业务应用开发中, 经常会有自定义域名的需求, 比如: 使用自建的dns在解析内部域名, 或者添加hosts。如何在TKE中实现这个场景呢?

方案1: 修改容器hosts

对于自定义域名数量少的场景下,可以使k8s的hostAliases 字段来解决这个问题,对整个系统影响面积比较小。

配置示例:

比如我们需要添加一下域名解析:

  • 127.0.0.1 foo.local bar.local
  • 10.1.2.3 foo.remote bar.remote
代码语言:txt复制
apiVersion: apps/v1
kind: Deployment
metadata:
  name: hosts-append
  labels: 
    app: hosts-append
spec:
  replicas: 1
  selector:
    matchLabels:
      app: hosts-append
  template:
    metadata:
      labels:
        app: hosts-append
    spec:
      hostAliases:
      - ip: "127.0.0.1"
        hostnames:
        - "foo.local"
        - "bar.local"
      - ip: "10.1.2.3"
        hostnames:
        - "foo.remote"
        - "bar.remote"
      containers:
      - image: nginx:alpine
        name: hosts-append
        ports:
        - containerPort: 80
          protocol: TCP

部署完成后, 登陆到容器内进行验证:

  • 查看/etc/hosts文件是否存在
代码语言:txt复制
$ kubectl exec hosts-append-5576848dcf-jnt4s -- cat /etc/hosts

# Kubernetes-managed hosts file.
127.0.0.1	localhost
::1	localhost ip6-localhost ip6-loopback
fe00::0	ip6-localnet
fe00::0	ip6-mcastprefix
fe00::1	ip6-allnodes
fe00::2	ip6-allrouters
10.4.0.224	hostbiza-5576848dcf-jnt4s

# Entries added by HostAliases.
127.0.0.1	foo.local	bar.local
10.1.2.3	foo.remote	bar.remote

这种方式有个缺点就是针对worload去配置,如果worload比较多的话就比较繁琐了,可以使用下面的方式来解决。

方案2: coredns 中添加私有域解析和hosts解析

在k8s中域名解析组件是coredns, 其配置使用的是configmap,可以比较方便的添加自定义域名, coredns的configmap 在kube-system 的命名空间下,修改方式如下:

代码语言:txt复制
kubectl edit cm -n kube-system coredns

Corefile 配置示例:

代码语言:txt复制
    .:53 {
        errors
        health
        kubernetes cluster.local. in-addr.arpa ip6.arpa {
            pods insecure
            upstream
            fallthrough in-addr.arpa ip6.arpa
        }
        hosts {
          127.0.0.1	foo.local
          8.8.8.8	foo.remote
          fallthrough
        }
        test.local:53 {
        errors
        cache 30
        forward . 10.150.0.1
        }
        prometheus :9153
        proxy . /etc/resolv.conf
        cache 30
        reload
        loadbalance
    }

修改完成后, 需要等待几秒,配置同步完成后即可生效,此时可以进入到容器进行域名验证。

在一般的控制台,这个节点无法修改。但借助命令行 kubectl 或者其他可视化工具(如 Lens),可以修改这个配置节点。

至于开发环境下的域名解析,自己改本机 hosts 就好啦。

当然,更好的做法是把配置文件与应用解耦,所有的配置,包括远程服务的域名或 ip 都可以被远程修改

0 人点赞