基于Service實現集群內訪問負載均衡
更新時間 2025-03-31 19:08:05
最近更新時間: 2025-03-31 19:08:05
分享文章
本文為您介紹如何基于Service實現集群內訪問負載均衡。
背景信息
Kubernetes Service是一組具有相同標簽的 Pod 集合的抽象,可以簡單地理解為集群內的負載均衡器,集群內外的各個服務可以通過 Service 進行互相通信。不同類型的 Service 適合不同的場景,本文將重點討論每種類型的 Service 的適用場景以及 kube-proxy 如何實現 Service 的負載均衡。
前提條件
- 確保您已經創建Serverless集群,具體操作請參閱創建Serverless集群。
- 確保kubectl工具已經連接目標集群。
- 假設您在一個K8S的集群里面發布了兩個應用,前端應用frontend和后端應用backend,前端應用要訪問后端應用。
- 確保您的Serverless集群已安裝CoreDNS插件。
實現原理
Service和iptables模式的kube-proxy在kubernetes集群中的工作原理如下:

操作步驟
步驟一:創建后端應用和前端應用
這里使用nginx代表后端應用,部署2個副本;busybox代表前端應用,可以從busybox中訪問nginx的80端口。
- 登錄容器服務控制臺,在左側菜單欄選擇“集群”。
- 在集群列表頁面,選擇目標集群名稱,然后在左側菜單欄選擇“工作負載”下的“無狀態”,點擊“創建deployment”。
也可以使用yaml創建工作負載,創建nginx工作負載參考如下:
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"
創建busybox工作負載參考如下:
apiVersion: "apps/v1"
kind: "Deployment"
metadata:
? name: "lin-test-3-deploy"
? namespace: "default"
spec:
? replicas: 1
? selector:
? ? matchLabels:
? ? ? name: "busybox"
? template:
? ? metadata:
? ? ? labels:
? ? ? ? name: "busybox"
? ? spec:
? ? ? containers:
? ? ? - image: "registry-huadong1.crs-internal.daliqc.cn/open-source/busybox:1.36"
? ? ? ? imagePullPolicy: "IfNotPresent"
? ? ? ? name: "busybox"
? ? ? ? command:
? ? ? ? ? - "tail"
? ? ? ? ? - "-f"
? ? ? ? ? - "/dev/null"
步驟二:為后端nginx工作負載創建service服務
創建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
步驟三:集群內使用應用名進行訪問后端實現負載均衡
進入前端busybox容器內部,使用service 域名訪問后端應用,一共請求5次。
wget -qO - nginx-deploy:30002
可以看到后端請求分別請求到了2個后端服務中,實現了負載均衡。