最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

K8s集群中的DNS服務(wù)CoreDNS實(shí)戰(zhàn)案例詳解

 更新時間:2025年06月01日 08:11:38   作者:huangSir-devops  
在 Kubernetes(K8s)中,DNS 服務(wù)是實(shí)現(xiàn)服務(wù)發(fā)現(xiàn)和 Pod 通信的核心組件之一,用于解決集群內(nèi)資源通過域名而非 IP 地址進(jìn)行訪問的需求,本文將詳細(xì)解析 K8s DNS 服務(wù)的原理、組件、配置及應(yīng)用場景,感興趣的朋友一起看看吧

概述

官網(wǎng)文檔:https://kubernetes.io/zh-cn/docs/concepts/services-networking/dns-pod-service/

在 Kubernetes(K8s)中,DNS 服務(wù)是實(shí)現(xiàn)服務(wù)發(fā)現(xiàn)和 Pod 通信的核心組件之一,用于解決集群內(nèi)資源通過域名而非 IP 地址進(jìn)行訪問的需求。本文將詳細(xì)解析 K8s DNS 服務(wù)的原理、組件、配置及應(yīng)用場景。

K8s DNS的作用

服務(wù)發(fā)現(xiàn)

  • 允許 Pod 通過服務(wù)名稱(Service Name)而非動態(tài)變化的 IP 地址訪問其他服務(wù),簡化網(wǎng)絡(luò)配置。
  • 支持跨命名空間(Namespace)的服務(wù)訪問,通過域名后綴區(qū)分不同作用域。

Pod 通信

  • 每個 Pod 自動獲取 DNS 配置,可直接通過主機(jī)名(Hostname)或服務(wù)名進(jìn)行通信。

解耦服務(wù)依賴

  • 服務(wù)的 IP 地址變更時,DNS 會自動更新解析結(jié)果,避免手動維護(hù) IP 列表。

核心組件:CoreDNS(替代傳統(tǒng) kube-dns)

K8s 早期使用kube-dns作為 DNS 服務(wù)器,目前默認(rèn)采用CoreDNS,因其更輕量、靈活且支持插件機(jī)制。

CoreDNS的安裝

如果使用kubeadm部署集群,CoreDNS 會自動部署在kube-system命名空間下,如果需要進(jìn)行部署,可以使用下面的文件:

kubectl apply -f https://github.com/kubernetes/kubernetes/blob/master/cluster/addons/dns/coredns/coredns.yaml.base

部署CoreDNS通常包含

  • StatefulSet/Deployment:定義 CoreDNS Pod 副本。
apiVersion: apps/v1
kind: Deployment
metadata:
  name: coredns
  namespace: kube-system
spec:
  replicas: 2  # 默認(rèn)2個副本,確保高可用
  selector:
    matchLabels:
      k8s-app: kube-dns  # 歷史遺留標(biāo)簽,兼容舊版kube-dns
  template:
    metadata:
      labels:
        k8s-app: kube-dns
    spec:
      containers:
      - name: coredns
        image: coredns/coredns:v1.10.1  # CoreDNS版本
        args: [ "-conf", "/etc/coredns/Corefile" ]
        ports:
        - containerPort: 53
          name: dns
          protocol: UDP
        - containerPort: 53
          name: dns-tcp
          protocol: TCP
        volumeMounts:
        - name: config-volume
          mountPath: /etc/coredns
      volumes:
      - name: config-volume
        configMap:
          name: coredns
          items:
          - key: Corefile
            path: Corefile
  • Service:暴露 CoreDNS 服務(wù),供集群內(nèi) Pod 訪問(默認(rèn) IP 為10.96.0.10)。
apiVersion: v1
kind: Service
metadata:
  name: kube-dns
  namespace: kube-system
spec:
  selector:
    k8s-app: kube-dns
  clusterIP: 10.96.0.10  # 默認(rèn)集群IP,Pod的nameserver配置指向此IP
  ports:
  - name: dns
    port: 53
    protocol: UDP
  - name: dns-tcp
    port: 53
    protocol: TCP
  • ConfigMap:存儲 Corefile 配置。
.:53 {                              #表示監(jiān)聽所有接口的 53 端口(DNS 標(biāo)準(zhǔn)端口)。
    errors                          # 記錄錯誤日志
    health {
        lameduck 5s                 # 健康檢查,延遲5秒標(biāo)記不健康
    }
    ready                           # 提供 readiness 探針端點(diǎn)(/ready),指示 CoreDNS 是否準(zhǔn)備好處理請求
    kubernetes cluster.local in-addr.arpa ip6.arpa {
        fallthrough in-addr.arpa ip6.arpa  # 未匹配到K8s服務(wù)時,透傳給下一個插件
        ttl 30                        # DNS記錄的TTL時間
    }
    prometheus :9153                # 暴露Prometheus監(jiān)控指標(biāo)
    forward . /etc/resolv.conf      # 轉(zhuǎn)發(fā)外部域名查詢到宿主機(jī)的DNS服務(wù)器
    cache 30                        # 緩存查詢結(jié)果30秒
    loop                            # 檢測配置循環(huán)引用
    reload                          # 自動重新加載配置變更
    loadbalance                     # 對A/AAAA記錄進(jìn)行負(fù)載均衡
}

CoreDNS的組成

  • CoreDNS Pod:運(yùn)行 CoreDNS 服務(wù),監(jiān)聽 DNS 請求(默認(rèn)端口 53)。
[root@master ~]# kubectl get po -o wide -n kube-system
NAME                             READY   STATUS    RESTARTS        AGE   IP                NODE     NOMINATED NODE   READINESS GATES
coredns-787d4945fb-jb4t9         1/1     Running   1 (2d23h ago)   9d    100.117.144.135   node01   <none>           <none>
coredns-787d4945fb-z47x7         1/1     Running   1 (2d23h ago)   9d    100.117.144.138   node01   <none>           <none>
  • Service 資源:為 CoreDNS Pod 暴露集群內(nèi)部服務(wù),名稱為kube-dns(或coredns,取決于部署方式),IP 通常為10.96.0.10(集群 IP 范圍)。
[root@master ~]# kubectl get svc -n kube-system
NAME       TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)                  AGE
kube-dns   ClusterIP   10.96.0.10   <none>        53/UDP,53/TCP,9153/TCP   9d
[root@master ~]# kubectl describe svc kube-dns -n kube-system
Name:              kube-dns
Namespace:         kube-system
Labels:            k8s-app=kube-dns
                   kubernetes.io/cluster-service=true
                   kubernetes.io/name=CoreDNS
Annotations:       prometheus.io/port: 9153
                   prometheus.io/scrape: true
Selector:          k8s-app=kube-dns
Type:              ClusterIP
IP Family Policy:  SingleStack
IP Families:       IPv4
IP:                10.96.0.10
IPs:               10.96.0.10
Port:              dns  53/UDP
TargetPort:        53/UDP
Endpoints:         100.117.144.135:53,100.117.144.138:53
Port:              dns-tcp  53/TCP
TargetPort:        53/TCP
Endpoints:         100.117.144.135:53,100.117.144.138:53
Port:              metrics  9153/TCP
TargetPort:        9153/TCP
Endpoints:         100.117.144.135:9153,100.117.144.138:9153
Session Affinity:  None
Events:            <none>
  • ConfigMap 配置:通過 ConfigMap 定義 CoreDNS 的解析規(guī)則和插件。
[root@master ~]# kubectl describe cm coredns -n kube-system
Name:         coredns
Namespace:    kube-system
Labels:       <none>
Annotations:  <none>
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
    }
    prometheus :9153
    forward . /etc/resolv.conf {
       max_concurrent 1000
    }
    cache 30
    loop
    reload
    loadbalance
}
BinaryData
====
Events:  <none>

CoreDNS域名解析規(guī)則

K8s集群中Pod之間通過域名互相訪問需要遵守特定的規(guī)則,規(guī)則如下

<service-name>.<namespace>.svc.<cluster-domain>
  • service-name:表示service的名稱
  • namespace:service所在的命名空間
  • cluster-domain:集群的域名,默認(rèn)為cluster.local

cluster-domain從哪兒獲取?

[root@master ~]# grep clusterDomain /var/lib/kubelet/config.yaml 
clusterDomain: cluster.local

CoreDNS實(shí)戰(zhàn)案例

驗(yàn)證同一個命名空間下的CoreDNS訪問

創(chuàng)建兩個Pod和Service

## 第一個Pod和 Service
[root@master ~/coredns]# cat test-1.yaml
apiVersion: v1
kind: Pod
metadata:
  name: dns-target-pod
  labels:
    app: dns-test
spec:
  containers:
  - name: busybox
    image: busybox
    command: ["sh", "-c", "while true; do sleep 3600; done"]
---
apiVersion: v1
kind: Service
metadata:
  name: dns-target-service
spec:
  type: ClusterIP
  selector:
    app: dns-test
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
[root@master ~/coredns]# kubectl apply -f test-1.yaml
pod/dns-target-pod unchanged
service/dns-target-service created
# 第二個Pod和Service
[root@master ~/coredns]# cat test-2.yaml
apiVersion: v1
kind: Pod
metadata:
  name: dns-source-pod
  labels:
    app: dns-source-test
spec:
  containers:
  - name: busybox
    image: busybox
    command: ["sh", "-c", "while true; do sleep 3600; done"]
---
apiVersion: v1
kind: Service
metadata:
  name: dns-source-service
spec:
  type: ClusterIP
  selector:
    app: dns-source-test
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
[root@master ~/coredns]# kubectl apply -f test-2.yaml
pod/dns-source-pod created
service/dns-source-service created
# 檢查一下
[root@master ~/coredns]# kubectl get po,svc
NAME                 READY   STATUS    RESTARTS   AGE
pod/dns-source-pod   1/1     Running   0          111s
pod/dns-target-pod   1/1     Running   0          8s
NAME                         TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)   AGE
service/dns-source-service   ClusterIP   10.96.0.192   <none>        80/TCP    81s
service/dns-target-service   ClusterIP   10.96.3.51    <none>        80/TCP    3m56s

驗(yàn)證DNS

[root@master ~/coredns]# kubectl exec -it pod/dns-source-pod -- sh
/ # nslookup dns-target-service.default.svc.cluster.local
Server:         10.96.0.10
Address:        10.96.0.10:53
Name:   dns-target-service.default.svc.cluster.local
Address: 10.96.3.51

驗(yàn)證在不同命名空間下的DNS訪問

示例:

# 創(chuàng)建一個新的命名空間
[root@master ~/coredns]# kubectl create ns coredns
namespace/coredns created
[root@master ~/coredns]# kubectl get ns coredns
NAME      STATUS   AGE
coredns   Active   15s

創(chuàng)建Pod和Service進(jìn)行驗(yàn)證

[root@master ~/coredns]# cat test-3.yaml
apiVersion: v1
kind: Pod
metadata:
  name: dns-coredns-pod
  namespace: coredns
  labels:
    app: dns-coredns-test
spec:
  containers:
  - name: busybox
    image: busybox
    command: ["sh", "-c", "while true; do sleep 3600; done"]
---
apiVersion: v1
kind: Service
metadata:
  name: dns-coredns-service
  namespace: coredns
spec:
  type: ClusterIP
  selector:
    app: dns-coredns-test
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
[root@master ~/coredns]# kubectl apply -f test3.yaml
pod/dns-coredns-pod created
service/dns-coredns-service created
[root@master ~]# kubectl get all -n coredns
NAME                  READY   STATUS    RESTARTS   AGE
pod/dns-coredns-pod   1/1     Running   0          4m36s
NAME                          TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)   AGE
service/dns-coredns-service   ClusterIP   10.96.0.119   <none>        80/TCP    4m36s

進(jìn)行驗(yàn)證

[root@master ~/coredns]# kubectl exec -it dns-target-pod -- sh
/ # nslookup dns-coredns-service.coredns.svc.cluster.local
Server:         10.96.0.10
Address:        10.96.0.10:53
Name:   dns-coredns-service.coredns.svc.cluster.local
Address: 10.96.0.119

到此這篇關(guān)于K8s集群中的DNS服務(wù)(CoreDNS)詳解的文章就介紹到這了,更多相關(guān)K8s DNS服務(wù)CoreDNS內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 玩客云內(nèi)置EMMC存儲刷入Armbian系統(tǒng)(圖文詳解)

    玩客云內(nèi)置EMMC存儲刷入Armbian系統(tǒng)(圖文詳解)

    Armbian是其他項(xiàng)目可以信賴的單板計算機(jī)(SBC)的基本操作系統(tǒng)平臺,接下來通過本文給大家介紹玩客云內(nèi)置EMMC存儲刷入Armbian系統(tǒng),需要的朋友可以參考下
    2022-05-05
  • k8s?pod始終處于pending狀態(tài)的解決方案

    k8s?pod始終處于pending狀態(tài)的解決方案

    新K8s部署后服務(wù)重啟導(dǎo)致dashboard無法訪問,所有Pod處于Pending狀態(tài),原因分析顯示,因節(jié)點(diǎn)污點(diǎn)引發(fā)調(diào)度失敗,刪除污點(diǎn)后問題解決,總結(jié)Pending原因分為三類:調(diào)度問題(污點(diǎn)、資源不足)、鏡像問題(拉取失?。?、依賴性問題(卷/Secret/ConfigMap缺失)
    2025-08-08
  • k8s中topologyKey的作用及說明

    k8s中topologyKey的作用及說明

    topologyKey定義拓?fù)溆?用于Pod親和/反親和性規(guī)則,調(diào)度器根據(jù)其分組節(jié)點(diǎn),當(dāng)前配置僅強(qiáng)制節(jié)點(diǎn)標(biāo)簽匹配,未限制副本數(shù)量,建議補(bǔ)充podAntiAffinity實(shí)現(xiàn)隔離
    2025-08-08
  • 青龍面板拉庫解決沒有或丟失依賴can‘t?find?module的保姆級教程(附青龍面板腳本倉庫)

    青龍面板拉庫解決沒有或丟失依賴can‘t?find?module的保姆級教程(附青龍面板腳本倉庫)

    這篇文章主要介紹了青龍面板拉庫解決沒有或丟失依賴can‘t?find?module的保姆級教程(附青龍面板腳本倉庫),需要的朋友可以參考下
    2022-05-05
  • k8s自動化安裝腳本(二進(jìn)制)的操作步驟

    k8s自動化安裝腳本(二進(jìn)制)的操作步驟

    Kubernetes?k8s安裝腳本,非常好用,下面這篇文章主要給大家介紹了關(guān)于k8s自動化安裝腳本(二進(jìn)制)的操作步驟,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2022-09-09
  • 云原生技術(shù)kubernetes調(diào)度單位pod的使用詳解

    云原生技術(shù)kubernetes調(diào)度單位pod的使用詳解

    這篇文章主要介紹了云原生技術(shù)kubernetes調(diào)度單位pod的使用詳解,幫助大家更好的理解和學(xué)習(xí)使用K8S,感興趣的朋友可以了解下
    2021-03-03
  • Kubernetes安裝Jenkins的思路詳解

    Kubernetes安裝Jenkins的思路詳解

    這篇文章主要介紹了Kubernetes安裝Jenkins,Jenkins插件可以在Kubernetes集群中運(yùn)行動態(tài)jenkins-slave代理,基于Kubernetes的docker,自動化在Kubernetes中運(yùn)行的Jenkins-slave代理的縮放,需要的朋友可以參考下
    2022-06-06
  • k8s強(qiáng)制刪除一個Pod的詳細(xì)步驟

    k8s強(qiáng)制刪除一個Pod的詳細(xì)步驟

    有時候遇到node宕機(jī)或者失聯(lián)太久導(dǎo)致pod一直處于Terminating狀態(tài),kubectl?delete又刪不掉,其實(shí)這個pod已經(jīng)確定已經(jīng)死了,需要強(qiáng)制把他摘掉,這篇文章主要給大家介紹了關(guān)于k8s強(qiáng)制刪除一個Pod的詳細(xì)步驟,需要的朋友可以參考下
    2024-11-11
  • Podman開機(jī)自啟容器實(shí)現(xiàn)過程及與Docker對比

    Podman開機(jī)自啟容器實(shí)現(xiàn)過程及與Docker對比

    這篇文章主要為大家介紹了Podman開機(jī)自啟容器實(shí)現(xiàn)過程,通過示例代碼的形式進(jìn)行演繹過程,有需要的朋友可以參考下,希望可以有所幫助
    2021-09-09
  • k8s編排之StatefulSet知識點(diǎn)詳解二

    k8s編排之StatefulSet知識點(diǎn)詳解二

    這篇文章主要為大家介紹了k8s編排之StatefulSet知識點(diǎn)的部分詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01

最新評論

大埔县| 富民县| 北宁市| 襄城县| 隆回县| 新昌县| 东阿县| 浠水县| 米林县| 商洛市| 云南省| 竹山县| 贵阳市| 遵义县| 罗甸县| 个旧市| 体育| 怀远县| 霍邱县| 建瓯市| 石家庄市| 翼城县| 论坛| 芜湖市| 蒙自县| 灵璧县| 旬阳县| 英吉沙县| 奇台县| 文登市| 壤塘县| 宁海县| 博罗县| 綦江县| 芦山县| 宁城县| 沛县| 塘沽区| 德庆县| 涟水县| 建阳市|