无法使用Kubernetes Service与其他Pod聊天

时间:2019-10-24 13:29:36

标签: kubernetes 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是pod。 在bash中,我尝试通过-

发送请求
curl http://kubia

其中kubia是服务的名称。 我有错误-

  

卷曲:(6)无法解析主机:kubia。

请注意,我设法通过-

与服务进行通信
 kubectl exec kubia-gqd5l -- curl -s http://10.111.178.111

有什么主意吗?

2 个答案:

答案 0 :(得分:1)

Kubernetes群集通常已部署DNS。这样就可以通过使用相应的Kubernetes服务的名称在集群内( )内进行Pod到Pod的通信。参见https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/

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

要检查的是服务定义中的选择器-确保窗格/部署具有选择器中指定的app: kubia标签。

否则,按照上面链接中的文档,由于该服务的查找来自同一名称空间中的Pod,因此不需要将该名称空间与服务名称一起使用:(quote)“。在Kubernetes命名空间栏中假设一个名为foo的服务。在命名空间中运行的Pod可以通过对foo进行DNS查询来查找此服务。在命名空间quux中运行的Pod可以通过对DNS进行查询来查找此服务foo.bar”。

答案 1 :(得分:0)

看看这个答案2 Kubernetes pod communicating without knowing the exposed address,以服务为目标,最好在服务中添加名称空间。