??本文將介紹如何使用NodePort、LoadBalancer、Ingress控制器三種方式將服務(wù)公開(kāi),供外部用戶訪問(wèn),并探討三者之間何時(shí)使用?如何選擇?
發(fā)布服務(wù)的三種方式:
- NodePort 服務(wù)類型,將應(yīng)用程序公開(kāi)到每個(gè)節(jié)點(diǎn)上的端口上。
- LoadBalancer 服務(wù)類型,創(chuàng)建一個(gè)指向Kubernetes服務(wù)的外部負(fù)載均衡器。
- Ingress 管理外部訪問(wèn)的API對(duì)象,Ingress不會(huì)公開(kāi)任何端口或協(xié)議。
NodePort
??如果將service.type設(shè)置為NodePort,Kubernetes控制器將從--service-node-port-range(默認(rèn)值: 30000-32767)范圍內(nèi)分配一個(gè)端口,每個(gè)節(jié)點(diǎn)都將該端口代理到您的服務(wù)。雖然這對(duì)于大多數(shù)TCP或UDP客戶端來(lái)說(shuō)可能不是問(wèn)題,但HTTP或HTTPS流量最終暴露在非標(biāo)準(zhǔn)端口上。但是,NodePort旨在作為高級(jí)入口模型(例如,LoadBalancer)的構(gòu)建塊,當(dāng)您不需要生產(chǎn)環(huán)境URL時(shí),它對(duì)于開(kāi)發(fā)目的很方便。
LoadBalancer
??LoadBalance服務(wù)類型會(huì)自動(dòng)部署一個(gè)外部負(fù)載均衡器,該外部負(fù)載均衡器與特定的IP地址關(guān)聯(lián),并將外部流量路由到集群中的Kubernetes服務(wù)。但不像NodePort,并不是所有的云提供商都支持LoadBalance服務(wù)類型。如果您在支持LoadBalancer服務(wù)類型的環(huán)境中,這可能是路由流量的最安全,最簡(jiǎn)單的方法。
Ingress
??一個(gè)API對(duì)象,用于管理對(duì)集群中服務(wù)的外部訪問(wèn),通常是HTTP。Ingress可以提供負(fù)載均衡、SSL終止和基于名稱的虛擬主機(jī)。Ingress控制器通常不會(huì)消除對(duì)外部負(fù)載均衡器的需要,只是在負(fù)載均衡器后面增加了一個(gè)額外的路由和控制層。將HTTP和HTTPS以外的服務(wù)公開(kāi)到Internet時(shí),通常使用Service.Type = NodePort或 Service.Type = LoadBalancer類型的服務(wù)。
??我們剛剛介紹了將外部流量路由到Kubernetes集群的三種基本模式,Ingress控制器和Kubernetes服務(wù)都需要一個(gè)外部負(fù)載均衡器,并且如前所述,NodePort是不能直接用于生產(chǎn)的,但是,通常情況下,您的Kubernetes服務(wù)還將對(duì)入口施加其他要求。例如:
- 基于內(nèi)容的路由(例如,基于HTTP方法,請(qǐng)求標(biāo)頭或特定請(qǐng)求的其他屬性的路由)
- 彈性,例如速率限制,超時(shí)
- 支持多種協(xié)議,例如WebSockets或gRPC
- 認(rèn)證方式
特定于服務(wù)的入口管理
??因此,進(jìn)入策略的問(wèn)題實(shí)際上是選擇正確的方式來(lái)管理從外部負(fù)載均衡器到服務(wù)的流量。你有三種選擇:
- 選擇一個(gè)Ingress控制器,例如 ingress-nginx
- API Gateway,例如 Ambassador
- 使用NGINX自定義部署
??假設(shè)您不想自己部署,那么如何在入口控制器和API網(wǎng)關(guān)之間進(jìn)行選擇?