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

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


咨詢
建站咨詢
