Я пытаюсь развернуть свое приложение в Digital Ocean с помощью Kubernetes, и я прошел их руководство, но оно не работает. Это мой манифест:
---
kind: Service
apiVersion: v1
metadata:
name: my-app-load-balancer
spec:
type: LoadBalancer
ports:
- protocol: TCP
port: 80
targetPort: 80
selector:
app: my-app
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 1
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-app
image: addamsson/my-app:v6
ports:
- containerPort: 80
Что происходит, так это то, что вместо маршрутизации к 80
порт капли, который он пересылает в случайный порт:
my-app-load-balancer LoadBalancer 10.245.109.64 206.189.247.38 80:32225/TCP 4m1s
Что я делаю не так?
Я попробовал свое приложение локально с помощью Docker, и оно работает, и если я проверю журналы своего модуля, оно также выглядит хорошо:
2020-02-25 14:15:30.105 [main] INFO Application - Responding at http://127.0.0.1:80
Редактировать:
Я попробовал это с изображением, которое, как я знаю, должно работать: springio/gs-spring-boot-docker
и это работает. Но я не понимаю, почему это не работает с моим изображением. Если я проверю журналы, все будет хорошо. У меня проблема в моем Dockerfile
?
FROM openjdk:8-jre-alpine
RUN mkdir /app
COPY ./build/libs/my-app.jar /app/my-app.jar
WORKDIR /app
ENTRYPOINT ["java", "-jar", "my-app.jar"]
Если я запустил .jar
файл на моем компьютере это тоже нормально.
Это правильная конфигурация. Первый порт, показанный в выходных данных, - это значение port
указанный в манифесте службы. Это порт, на котором доступна служба внутри кластера.
Второй порт а NodePort
- порт на каждом узле, на котором эта служба доступна, если тип службы либо NodePort
или LoadBalancer
. Обычно он присваивается системой из диапазона между 30000-32767
. Этот порт можно выбрать вручную, но вы должны учитывать возможную коллизию портов. Это порт, на котором служба доступна на узле. Каждый узел передает этот порт (один и тот же номер на каждом узле) в вашу службу.