Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法使用DNS为kubernetes中的服务从另一个服务调用一个服务_Kubernetes_Kubernetes Service - Fatal编程技术网

无法使用DNS为kubernetes中的服务从另一个服务调用一个服务

无法使用DNS为kubernetes中的服务从另一个服务调用一个服务,kubernetes,kubernetes-service,Kubernetes,Kubernetes Service,我已经为Kubernetes建立了一个AWS kops集群,我有多个微服务,每个应用程序都需要相互交互 场景:我的ta2carbon应用程序试图通过服务(dns)名称调用ta1carbon应用程序中的函数。 结果:尝试点击端口80(但已配置端口-3000)失败,出现超时错误。 我的nodejs应用程序控制台日志, APIRL: 当我试图将我的ta1carbon应用程序卷曲到ta2carbon pod中时,curl也会出现同样的错误日志 root@ta2carbon-5fdcfb97cc-8j4n

我已经为Kubernetes建立了一个AWS kops集群,我有多个微服务,每个应用程序都需要相互交互

场景:我的ta2carbon应用程序试图通过服务(dns)名称调用ta1carbon应用程序中的函数。

结果:尝试点击端口80(但已配置端口-3000)失败,出现超时错误。

我的nodejs应用程序控制台日志, APIRL:

当我试图将我的ta1carbon应用程序卷曲到ta2carbon pod中时,curl也会出现同样的错误日志

root@ta2carbon-5fdcfb97cc-8j4nl:/home/appHome# curl -i http://ta1carbon/api/app1/app1Func2
curl: (7) Failed to connect to ta1carbon port 80: Connection timed out
但是我定义的端口在服务中。yaml是3000而不是80! 以下是两种微服务的yml服务配置

ta1carbon服务yaml

apiVersion: v1
kind: Service
metadata:
  name: ta1carbon
  labels:
    app: ta1carbon
spec:
  ports:
  - port: 3000
    targetPort: 3000
  type: ClusterIP
  selector:
    app: ta1carbon
apiVersion: v1
kind: Service
metadata:
  name: ta2carbon
  labels:
    app: ta2carbon
spec:
  ports:
  - port: 3001
    targetPort: 3001
  type: ClusterIP
  selector:
    app: ta2carbon
ta2carbon服务yaml

apiVersion: v1
kind: Service
metadata:
  name: ta1carbon
  labels:
    app: ta1carbon
spec:
  ports:
  - port: 3000
    targetPort: 3000
  type: ClusterIP
  selector:
    app: ta1carbon
apiVersion: v1
kind: Service
metadata:
  name: ta2carbon
  labels:
    app: ta2carbon
spec:
  ports:
  - port: 3001
    targetPort: 3001
  type: ClusterIP
  selector:
    app: ta2carbon
以下是TA1碳和ta2碳的详细服务说明

kubectl describe service ta1carbon
Name:              ta1carbon
Namespace:         default
Labels:            app=ta1carbon
Annotations:       <none>
Selector:          app=ta1carbon
Type:              ClusterIP
IP:                100.66.7.165
Port:              <unset>  3000/TCP
TargetPort:        3000/TCP
Endpoints:         100.96.1.13:3000
Session Affinity:  None
Events:            <none>

kubectl describe service ta2carbon
Name:              ta2carbon
Namespace:         default
Labels:            app=ta2carbon
Annotations:       <none>
Selector:          app=ta2carbon
Type:              ClusterIP
IP:                100.67.129.126
Port:              <unset>  3001/TCP
TargetPort:        3001/TCP
Endpoints:         100.96.1.12:3001
Session Affinity:  None
Events:            <none>
kubectl描述服务碳
名称:ta1carbon
名称空间:默认值
标签:app=ta1carbon
注释:
选择器:app=ta1carbon
类型:集群
IP:100.66.7.165
端口:3000/TCP
目标端口:3000/TCP
终点:100.96.1.13:3000
会话关联:无
活动:
kubectl描述了服务性碳酸氢
名称:ta2carbon
名称空间:默认值
标签:app=ta2carbon
注释:
选择器:app=ta2carbon
类型:集群
IP:100.67.129.126
端口:3001/TCP
目标端口:3001/TCP
终点:100.96.1.12:3001
会话关联:无
活动:
所以根据我观察到的,对于url 服务dnsta1carbon正在解析为100.67.24.69:80,导致超时

但是,如果我蜷缩成100.67.24.69:3000从碳酸氢罐内部,我会得到一个成功的反应

另外,如果我更改服务yaml-port:80并再次部署和测试,我会得到成功响应

我发现库伯内特斯的这种行为很奇怪,不确定我是在犯错还是在环境中

我的问题是-

端口本应为3000时,为什么要将服务ta1carbon in解析为100.67.24.69:80并超时


对此的任何意见都将不胜感激。请告诉我其中缺少什么。

DNS将域名解析为IP地址,而不是IP地址+端口

有两种可能的解决方案:

  • 修改应用程序源以向
    http://ta1carbon:3000

  • ta1carbon
    服务上的
    端口设置为
    80


  • 我建议选择2。在这个场景中,您正在利用Kubernetes服务的强大功能。Kubernetes将在端口80上公开服务,但会向支持端口3000上服务的POD发送请求(因为
    targetPort:3000
    )。

    谢谢,我已经尝试了第二个选项,它起作用了。现在也尝试了第一种选择,两种方法都有效。但我想理解的是,默认情况下,如果我为服务定义端口和目标端口为3000,我的服务名称ta1carbon不应该正确解析吗?为什么会导致超时?@ShruthiBhaskar这是因为Kubernetes服务发现由DNS支持,而DNS不会告诉您的应用程序应该使用哪个端口号。换句话说,当您的应用程序要求DNS解析“ta1carbon”时,DNS会使用应用程序可以用来与服务对话的IP地址进行响应。DNS不会告诉应用程序要使用哪个端口。应用程序有责任知道使用哪个端口。Kubernetes公开了具有可在应用程序中使用的端口号的环境变量。在您的情况下:
    TA1CARBON\u SERVICE\u PORT
    是否可能同时向AWS团队(AWS中的Kubernetes专家)提出问题?