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