我创建了一个小型java应用程序,手动启动侦听地址127.0.0.1端口8081的jetty服务器。
小型服务器应用程序侦听对子地址/ dockerClient / ping的GET
个请求,并回答“pong”。
我在http://127.0.0.1:8081/dockerClient/ping
上使用SoapUI进行测试,然后我得到了我的乒乓球。
我创建了一个docker镜像,在minikube上部署应用程序并使用以下配置公开服务:
apiVersion: apps/v1
kind: Deployment
metadata:
name: client
labels:
tier: frontend
spec:
replicas: 1
selector:
matchLabels:
tier: frontend
template:
metadata:
labels:
tier: frontend
spec:
containers:
- name: docker-client
image: docker-client
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8081
---
apiVersion: v1
kind: Service
metadata:
name: client-service
labels:
tier: frontend
spec:
type: NodePort
ports:
- port: 8081
protocol: TCP
name: http
selector:
tier: frontend
部署和公开后,我会收到以下信息:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
client-service NodePort 10.107.64.238 <none> 8081:31703/TCP 19m
我尝试使用SoapUI来访问服务: 为此,我使用以下方法检索minikube的IP:
echo $(minikupe ip)
然后,我向GET
尝试http://$(minikube ip):31703/dockerClient/ping
请求,但请求被拒绝。
我试过http://$(minikube ip):8081/dockerClient/ping
,同样。
我做错了什么?如何到达暴露我的ping的jetty服务器?
答案 0 :(得分:1)
在您的服务yml中,您只需告诉端口(它只能在群集中使用),仅在您的minikube外公开您的服务是不够的,您还需要指定targetPort(应该与容器端口匹配,例如8081)和nodePort(它是你可以从localhost ping的端口,例如31081)。
---
apiVersion: v1
kind: Service
metadata:
name: client-service
labels:
tier: frontend
spec:
type: NodePort
ports:
- port: 8081 # access within the cluster
targetPort: 8081 # should match to the container port
nodePort: 31081 # expose outside the cluster and range from 30000 to 32767
protocol: TCP
name: http
selector:
tier: frontend
添加targetPort和nodePort后,您可以通过以下方式获取公共端点:
minikube service client-service --url
P.S。 nodePort是可选的,如果没有指定nodePort,minikube将从该范围分配一个随机端口。
答案 1 :(得分:0)
我认为jetty服务器应该监听地址0.0.0.0。