Kubernetes – Curl 适用于服务 IP 但不适用于服务名称
Kubernetes – Curl works on service IP but not service name
我是 kubernetes 的新手,所以如果我跳过了一些明显的步骤或者我的问题不清楚,我深表歉意。
我已经定义了一个服务 game-app-service
和一个部署 game-app-deployment
。这两个都启动了,运行 很好。
我正在尝试将来自 API 网关服务(Ambassador)的请求路由到此服务。当尝试从 Ambassador pod 卷曲游戏应用程序服务端点时,我发现我总是收到空回复并且它连接到一个不是服务 ip 的 IP。但是,如果我用服务的 IP 地址和它正在侦听的端口换出 game-app-service
:
curl -v -X POST 10.102.142.157:8084/api/test
一切正常,我从服务器得到了预期的响应。
我注意到 curl -v -X POST game-app-service/api/test
解析到与 curl -v -X POST random/api/test
相同的 IP – 92.242.140.21 端口 80。这让我相信我的 DNS 解析有问题。但是,我已经验证我的 core-dns pods 已经启动并且 运行,所以我不确定为什么会这样。
下面列出了我的服务和部署的配置以供参考:
apiVersion: v1
kind: Service
metadata:
name: game-app-service
spec:
selector:
app: game-app-deployment
ports:
- protocol: TCP
port: 8084
targetPort: 8084
apiVersion: apps/v1
kind: Deployment
metadata:
name: game-app-deployment
labels:
app: game-app-deployment
spec:
replicas: 2
selector:
matchLabels:
app: game-app-deployment
template:
metadata:
labels:
app: game-app-deployment
spec:
containers:
- name: game-service-app
image: weflop/game-service-app
imagePullPolicy: Never
ports:
- containerPort: 8084
有人知道为什么我不能使用我的服务名称代替 IP 地址吗?
更新:
运行 wget -O- game-service-app
给我的 HTTP 状态为 200,但响应为:
[<=>
] 0 --.-KB/s <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html><head><meta http-equiv="refresh" content="0;url=https://searchassist.verizon.com/main?ParticipantID=euekiz39ksg8nwp7iqj2fp5wzfwi5q76&FailedURI=http%3A%2F%2Fgame-service-app%2F&FailureMode=1&Implementation=&AddInType=4&Version=pywr1.0&ClientLocation=us"/><script type="text/javascript">url="https://searchassist.verizon.com/main?ParticipantID=euekiz39ksg8nwp7iqj2fp5wzfwi5q76&FailedURI=http%3A%2F%2Fgame-service-app%2F&FailureMode=1&Implementation=&AddInType=4&Version=pywr1.0&ClientLocation=us";if(top.location!=location){var w=window,d=document,e=d.documentElement,b=d.body,x=w.innerWidth||e.clientWidth||b.clientWidth,y=w.innerHeight||e.clientHeight||b.clientHeight;url+="&w="+x+"&h="+y;}- [ <=>
表示 DNS 查找失败。
事实证明,问题是我的 API 网关与我的服务位于不同的命名空间中,这导致了问题。通过指定“game-service-app”。每当引用该服务时,我都能解决这个问题。
我是 kubernetes 的新手,所以如果我跳过了一些明显的步骤或者我的问题不清楚,我深表歉意。
我已经定义了一个服务 game-app-service
和一个部署 game-app-deployment
。这两个都启动了,运行 很好。
我正在尝试将来自 API 网关服务(Ambassador)的请求路由到此服务。当尝试从 Ambassador pod 卷曲游戏应用程序服务端点时,我发现我总是收到空回复并且它连接到一个不是服务 ip 的 IP。但是,如果我用服务的 IP 地址和它正在侦听的端口换出 game-app-service
:
curl -v -X POST 10.102.142.157:8084/api/test
一切正常,我从服务器得到了预期的响应。
我注意到 curl -v -X POST game-app-service/api/test
解析到与 curl -v -X POST random/api/test
相同的 IP – 92.242.140.21 端口 80。这让我相信我的 DNS 解析有问题。但是,我已经验证我的 core-dns pods 已经启动并且 运行,所以我不确定为什么会这样。
下面列出了我的服务和部署的配置以供参考:
apiVersion: v1
kind: Service
metadata:
name: game-app-service
spec:
selector:
app: game-app-deployment
ports:
- protocol: TCP
port: 8084
targetPort: 8084
apiVersion: apps/v1
kind: Deployment
metadata:
name: game-app-deployment
labels:
app: game-app-deployment
spec:
replicas: 2
selector:
matchLabels:
app: game-app-deployment
template:
metadata:
labels:
app: game-app-deployment
spec:
containers:
- name: game-service-app
image: weflop/game-service-app
imagePullPolicy: Never
ports:
- containerPort: 8084
有人知道为什么我不能使用我的服务名称代替 IP 地址吗?
更新:
运行 wget -O- game-service-app
给我的 HTTP 状态为 200,但响应为:
[<=>
] 0 --.-KB/s <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html><head><meta http-equiv="refresh" content="0;url=https://searchassist.verizon.com/main?ParticipantID=euekiz39ksg8nwp7iqj2fp5wzfwi5q76&FailedURI=http%3A%2F%2Fgame-service-app%2F&FailureMode=1&Implementation=&AddInType=4&Version=pywr1.0&ClientLocation=us"/><script type="text/javascript">url="https://searchassist.verizon.com/main?ParticipantID=euekiz39ksg8nwp7iqj2fp5wzfwi5q76&FailedURI=http%3A%2F%2Fgame-service-app%2F&FailureMode=1&Implementation=&AddInType=4&Version=pywr1.0&ClientLocation=us";if(top.location!=location){var w=window,d=document,e=d.documentElement,b=d.body,x=w.innerWidth||e.clientWidth||b.clientWidth,y=w.innerHeight||e.clientHeight||b.clientHeight;url+="&w="+x+"&h="+y;}- [ <=>
表示 DNS 查找失败。
事实证明,问题是我的 API 网关与我的服务位于不同的命名空间中,这导致了问题。通过指定“game-service-app”。每当引用该服务时,我都能解决这个问题。