Как получить доступ к сервису kubernete, запущенному в миникубе с того же компьютера - PullRequest
0 голосов
/ 07 июня 2018

Я создал небольшое java-приложение, которое вручную запускает джет-сервер, прослушивающий адрес 127.0.0.1, порт 8081. Небольшое серверное приложение прослушивает GET запросы к subaddress / dockerClient / ping и отвечает «pong».

Я тестирую с SoapUI на http://127.0.0.1:8081/dockerClient/ping и получаю понг.

Я создаю образ докера, развертываю приложение на миникубе и открываю сервис со следующей конфигурацией:

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 для доступа к службе: для этого я получаю IP-адрес мини-куба, используя:

echo $(minikupe ip)

Затем я пытаюсь GET запросить к http://$(minikube ip):31703/dockerClient/ping, но запрос отклоняется.

Я пытался на http://$(minikube ip):8081/dockerClient/ping, то же самое.

Что мне делатьделать неправильно?Как я могу добраться до сервера Jetty, выставив мой пинг?

Ответы [ 2 ]

0 голосов
/ 07 июня 2018

Я думаю, что сервер Jetty должен слушать адрес 0.0.0.0.

0 голосов
/ 07 июня 2018

В вашем сервисном yml вы просто указываете порт (он может использоваться только внутри кластера), недостаточно выставить свой сервис за пределами вашего мини-куба, вам также нужно указать targetPort (должен соответствовать порту контейнера, например, 8081) и nodePort (это порт, который вы можете пропинговать с localhost, например, 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

PS nodePort не является обязательным, minikube назначит случайный порт из диапазона, если nodePort не был указан.

...