官术网_书友最值得收藏!

3.3 公開服務(wù)

到目前為止,你已經(jīng)了解了如何使用給定服務(wù)的主機(jī)名或集群內(nèi)部DNS名稱從集群內(nèi)訪問服務(wù)。要從本地計(jì)算機(jī)訪問服務(wù)進(jìn)行調(diào)試,可以使用端口轉(zhuǎn)發(fā)。然而,在大多數(shù)情況下,你希望用戶通過網(wǎng)絡(luò)(例如使用We b瀏覽器)訪問We b服務(wù),或者至少訪問其中的一部分。為此,你需要公開你的服務(wù)。OpenShift提供了易于使用的工具來創(chuàng)建公共DNS名稱作為集群域的子域,可以從集群外部訪問該子域。要使用它,你可以為希望公開到內(nèi)網(wǎng)或公網(wǎng)的服務(wù)創(chuàng)建路由資源。

3.3.1 按自動生成的DNS名稱路由

首先要公開的服務(wù)是街機(jī)游戲平臺的主要入口,即platform服務(wù)。為此,只需再次運(yùn)行oc expose,這一次指定要向外部世界公開的服務(wù):

運(yùn)行此命令后,我們在“arcade”命名空間中創(chuàng)建了一個路由資源。使用以下命令查看已生成的路由:

接下來,公開game服務(wù)。再次運(yùn)行oc expose,檢查OpenShift在命名空間中創(chuàng)建的路由:

現(xiàn)在可以看到,對于服務(wù)的不同路由,每個路由都分配了一個唯一的DNS名稱。打開瀏覽器驗(yàn)證兩個網(wǎng)頁是否可以到達(dá)。

圖3-2展示了街機(jī)游戲平臺頁面的外觀。如果你運(yùn)行OpenShift Local,這些將是http://platform-arcade.apps-crc.testinghttp://game-arcade.apps-crc.testing/s3e。記住,游戲服務(wù)只服務(wù)于/s3e路徑。

圖3-2:示例應(yīng)用程序:街機(jī)游戲平臺前端

3.3.2 按路徑路由

在平臺頁面上,你會注意到到記分頁面的鏈接和游戲按鈕目前都無法工作。這是因?yàn)閔ighscore服務(wù)尚未公開,并且game服務(wù)目前以不同的域名公開。默認(rèn)情況下,OpenShift為每個公開的服務(wù)創(chuàng)建唯一的子域,由命名空間和服務(wù)名稱組成。你可以在前面的oc get routes命令的輸出中看到它們。但是,你可以告訴OpenShift基于URL中的路徑路由請求,而不是為每個服務(wù)生成唯一的名稱。回頭看看圖3-1中示例應(yīng)用程序的架構(gòu),使用相同域名的路徑路由是應(yīng)用程序運(yùn)行所需要的。

你可以重用為平臺服務(wù)生成的域名——platform-arcade.apps-crc.testing(整個應(yīng)用程序),指定應(yīng)該路由到不同服務(wù)的路徑。由于platform服務(wù)是應(yīng)用程序的主要入口點(diǎn),并且在/處接收請求,因此你不需要更改此路由。使用以下命令在/highscore處公開highscore服務(wù):

要更改游戲服務(wù)的主機(jī)名,可以使用以下命令編輯生成的路由。它打開一個編輯器,你可以將生成的主機(jī)名調(diào)整為platform-arcade.apps-crc.testing并設(shè)置路徑為/s3e:

?將此路由的路徑設(shè)置為/s3e,以便所有到此路徑的請求將被轉(zhuǎn)發(fā)到game服務(wù)。

保存更改并退出編輯器后,你可以再次獲得路由列表。

所有三個路由現(xiàn)在應(yīng)該被分配到相同的主機(jī)名:

當(dāng)你在瀏覽器中重新訪問主頁http://platform-arcade.apps-crc.testing時,游戲按鈕應(yīng)該可以工作。到記分頁面的鏈接也應(yīng)該可以正常工作,在完成一些游戲后,它看起來類似于圖3-3。

圖3-3:示例應(yīng)用程序:街機(jī)游戲平臺記分

3.3.3 外部負(fù)載均衡器

你可以使用基礎(chǔ)設(shè)施提供的負(fù)載均衡器,而不是使用OpenShift路由器來公開和訪問你的服務(wù)。例如,如果你已經(jīng)將OpenShift集群部署到谷歌云平臺(GCP),你可以創(chuàng)建GCP負(fù)載均衡器,將請求分發(fā)到OpenShift節(jié)點(diǎn)上的服務(wù)。

在集群的所有節(jié)點(diǎn)上都將打開一個端口,用于偵聽定向到特定服務(wù)的流量。負(fù)載均衡器將請求分發(fā)到這個特定端口上的節(jié)點(diǎn)。對負(fù)載均衡器IP的請求將被轉(zhuǎn)發(fā)到正確的pod。這個概念在OpenShift中稱為NodePort

OpenShift將負(fù)責(zé)在基礎(chǔ)設(shè)施中配置負(fù)載均衡器。你需要做的就是在公開部署時指定LoadBalancer類型。

為了遵循本節(jié)的示例,你將需要一個部署在提供負(fù)載均衡器的基礎(chǔ)設(shè)施上的OpenShift集群,如GCP或Amazon Web Services(AWS)。雖然你可以在OpenShift Local上執(zhí)行所有命令并創(chuàng)建LoadBalancer類型的服務(wù),但它與NodePort類型的服務(wù)沒有什么不同。

使用以下命令創(chuàng)建一個名為game-lb的新服務(wù),以使用LoadBalancer類型的服務(wù)公開game部署。之后,用oc describe檢查創(chuàng)建的服務(wù):

你可以將此服務(wù)與原始game服務(wù)進(jìn)行比較。

你可以看到OpenShift創(chuàng)建了一個LoadBalancer服務(wù),而不是ClusterIP。此外,已經(jīng)為該服務(wù)分配了一個NodePort,現(xiàn)在可以用來訪問該服務(wù)。你應(yīng)該能夠查詢該端口上的任何節(jié)點(diǎn)并到達(dá)game-lb服務(wù),該服務(wù)將在與game服務(wù)相同的端點(diǎn)上分發(fā)請求。

通過oc get nodes -o wide或oc describe nodes獲取任意節(jié)點(diǎn)的IP地址。如果你的節(jié)點(diǎn)可以從外部訪問并且端口是公開的,那么你可以使用外部IP直接從你的計(jì)算機(jī)查詢服務(wù)。在大多數(shù)情況下,節(jié)點(diǎn)不直接公開于互聯(lián)網(wǎng),或者端口位于防火墻后面,因此無法從互聯(lián)網(wǎng)訪問它們。但是,你仍然可以在集群內(nèi)部署pod并查詢內(nèi)部IP以觀察服務(wù)行為。

?如果curl pod已經(jīng)在前面的例子中運(yùn)行,這個命令可能會返回一個錯誤。你可以刪除pod,也可以重用現(xiàn)有的pod。

?與上面相同的命令,它會一直運(yùn)行。要退出,請按Ctrl+C。

在上述命令中,使用該服務(wù)分配的端口查詢一個節(jié)點(diǎn)。從標(biāo)題中,你可以看到請求被分配到與之前指向game服務(wù)的請求相同的端點(diǎn)。

除了NodePort之外,OpenShift還使用部署集群的基礎(chǔ)設(shè)施中的負(fù)載均衡器公開了該服務(wù)。

對于本例,已經(jīng)在GCP上創(chuàng)建了OpenShift集群。在GCP控制臺中,通過比較與負(fù)載均衡器關(guān)聯(lián)的公共IP,可以找到與此服務(wù)關(guān)聯(lián)的負(fù)載均衡器。圖3-4是OpenShift創(chuàng)建的一個負(fù)載均衡器配置示例。

就像你之前查詢NodePort一樣,你可以在本地機(jī)器上應(yīng)用curl使用外部IP訪問負(fù)載均衡器后面的服務(wù):

圖3-4:GCP控制臺中負(fù)載均衡器的詳細(xì)信息

再次按Ctrl+C停止Curl循環(huán)。

請注意,為你的服務(wù)使用基礎(chǔ)設(shè)施提供的負(fù)載均衡器會給你的項(xiàng)目帶來額外的成本。我們建議使用OpenShift路由器作為默認(rèn)值(也是為了便于使用)。只有當(dāng)它不能提供你所需的性能,或者出于其他原因需要外部負(fù)載均衡器時,你才應(yīng)該考慮為服務(wù)創(chuàng)建一個。

主站蜘蛛池模板: 汶上县| 惠水县| 丹棱县| 民乐县| 福州市| 彭州市| 灌阳县| 佛山市| 穆棱市| 苗栗县| 榆林市| 南乐县| 鸡泽县| 宜兰县| 河源市| 临江市| 凭祥市| 迁西县| 临高县| 京山县| 五家渠市| 南投县| 保定市| 临海市| 兴城市| 宜宾县| 若羌县| 时尚| 双鸭山市| 彭水| 潼南县| 游戏| 石狮市| 永登县| 咸阳市| 红原县| 余姚市| 米泉市| 芦溪县| 泸州市| 竹北市|