我已经为kubernetes建立了一个aws kops集群,我有多个微服务,在每个应用程序中都需要彼此交互。
场景:我的ta2carbon应用程序试图通过服务(dns)名称调用ta1carbon应用程序中的函数。
结果:尝试命中端口80(但已配置端口3000)时失败,并出现超时错误。
我的nodejs应用程序控制台日志,
ApiURL:
http://ta1carbon/api/app1/app1Func2
{ Error: connect ETIMEDOUT 100.66.7.165:80
at Object._errnoException (util.js:992:11)
at _exceptionWithHostPort (util.js:1014:20)
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1186:14)
code: 'ETIMEDOUT',
errno: 'ETIMEDOUT',
syscall: 'connect',
address: '100.66.7.165',
port: 80 }
当我试图在ta2carbon pod中卷曲ta1carbon应用程序时,curl的错误日志也是一样的。
root@ta2carbon-5fdcfb97cc-8j4nl:/home/appHome
curl: (7) Failed to connect to ta1carbon port 80: Connection timed out
但我定义的端口在服务中。yaml是3000而不是80!
下面是两种微服务的yml配置。
TA1Carbon Service山药
apiVersion: v1
kind: Service
metadata:
name: ta1carbon
labels:
app: ta1carbon
spec:
ports:
- port: 3000
targetPort: 3000
type: ClusterIP
selector:
app: ta1carbon
TA2碳素服务山药
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>
所以根据我的观察,对于url
http://ta1carbon/api/app1/app1func2
服务DNS
TA1碳
正在下决心
100.67.24.69分80秒
导致超时。
但是如果我蜷缩在
100.67.24.69分3000秒
从Ta2碳仓里面我得到一个
成功反应
如果我改变我的服务yaml
-端口:80
重新部署和测试
成功反应
我发现库伯内特斯的这种行为很奇怪,不确定我是在犯错误还是在环境方面。
我的问题是-
为什么它将服务ta1 carbon in解析为100.67.24.69:80并超时,而端口应该是3000!
如有任何意见,将不胜感激。请告诉我这里面少了什么。