簡體   English   中英

如何使用服務名稱訪問kubernetes集群中的服務。

[英]How to access a service in a kubernetes cluster using the service name .

我是kubernetes的新手,我已經在谷歌容器引擎上成功設置了一個集群。 在我的集群中,我有一個用dropwizard開發的后端api,前端用節點js和一個mysql數據庫開發。 所有這些都已經部署到集群並且正在工作。但是我的挑戰是在為我的節點容器和后端設置外部ip之后我可以遠程訪問它們但是我無法使用服務名稱從我的前端訪問我的支持,例如我的后端在集群中稱為backendapi。 我不能這樣做http:// backendapi:8080在部署到集群時調用我的休息服務。 對我來說,當我部署到集群時,我不希望我的前端使用外部IP命中我的后端,我希望它們在集群內連接,而無需通過外部IP地址。 當我連接到一個pod並ping backendapi時它會返回一個結果但是當我部署我的前端並使用標簽名稱時它不起作用。我可能做錯了什么?

只要kube-dns正在運行(我相信“除非你禁用它”),所有服務對象都有一個群集 DNS名稱service_name +"."+ service_namespace + ".svc.cluster.local"所以所有其他的東西會在default命名空間中將你的backendapi作為(使用你的端口編號的例子) http://backendapi.default.svc.cluster.local:8080 這個事實是Kubernetes迫使所有標識符成為“dns兼容”名稱(沒有下划線或其他愚蠢字符)的原因。

即使您沒有運行kube-dns,所有服務名稱和端口也會像${BACKENDAPI_SERVICE_HOST}:${BACKENDAPI_SERVICE_PORT}一樣注入到${BACKENDAPI_SERVICE_HOST}:${BACKENDAPI_SERVICE_PORT}的環境中,因此環境變量${BACKENDAPI_SERVICE_HOST}:${BACKENDAPI_SERVICE_PORT}將包含服務的集群內IP (即使env-var命名為“host”)和“默認”服務端口(在您的示例中為8080)(如果只有一個)。

您是否選擇使用DNS名稱或環境變量IP是一個問題,您是否希望在日志輸出或錯誤消息中具有“可讀”名稱,而不是您是否希望跳過DNS查找並使用服務IP地址速度快但易讀性差。 他們的行為相同。

整個故事都存在於服務網絡概念文檔中

但是當我改為backendapi.default.svc.cluster.local:8080時,問題仍然存在。 我甚至嘗試使用它內部映射到的另一個端口,我的前端網頁一直在說backendapi.default.svc.cluster.local:32208 / api / v1 / auth / login net :: ERR_NAME_NOT_RESOLVED。 有趣的是,當我從我的前端吊艙卷曲時,它的工作原理。 但是當我使用我的網絡瀏覽器訪問它時,它並沒有

因為它只能在群集中解析。 (因為只有帶有kube-dns附加組件的K8s群集才能將域名backendapi.default.svc.cluster.local:8080轉換為相應的IP地址)

這可能是因為我也暴露了外部IP服務。 外部ip工作

不,這是因為域名backendapi.default.svc.cluster.local只能在群集內解析,而不能從隨機機器中的隨機瀏覽器解析。

你所做的是其中一個解決方案,為服務公開了一個外部ip。 如果您不想使用IP,可以創建入口(並在群集中使用入口控制器)並公開您的微服務。 由於您使用的是GCP,因此您可以使用其API網關,而不是暴露出神秘的IP地址。

注意 :請記住添加身份驗證/授權以鎖定您的微服務,因為它會暴露給用戶。

另一種方案

代理所有后端調用通過服務器為您的Web應用程序服務(nginx / nodejs等)

這種方法的優點是,您將避免所有同源策略/ CORS頭痛,您的微服務(快速)身份驗證詳細信息將從用戶的瀏覽器中抽象出來。 (這不一定是優勢)。

這種方法的缺點是,你的后端微服務將與前端緊密耦合(反之亦然,具體取決於你如何看待它),這將使后端的擴展依賴於前端。 您的后端未暴露。 所以,如果你有另一個消費者(我們只是說一個Android應用程序),它將無法訪問您的服務。

混合解決方案

代理所有后端調用通過服務器為您的Web應用程序(nginx / nodejs等)提供服務,以便您的API將繼承您的webapps域。 並且仍然暴露后端服務(在需要時),以便其他消費者(如果有的話,將來)可以使用它。

類似的問題: https//stackoverflow.com/a/47043871/6785908

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM