新聞中心
創(chuàng)建外部負(fù)載均衡器
本文展示如何創(chuàng)建一個(gè)外部負(fù)載均衡器。

創(chuàng)新互聯(lián)建站長(zhǎng)期為千余家客戶(hù)提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開(kāi)放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為汕頭企業(yè)提供專(zhuān)業(yè)的網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì),汕頭網(wǎng)站改版等技術(shù)服務(wù)。擁有10余年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開(kāi)發(fā)。
創(chuàng)建 服務(wù) 時(shí),你可以選擇自動(dòng)創(chuàng)建云網(wǎng)絡(luò)負(fù)載均衡器。 負(fù)載均衡器提供外部可訪問(wèn)的 IP 地址,可將流量發(fā)送到集群節(jié)點(diǎn)上的正確端口上 ( 假設(shè)集群在支持的環(huán)境中運(yùn)行,并配置了正確的云負(fù)載均衡器驅(qū)動(dòng)包)。
你還可以使用 Ingress 代替 Service。
在開(kāi)始之前
你必須擁有一個(gè) Kubernetes 的集群,同時(shí)你的 Kubernetes 集群必須帶有 kubectl 命令行工具。 建議在至少有兩個(gè)節(jié)點(diǎn)的集群上運(yùn)行本教程,且這些節(jié)點(diǎn)不作為控制平面主機(jī)。 如果你還沒(méi)有集群,你可以通過(guò) Minikube 構(gòu)建一個(gè)你自己的集群,或者你可以使用下面任意一個(gè) Kubernetes 工具構(gòu)建:
- Katacoda
- 玩轉(zhuǎn) Kubernetes
你的集群必須在已經(jīng)支持配置外部負(fù)載均衡器的云或其他環(huán)境中運(yùn)行。
創(chuàng)建服務(wù)
基于清單文件創(chuàng)建服務(wù)
要?jiǎng)?chuàng)建外部負(fù)載均衡器,請(qǐng)將以下內(nèi)容添加到你的 Service 清單文件:
type: LoadBalancer你的清單文件可能會(huì)如下所示:
apiVersion: v1
kind: Service
metadata:
name: example-service
spec:
selector:
app: example
ports:
- port: 8765
targetPort: 9376
type: LoadBalancer使用 kubectl 創(chuàng)建 Service
你也可以使用 ?kubectl expose? 命令及其 ?--type=LoadBalancer? 參數(shù)創(chuàng)建服務(wù):
kubectl expose deployment example --port=8765 --target-port=9376 \
--name=example-service --type=LoadBalancer此命令通過(guò)使用與引用資源(在上面的示例的情況下,名為 ?example ?的 Deployment) 相同的選擇器來(lái)創(chuàng)建一個(gè)新的服務(wù)。
更多信息(包括更多的可選參數(shù)),請(qǐng)參閱 kubectl expose 指南。
找到你的 IP 地址
你可以通過(guò) ?kubectl ?獲取服務(wù)信息,找到為你的服務(wù)創(chuàng)建的 IP 地址:
kubectl describe services example-service
這將獲得類(lèi)似如下輸出:
Name: example-service
Namespace: default
Labels: app=example
Annotations:
Selector: app=example
Type: LoadBalancer
IP Families:
IP: 10.3.22.96
IPs: 10.3.22.96
LoadBalancer Ingress: 192.0.2.89
Port: 8765/TCP
TargetPort: 9376/TCP
NodePort: 30593/TCP
Endpoints: 172.17.0.3:9376
Session Affinity: None
External Traffic Policy: Cluster
Events: 負(fù)載均衡器的 IP 地址列在 ?LoadBalancer Ingress? 旁邊。
說(shuō)明:
如果你在 Minikube 上運(yùn)行服務(wù),你可以通過(guò)以下命令找到分配的 IP 地址和端口:minikube service example-service --url
保留客戶(hù)端源 IP
默認(rèn)情況下,目標(biāo)容器中看到的源 IP 將不是客戶(hù)端的原始源 IP。 要啟用保留客戶(hù)端 IP,可以在服務(wù)的 ?.spec? 中配置以下字段:
- ?
.spec.externalTrafficPolicy? - 表示此 Service 是否希望將外部流量路由到節(jié)點(diǎn)本地或集群范圍的端點(diǎn)。 有兩個(gè)可用選項(xiàng):?Cluster?(默認(rèn))和 ?Local?。 ?Cluster?隱藏了客戶(hù)端源 IP,可能導(dǎo)致第二跳到另一個(gè)節(jié)點(diǎn),但具有良好的整體負(fù)載分布。 ?Local?保留客戶(hù)端源 IP 并避免 LoadBalancer 和 NodePort 類(lèi)型服務(wù)的第二跳, 但存在潛在的不均衡流量傳播風(fēng)險(xiǎn)。 - ?
.spec.healthCheckNodePort? - 指定服務(wù)的 healthcheck nodePort(數(shù)字端口號(hào))。 如果你未指定 ?healthCheckNodePort?,服務(wù)控制器從集群的 NodePort 范圍內(nèi)分配一個(gè)端口。 你可以通過(guò)設(shè)置 API 服務(wù)器的命令行選項(xiàng) ?--service-node-port-range? 來(lái)配置上述范圍。 在服務(wù) ?type?設(shè)置為 LoadBalancer 并且 ?externalTrafficPolicy?設(shè)置為 ?Local?時(shí), Service 將會(huì)使用用戶(hù)指定的 ?healthCheckNodePort?值(如果你指定了它)。
可以通過(guò)在服務(wù)的清單文件中將 ?externalTrafficPolicy ?設(shè)置為 Local 來(lái)激活此功能。比如:
apiVersion: v1
kind: Service
metadata:
name: example-service
spec:
selector:
app: example
ports:
- port: 8765
targetPort: 9376
externalTrafficPolicy: Local
type: LoadBalancer保留源 IP 時(shí)的注意事項(xiàng)和限制
一些云服務(wù)供應(yīng)商的負(fù)載均衡服務(wù)不允許你為每個(gè)目標(biāo)配置不同的權(quán)重。
由于每個(gè)目標(biāo)在向節(jié)點(diǎn)發(fā)送流量方面的權(quán)重相同,因此外部流量不會(huì)在不同 Pod 之間平均負(fù)載。 外部負(fù)載均衡器不知道每個(gè)節(jié)點(diǎn)上用作目標(biāo)的 Pod 數(shù)量。
在 ?NumServicePods << _NumNodes? 或 ?NumServicePods >> NumNodes? 時(shí), 即使沒(méi)有權(quán)重,也會(huì)看到接近相等的分布。
內(nèi)部 Pod 到 Pod 的流量應(yīng)該與 ClusterIP 服務(wù)類(lèi)似,所有 Pod 的概率相同。
回收負(fù)載均衡器
特性狀態(tài): Kubernetes v1.17 [stable]
在通常情況下,應(yīng)在刪除 LoadBalancer 類(lèi)型 Service 后立即清除云服務(wù)供應(yīng)商中的相關(guān)負(fù)載均衡器資源。 但是,眾所周知,在刪除關(guān)聯(lián)的服務(wù)后,云資源被孤立的情況很多。 引入了針對(duì)服務(wù)負(fù)載均衡器的終結(jié)器保護(hù),以防止這種情況發(fā)生。 通過(guò)使用終結(jié)器,在刪除相關(guān)的負(fù)載均衡器資源之前,也不會(huì)刪除服務(wù)資源。
具體來(lái)說(shuō),如果服務(wù)具有 ?type ?LoadBalancer,則服務(wù)控制器將附加一個(gè)名為 ?service.kubernetes.io/load-balancer-cleanup? 的終結(jié)器。 僅在清除負(fù)載均衡器資源后才能刪除終結(jié)器。 即使在諸如服務(wù)控制器崩潰之類(lèi)的極端情況下,這也可以防止負(fù)載均衡器資源懸空。
外部負(fù)載均衡器供應(yīng)商
請(qǐng)務(wù)必注意,此功能的數(shù)據(jù)路徑由 Kubernetes 集群外部的負(fù)載均衡器提供。
當(dāng)服務(wù) ?type ?設(shè)置為 LoadBalancer 時(shí),Kubernetes 向集群中的 Pod 提供的功能等同于 ?type ?設(shè)置為 ClusterIP,并通過(guò)使用托管了相關(guān) Kubernetes Pod 的節(jié)點(diǎn)作為條目對(duì)負(fù)載均衡器 (從外部到 Kubernetes)進(jìn)行編程來(lái)擴(kuò)展它。 Kubernetes 控制平面自動(dòng)創(chuàng)建外部負(fù)載均衡器、健康檢查(如果需要)和包過(guò)濾規(guī)則(如果需要)。 一旦云服務(wù)供應(yīng)商為負(fù)載均衡器分配了 IP 地址,控制平面就會(huì)查找該外部 IP 地址并將其填充到 Service 對(duì)象中。
當(dāng)前標(biāo)題:創(chuàng)新互聯(lián)kubernetes教程:Kubernetes創(chuàng)建外部負(fù)載均衡器
本文網(wǎng)址:http://m.fisionsoft.com.cn/article/cdsgidg.html


咨詢(xún)
建站咨詢(xún)
