在Kubernetes的DNS服务器中插入自定义解析记录

背景:通过docker运行jenkins,并通过nginx配置使用域名来访问jenkins,参考https://www.jianshu.com/p/55f03ace154f,同时有一个K8S集群,那么如何让集群内部也能访问该自定义域名呢?
我们需要在集群内部的DNS服务器上添加自定义的域名解析记录。

环境:
K8S集群:v1.20.4
docker启动的jenkins:配置可以通过myjenkins.devops.com访问。
在配置前,集群内部无法访问myjenkins.devops.com。

[root@localhost ~]# kubectl run busybox --image=busybox:1.34 --command -- ping myjenkins.devops.com
pod/busybox created
[root@localhost ~]# kubectl logs -f busybox
ping: bad address 'myjenkins.devops.com'

接下来,在K8S集群进行配置,
1、在kube-system命名空间下,找到coredns的configmap

[root@localhost ~]# kubectl get cm -n kube-system
NAME                                 DATA   AGE
calico-config                        4      99d
coredns                              1      99d
extension-apiserver-authentication   6      99d
kube-proxy                           2      99d
kube-root-ca.crt                     1      99d
kubeadm-config                       2      99d
kubelet-config-1.20                  1      99d
nodelocaldns                         1      99d

2、编辑该configmap kubectl edit configmap coredns -n kube-system,添加自定义的域名解析记录,增加

hosts {
          192.168.255.134 myjenkins.devops.com
        }

编辑后的configmap内容:

apiVersion: v1
data:
  Corefile: |
    .:53 {
        errors
        health {
           lameduck 5s
        }
        ready
        kubernetes cluster.local in-addr.arpa ip6.arpa {
           pods insecure
           fallthrough in-addr.arpa ip6.arpa
           ttl 30
        }
        hosts {
          192.168.255.134 myjenkins.devops.com
        }
        prometheus :9153
        forward . /etc/resolv.conf {
           max_concurrent 1000
        }
        cache 30
        loop
        reload
        loadbalance
    }
kind: ConfigMap
metadata:
  creationTimestamp: "2021-09-09T13:03:23Z"
  name: coredns
  namespace: kube-system
  resourceVersion: "244946"
  uid: 48376b54-2cb7-4496-83b2-46d0a3abe462

3、重启coreDNS,使其生效

[root@localhost ~]# kubectl get deployment -n kube-system
NAME                          READY   UP-TO-DATE   AVAILABLE   AGE
calico-kube-controllers       1/1     1            1           99d
coredns                       2/2     2            2           99d
openebs-localpv-provisioner   1/1     1            1           99d
[root@localhost ~]#
[root@localhost ~]# kubectl scale deployment coredns -n kube-system --replicas=0
deployment.apps/coredns scaled
[root@localhost ~]#
[root@localhost ~]# kubectl get deployment -n kube-system
NAME                          READY   UP-TO-DATE   AVAILABLE   AGE
calico-kube-controllers       1/1     1            1           99d
coredns                       0/0     0            0           99d
openebs-localpv-provisioner   1/1     1            1           99d
[root@localhost ~]#
[root@localhost ~]# kubectl scale deployment coredns -n kube-system --replicas=2
deployment.apps/coredns scaled
[root@localhost ~]#
[root@localhost ~]# kubectl get deployment -n kube-system
NAME                          READY   UP-TO-DATE   AVAILABLE   AGE
calico-kube-controllers       1/1     1            1           99d
coredns                       2/2     2            2           99d
openebs-localpv-provisioner   1/1     1            1           99d

4、进行测试

[root@localhost ~]#cat<<EOF | kubectl apply -f -
apiVersion: v1
kind: Pod
metadata:
  name: busybox
  namespace: default
spec:
  containers:
  - name: busybox
    image: busybox:1.34
    command:
      - sleep
      - "36000"
    imagePullPolicy: IfNotPresent
  restartPolicy: Always
EOF
[root@localhost ~]# kubectl exec -ti busybox -- sh
/ # ping myjenkins.devops.com
ping: bad address 'myjenkins.devops.com'

原因:K8S集群使用kubesphere/kubekey工具部署,默认部署了nodelocaldnsNodeLocal DNSCache 通过在集群节点上作为 DaemonSet 运行 dns 缓存代理来提高集群 DNS 性能。集群中 kube-proxy 运行在 IPVS 模式,在此模式下,node-local-dns Pods 只会侦听<node-local-address> 的地址,不会侦听 coreDNS服务的 IP 地址。

[root@localhost ~]# kubectl get configmaps kube-proxy -n kube-system -o yaml | awk '/mode/{print $2}'
ipvs

解决:需要将node-local-dns Pods__PILLAR__UPSTREAM__SERVERS__设置为coreDNS服务的 IP 地址。

[root@localhost ~]# kubectl get svc -n kube-system | grep coredns
coredns                       ClusterIP   10.233.0.3   <none>        53/UDP,53/TCP,9153/TCP         99d
[root@localhost ~]# kubectl edit cm nodelocaldns -n kube-system
apiVersion: v1
data:
  Corefile: |
    cluster.local:53 {
        errors
        cache {
            success 9984 30
            denial 9984 5
        }
        reload
        loop
        bind 169.254.25.10
        forward . 10.233.0.3 {
            force_tcp
        }
        prometheus :9253
        health 169.254.25.10:9254
    }
    in-addr.arpa:53 {
        errors
        cache 30
        reload
        loop
        bind 169.254.25.10
        forward . 10.233.0.3 {
            force_tcp
        }
        prometheus :9253
    }
    .:53 {
        errors
        cache 30
        reload
        loop
        bind 169.254.25.10
        forward . 10.233.0.3 {
            force_tcp
        }
        prometheus :9253
    }
kind: ConfigMap
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"v1","data":{"Corefile":"cluster.local:53 {\n    errors\n    cache {\n        success 9984 30\n        denial 9984 5\n    }\n    reload\n    loop\n    bind 169.254.25.10\n    forward . 10.233.0.3 {\n        force_tcp\n    }\n    prometheus :9253\n    health 169.254.25.10:9254\n}\nin-addr.arpa:53 {\n    errors\n    cache 30\n    reload\n    loop\n    bind 169.254.25.10\n    forward . 10.233.0.3 {\n        force_tcp\n    }\n    prometheus :9253\n}\nip6.arpa:53 {\n    errors\n    cache 30\n    reload\n    loop\n    bind 169.254.25.10\n    forward . 10.233.0.3 {\n        force_tcp\n    }\n    prometheus :9253\n}\n.:53 {\n    errors\n    cache 30\n    reload\n    loop\n    bind 169.254.25.10\n    forward . /etc/resolv.conf\n    prometheus :9253\n}\n"},"kind":"ConfigMap","metadata":{"annotations":{},"labels":{"addonmanager.kubernetes.io/mode":"EnsureExists"},"name":"nodelocaldns","namespace":"kube-system"}}
  creationTimestamp: "2021-09-09T13:03:46Z"
  labels:
      addonmanager.kubernetes.io/mode: EnsureExists
  name: nodelocaldns
  namespace: kube-system
  resourceVersion: "256820"
  uid: cc9b4ffc-fd04-4219-90f9-2ef1f29511f1

修改完成后,再次进行测试

[root@localhost ~]# kubectl exec -ti busybox -- /bin/sh
/ # ping myjenkins.devops.com
PING myjenkins.devops.com (192.168.255.134): 56 data bytes
64 bytes from 192.168.255.134: seq=0 ttl=64 time=0.030 ms
64 bytes from 192.168.255.134: seq=1 ttl=64 time=0.081 ms
64 bytes from 192.168.255.134: seq=2 ttl=64 time=0.099 ms
64 bytes from 192.168.255.134: seq=3 ttl=64 time=0.063 ms
64 bytes from 192.168.255.134: seq=4 ttl=64 time=0.073 ms
64 bytes from 192.168.255.134: seq=5 ttl=64 time=0.041 ms
64 bytes from 192.168.255.134: seq=6 ttl=64 time=0.063 ms
64 bytes from 192.168.255.134: seq=7 ttl=64 time=0.095 ms
64 bytes from 192.168.255.134: seq=8 ttl=64 time=0.061 ms
^C
--- myjenkins.devops.com ping statistics ---
9 packets transmitted, 9 packets received, 0% packet loss
round-trip min/avg/max = 0.030/0.067/0.099 ms

参考链接:
https://kubernetes.io/zh/docs/tasks/administer-cluster/nodelocaldns/
https://github.com/kubesphere/kubekey/blob/master/README_zh-CN.md
https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/dns/nodelocaldns
https://github.com/coredns/coredns/issues/3298
https://www.cnblogs.com/dudu/p/12180982.html
https://blog.csdn.net/zhouzixin053/article/details/105416203

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容