如何从同一台计算机到达minikube运行的kubernete服务

时间:2018-06-07 08:55:29

标签: kubernetes embedded-jetty minikube

我创建了一个小型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服务器?

2 个答案:

答案 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。