基于DNS的服務發現
更新時間 2025-03-31 19:08:02
最近更新時間: 2025-03-31 19:08:02
分享文章
本文為您介紹基于DNS的服務發現。
本文主要介紹Kubernetes集群中DNS域名解析原理和在Serverless集群中安裝DNS服務器CoreDNS。
背景信息
DNS為Kubernetes集群內的工作負載提供域名解析服務。CoreDNS是Kubernetes集群中負責DNS解析的組件,能夠支持解析集群內部自定義服務域名和集群外部域名。CoreDNS具備豐富的插件集,在集群層面支持自建DNS、自定義hosts、CNAME、rewrite等需求。與Kubernetes一樣,CoreDNS項目由 CNCF托管,關于CoreDNS的更多信息,可瀏覽CoreDNS的官網。Serverless集群使用CoreDNS負責集群的服務發現,您可以根據不同使用場景配置CoreDNS及使用CoreDNS提升集群DNS QPS性能。
前提條件
- 確保您已經創建Serverless集群,具體操作請參閱創建Serverless集群。
- 確保kubectl工具已經連接目標集群。
操作步驟
步驟一:安裝CoreDNS插件
- 登錄容器服務控制臺,在左側菜單欄選擇“集群”。
- 在集群列表頁面,選擇目標集群名稱,然后在左側菜單欄選擇“插件”下的“插件市場”,安裝CoreDNS插件。
- 提交“安裝插件”,稍后會在集群中創建2個coredns pod,集群會根據Pod內的配置,將域名請求發往集群DNS服務器獲取結果。
- 查看coredns是否正常運行。
步驟二:創建Nginx工作負載,以及service
- 創建無狀態工作負載,參考如下:
apiVersion: "apps/v1"
kind: "Deployment"
metadata:
name: "nginx-deploy"
namespace: "default"
spec:
replicas: 2
selector:
? matchLabels:
? ? name: "nginx-deploy"
template:
? metadata:
? ? labels:
? ? ? name: "nginx-deploy"
source:"CCSE"
? spec:
? ? containers:
? ? - image: "registry-vpc-crs-huadong1.daliqc.cn/open-source/nginx:1.25-alpine-amd64"
? ? ? imagePullPolicy: "IfNotPresent"
? ? ? name: "nginx"
- 查看nginx pod是否正常運行,從eci控制臺進入pod容器內部。
kubectl get po -ndefault |grep nginx
查看Pod內的DNS域名解析配置文件為/etc/resolv.conf,文件內容如下:
nameserver 10.96.0.10
search kube-system.svc.cluster.local svc.cluster.local cluster.local
options ndots:5
- 創建service,參考如下:
apiVersion: v1
kind: Service
metadata:
name: nginx-deploy
namespace: default
spec:
ports:
- name: tcp80
? port: 30002
? protocol: TCP
? targetPort: 80
selector:
? name: nginx-deploy
type: ClusterIP
步驟三:訪問Nginx服務
- 當業務Pod(Pod Client)試圖訪問Nginx服務(Service Nginx)時,先會請求本地DNS配置文件(/etc/resolv.conf)中指向的DNS服務器(nameserver 10.96.0.10,即Service kube-dns)獲取服務IP地址,得到解析結果為10.96.84.23的IP地址。
- 業務Pod(Pod Client)再直接發起往該IP地址的請求,請求最終經過Nginx服務(Service Nginx)轉發到達后端的Nginx容器(Pod Nginx-1和Pod Nginx-2)上。