Я думаю, что вы можете найти тонны учебных пособий по всему миру об интеграции клиентских веб-приложений в кластере Kubernetes и дальнейшей демонстрации их посетителям сервиса.
На самом деле, приложение, упакованное в среду Docker , должно быть перенесено в конкретное Изображение из Dockerfile или построено в Docker Compose инструмент, чтобы сохранить все сервисные зависимости приложения;когда изображение готово, оно может быть сохранено в общедоступном DockerHub или в изолированном личном реестре , таким образом контейнер Kubernetes runtime затем извлекает это изображение и создает соответствующие рабочие нагрузки ( Модули ) внутри кластера в соответствии с объявленным ресурсом модель .
Я бы порекомендовал следующий сценарий:
Создание образа докера из вашего исходного Dockerfile
(я внес некоторые исправления):
FROM node:8
WORKDIR /usr/src/app
COPY dist/ ./dist/
RUN npm install -g serve
$ sudo docker image build <PATH>
Создать тег , связанный с исходным изображением:
$ sudo docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
Экспортируйте изображение в DockerHub или в какой-либо личный реестр:
$ sudo docker push [OPTIONS] NAME[:TAG]
Создайте соответствующую рабочую нагрузку Kubernetes (Pod) и примените ее вКластер Kubernetes, запускающий Node-сервер внутри контейнера, прослушивающий порт 5000
:
apiVersion: v1
kind: Pod
metadata:
name: nodetest
labels:
node: test
spec:
containers:
- name: node-test
image: TARGET_IMAGE[:TAG]
ports:
- containerPort: 5000
command: [ "/bin/bash", "-ce", "serve -s dist" ]
Если вы хотите представить приложение для внешних клиентов кластера, посмотрите на службу NodePort :
$ kubectl expose po nodetest --port=5000 --target-port=5000 --type=NodePort
Update_1:
Служба приложений может быть доступна на хост-машине в пределах определенного порта, вы можете просто получить это значение порта:
kubectl get svc nodetest -o jsonpath='{.spec.ports[0].nodePort}'
Update_2:
Для предоставления услуги NodePort
на некотором желаемом порту просто примените следующий манифест, приближающийся к назначению порта 30000:
apiVersion: v1
kind: Service
metadata:
labels:
node: test
name: nodetest
spec:
ports:
- nodePort: 30000
port: 5000
protocol: TCP
targetPort: 5000
selector:
node: test
type: NodePort