W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
本文展示如何創(chuàng)建一個外部負載均衡器。
創(chuàng)建 服務(wù) 時,你可以選擇自動創(chuàng)建云網(wǎng)絡(luò)負載均衡器。 負載均衡器提供外部可訪問的 IP 地址,可將流量發(fā)送到集群節(jié)點上的正確端口上 ( 假設(shè)集群在支持的環(huán)境中運行,并配置了正確的云負載均衡器驅(qū)動包)。
你還可以使用 Ingress 代替 Service。
你必須擁有一個 Kubernetes 的集群,同時你的 Kubernetes 集群必須帶有 kubectl 命令行工具。 建議在至少有兩個節(jié)點的集群上運行本教程,且這些節(jié)點不作為控制平面主機。 如果你還沒有集群,你可以通過 Minikube 構(gòu)建一個你自己的集群,或者你可以使用下面任意一個 Kubernetes 工具構(gòu)建:
你的集群必須在已經(jīng)支持配置外部負載均衡器的云或其他環(huán)境中運行。
要創(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 expose
? 命令及其 ?--type=LoadBalancer
? 參數(shù)創(chuàng)建服務(wù):
kubectl expose deployment example --port=8765 --target-port=9376 \
--name=example-service --type=LoadBalancer
此命令通過使用與引用資源(在上面的示例的情況下,名為 ?example
?的 Deployment) 相同的選擇器來創(chuàng)建一個新的服務(wù)。
更多信息(包括更多的可選參數(shù)),請參閱 kubectl expose 指南。
你可以通過 ?kubectl
?獲取服務(wù)信息,找到為你的服務(wù)創(chuàng)建的 IP 地址:
kubectl describe services example-service
這將獲得類似如下輸出:
Name: example-service
Namespace: default
Labels: app=example
Annotations: <none>
Selector: app=example
Type: LoadBalancer
IP Families: <none>
IP: 10.3.22.96
IPs: 10.3.22.96
LoadBalancer Ingress: 192.0.2.89
Port: <unset> 8765/TCP
TargetPort: 9376/TCP
NodePort: <unset> 30593/TCP
Endpoints: 172.17.0.3:9376
Session Affinity: None
External Traffic Policy: Cluster
Events: <none>
負載均衡器的 IP 地址列在 ?LoadBalancer Ingress
? 旁邊。
說明:
如果你在 Minikube 上運行服務(wù),你可以通過以下命令找到分配的 IP 地址和端口:minikube service example-service --url
默認情況下,目標容器中看到的源 IP 將不是客戶端的原始源 IP。 要啟用保留客戶端 IP,可以在服務(wù)的 ?.spec
? 中配置以下字段:
.spec.externalTrafficPolicy
? - 表示此 Service 是否希望將外部流量路由到節(jié)點本地或集群范圍的端點。 有兩個可用選項:?Cluster
?(默認)和 ?Local
?。 ?Cluster
?隱藏了客戶端源 IP,可能導(dǎo)致第二跳到另一個節(jié)點,但具有良好的整體負載分布。 ?Local
?保留客戶端源 IP 并避免 LoadBalancer 和 NodePort 類型服務(wù)的第二跳, 但存在潛在的不均衡流量傳播風(fēng)險。
.spec.healthCheckNodePort
? - 指定服務(wù)的 healthcheck nodePort(數(shù)字端口號)。 如果你未指定 ?healthCheckNodePort
?,服務(wù)控制器從集群的 NodePort 范圍內(nèi)分配一個端口。 你可以通過設(shè)置 API 服務(wù)器的命令行選項 ?--service-node-port-range
? 來配置上述范圍。 在服務(wù) ?type
?設(shè)置為 LoadBalancer 并且 ?externalTrafficPolicy
?設(shè)置為 ?Local
?時, Service 將會使用用戶指定的 ?healthCheckNodePort
?值(如果你指定了它)。可以通過在服務(wù)的清單文件中將 ?externalTrafficPolicy
?設(shè)置為 Local 來激活此功能。比如:
apiVersion: v1
kind: Service
metadata:
name: example-service
spec:
selector:
app: example
ports:
- port: 8765
targetPort: 9376
externalTrafficPolicy: Local
type: LoadBalancer
一些云服務(wù)供應(yīng)商的負載均衡服務(wù)不允許你為每個目標配置不同的權(quán)重。
由于每個目標在向節(jié)點發(fā)送流量方面的權(quán)重相同,因此外部流量不會在不同 Pod 之間平均負載。 外部負載均衡器不知道每個節(jié)點上用作目標的 Pod 數(shù)量。
在 ?NumServicePods << _NumNodes
? 或 ?NumServicePods >> NumNodes
? 時, 即使沒有權(quán)重,也會看到接近相等的分布。
內(nèi)部 Pod 到 Pod 的流量應(yīng)該與 ClusterIP 服務(wù)類似,所有 Pod 的概率相同。
特性狀態(tài): Kubernetes v1.17 [stable]
在通常情況下,應(yīng)在刪除 LoadBalancer 類型 Service 后立即清除云服務(wù)供應(yīng)商中的相關(guān)負載均衡器資源。 但是,眾所周知,在刪除關(guān)聯(lián)的服務(wù)后,云資源被孤立的情況很多。 引入了針對服務(wù)負載均衡器的終結(jié)器保護,以防止這種情況發(fā)生。 通過使用終結(jié)器,在刪除相關(guān)的負載均衡器資源之前,也不會刪除服務(wù)資源。
具體來說,如果服務(wù)具有 ?type
?LoadBalancer,則服務(wù)控制器將附加一個名為 ?service.kubernetes.io/load-balancer-cleanup
? 的終結(jié)器。 僅在清除負載均衡器資源后才能刪除終結(jié)器。 即使在諸如服務(wù)控制器崩潰之類的極端情況下,這也可以防止負載均衡器資源懸空。
請務(wù)必注意,此功能的數(shù)據(jù)路徑由 Kubernetes 集群外部的負載均衡器提供。
當服務(wù) ?type
?設(shè)置為 LoadBalancer 時,Kubernetes 向集群中的 Pod 提供的功能等同于 ?type
?設(shè)置為 ClusterIP,并通過使用托管了相關(guān) Kubernetes Pod 的節(jié)點作為條目對負載均衡器 (從外部到 Kubernetes)進行編程來擴展它。 Kubernetes 控制平面自動創(chuàng)建外部負載均衡器、健康檢查(如果需要)和包過濾規(guī)則(如果需要)。 一旦云服務(wù)供應(yīng)商為負載均衡器分配了 IP 地址,控制平面就會查找該外部 IP 地址并將其填充到 Service 對象中。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: