[英]How to access the service deployed on one pod via another pod in Kubernetes?
誰能讓我知道我們如何通過 kubernetes 集群中的另一個 pod 訪問部署在一個 pod 上的服務?
例子:
有一個 nginx 服務部署在 Node1 上(pod 名稱為 nginx-12345)和另一個服務部署在 Node2 上(pod 名稱為 service-23456)。 現在如果'service'出於某種原因想要與'nginx'通信,那么我們如何訪問'service-23456' pod中的'nginx'呢?
有多種方法可以在kubernetes中訪問服務,您可以通過NodePort或LoadBalancer公開您的服務,並在集群外部訪問它。
請參閱有關如何訪問服務的官方文檔。
Kubernetes官方文件指出:
某些群集可能允許您ssh到群集中的節點。 從那里,您可以訪問群集服務。 這是一種非標准方法,適用於某些群集,但不適用於其他群集。 瀏覽器和其他工具可能安裝也可能不安裝。 群集DNS可能無法正常工作。
因此,直接從其他節點訪問服務取決於您正在使用的Kubernetes集群類型。
編輯:
在群集中部署服務后,您應該能夠使用其名稱聯系該服務, Kube-DNS
將使用正確的ClusterIP
進行回答,以便與最終的pod進行通信。 ClusterIP由在工作站上由kube-proxy創建的IPTables規則管理,這些規則將您對最終容器的IP請求NAT。
Kube-DNS命名約定是service.namespace.svc.cluster-domain.tld
,默認的群集域是cluster.local
。
例如,如果要從任何名稱空間聯系db
命名空間中名為mysql
的服務,只需與mysql.db.svc.cluster.local
。
如果這不起作用,那么群集中的kube-dns可能存在一些問題。 希望這可以幫助。
編輯2:在ubuntu中有一些已知的dns解決問題,Kubernetes官方文件指出
某些Linux發行版(例如Ubuntu)默認使用本地DNS解析器(systemd-resolved)。 Systemd-resolved移動並將/etc/resolv.conf替換為存根文件,該文件在解析上游服務器中的名稱時可能導致致命的轉發循環。 這可以通過使用kubelet的--resolv-conf標志手動修復,指向正確的resolv.conf(使用systemd-resolved,這是/run/systemd/resolve/resolv.conf)。 kubeadm 1.11自動檢測systemd-resolved,並相應地調整kubelet標志。
我遇到了類似的問題,以下鏈接可能會解決您的問題。 通常,集群中的所有服務都是可見和可訪問的。 將您的
service-23456<\/code>服務公開到類型 ClusterIP 和端口 8080。然后您可以從 nginx 服務調用端點“http:\/\/service-23456:8080”。
您是否將部署作為服務公開? 如果是這樣,只需通過它的dns名稱訪問它,例如http:// nginx-1234 - 或者如果它位於不同的命名空間中: http://nginx-1234.default.svc (將“default”更改為服務所在的命名空間in)或http://nginx-1234.default.svc.cluster.local
現在,如果您沒有公開服務,那么您可能應該這樣做。 您不需要將它暴露給外部世界,只是不要定義服務類型,它只能在您的集群中使用。
如果由於某種原因您不想公開服務(無法想到任何原因),您可以在api服務器中查詢pod IP。 您需要提供用於身份驗證的令牌,但這些令牌在pod中可用:
得到令牌:
TOKEN=$(cat /var/run/secrets/kubernetes.io/serviceaccount/token)
調用api服務器:
curl https://kubernetes.default.svc/api/v1/namespaces/default/pods--silent \
--header "Authorization: Bearer $TOKEN" --insecure
您可以通過添加?fieldSelector=spec.nodeName%3Dtargetnodename
或類似(僅使用json路徑)來優化查詢。 輸出可以使用https://stedolan.github.io/jq/或任何其他JSON實用程序進行解析。
這里回答了Simlar問題: Kubernetes - 如何通過休息請求從pod中的Web服務器訪問服務
只需將“ProductWebApp”替換為“nginx”,將“DashboardWebApp”替換為“service”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.