【发布时间】:2019-11-19 17:18:39
【问题描述】:
我是 Kubernetes 新手,我正在尝试创建一个简单的前端后端应用程序,其中前端和后端将拥有自己的服务。由于某种原因,我无法通过前端服务的名称访问后端服务。
正因为简单,前端服务可以这样创建:kubectl run curl --image=radial/busyboxplus:curl -i --tty
当我执行 nslookup 时,我得到以下信息:
[ root@curl-66bdcf564-rbx2k:/ ]$ nslookup msgnc-travel
Server: 10.96.0.10
Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local
Name: msgnc-travel
Address 1: 10.100.171.209 msgnc-travel.default.svc.cluster.local
服务的名称是 msgnc-travel,但是当我尝试 curl 时:curl msgnc-travel
它只是继续等待,没有收到任何回应。我也试过 curl 10.100.171.209 和 curl msgnc-travel.default.svc.cluster.local 但我有同样的行为
任何想法为什么会出现这个问题?
我已经成功地通过使用 Ingress 做了一个“解决方法”,但我很好奇为什么我不能只通过提供它的名称来直接访问我的 Spring Boot 后端服务?
deployment.yml 看起来像这样:
apiVersion: apps/v1
kind: Deployment
metadata:
name: msgnc-travel-deployment
labels:
name: msgnc-travel-deployment
app: msgnc-travel-app
spec:
template:
metadata:
name: msgnc-travel-pod
labels:
name: msgnc-travel-pod
app: msgnc-travel-app
spec:
containers:
- name: msgnc-travel
image: bdjordjevic/msgnc-travel
ports:
- containerPort: 8080
replicas: 1
selector:
matchExpressions:
- {key: name, operator: In, values: [msgnc-travel-pod]}
- {key: app, operator: In, values: [msgnc-travel-app]}
service.yml 如下所示:
apiVersion: v1
kind: Service
metadata:
name: msgnc-travel
labels:
name: msgnc-travel-service
app: msgnc-travel-app
spec:
ports:
- port: 8080
targetPort: 8080
selector:
name: msgnc-travel-pod
app: msgnc-travel-app
【问题讨论】:
-
你的
curl很奇怪。由于curl发送 http 请求,因此您必须提供 curl 目标的主机名和端口,而不仅仅是主机名。 -
你是完全正确的,在端口 8080 上它就像一个魅力!谢谢!
标签: spring-boot kubernetes microservices