繁体   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