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