簡體   English   中英

無法使用 Kubernetes 服務與其他 pod 交談

[英]Can't to talk with other pods using Kubernetes Service

我如何理解我可以通過從 pod 中發送帶有服務的完全限定域名 (FQDN) 的 HTTP 請求來與特定 pod 中的其他 pod 交談。 系統使用 minikube 在本地運行。

服務的 YML -

apiVersion: v1
kind: Service
metadata:
  name: kubia
spec:
  sessionAffinity: ClientIP 
  ports:
    - port: 80
      targetPort: 8080
  selector:
    app: kubia 

服務描述——

Name:              kubia
Namespace:         default
Labels:            <none>
Annotations:       <none>
Selector:          app=kubia
Type:              ClusterIP
IP:                10.111.178.111
Port:              <unset>  80/TCP
TargetPort:        8080/TCP
Endpoints:         172.17.0.7:8080,172.17.0.8:8080,172.17.0.9:8080
Session Affinity:  ClientIP
Events:            <none>

我正在嘗試通過 -

 kubectl exec -it kubia-gqd5l bash

其中 kubia-gqd5l 是吊艙。 在 bash 中,我嘗試通過以下方式發送請求 -

curl http://kubia

其中 kubia 是服務的名稱。 我得到了錯誤 -

curl:(6)無法解析主機:kubia。

重要的是要注意,我設法通過以下方式與服務進行通信 -

 kubectl exec kubia-gqd5l -- curl -s http://10.111.178.111

任何想法?

看看這個答案2 Kubernetes pod 在不知道暴露地址的情況下進行通信,以服務為目標,最好在服務中添加命名空間。

Kubernetes 集群通常部署了 DNS。 通過使用相應的 Kubernetes 服務的名稱,這允許集群的 pod 到 pod 通信(除其他外)。 https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/

您的 Kubernetes 集群/minikube 是否正在運行 DNS?

其他需要檢查的是服務定義中的選擇器 - 確保 pod/deployment 具有app: kubia label,如選擇器中指定的那樣。

否則,根據上面鏈接中的文檔,由於服務的查找來自同一命名空間中的 pod,因此不需要將命名空間與服務名稱一起使用:(quote) "...假設Kubernetes 命名空間 bar 中名為 foo 的服務。在命名空間 bar 中運行的 Pod 可以通過簡單地對 foo 執行 DNS 查詢來查找此服務。在命名空間 quux 中運行的 Pod 可以通過對 foo 執行 ZED5F2BDECBD4BD349D0941 查詢來查找此服務。 ”。

暫無
暫無

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

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