[英]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.