Развертывание в Kubernetes Docker Image с приложением Frontend + Backend - PullRequest
0 голосов
/ 03 апреля 2020

У меня есть простое приложение, составленное из Express. js в качестве внутреннего API и React. js в качестве клиента Frontend.

Я создаю контейнер для одиночного изображения с внешним и внутренним репозиторием приложений: https://github.com/vitorvr/list-users-kubernetes

Dockerfile:

FROM node:13

WORKDIR /usr/app/listusers

COPY . .

RUN yarn
RUN yarn client-install
RUN yarn client-build

EXPOSE 8080

CMD ["node", "server.js"]

сервер. js

const express = require('express');
const cors = require('cors');
const path = require('path');

const app = express();
const ip = process.env.IP || '0.0.0.0';
const port = process.env.PORT || 8080;

app.use(express.json());
app.use(cors());
app.use(express.static(path.join(__dirname, 'public')));

app.get('/users', (req, res) => {
  res.json([
    { name: 'Jhon', id: 1 },
    { name: 'Ashe', id: 2 }
  ]);
});

app.listen(port, ip, () =>
  console.log(`Server is running at http://${ip}:${port}`)
);

Реактивный вызов:

const api = axios.create({
  baseURL: 'http://0.0.0.0:8080'
});

useEffect(() => {
  async function loadUsers() {
    const response = await api.get('/users');
    if (response.data) {
      setUsers(response.data);
    }
  }
  loadUsers();
}, []);

Для развертывания и запуска этого образа в мини-кубе я использую следующие команды:

kubectl run list-users-kubernetes --image=list-users-kubernetes:1.0 --image-pull-policy=Never
kubectl expose pod list-users-kubernetes --type=LoadBalancer --port=8080
minikube service list-users-kubernetes

Проблема возникает, когда интерфейсный пользователь пытается получить доступ к localhost:

enter image description here

Я не знаю, где мне нужно это исправить, если мне нужно сделать какое-то исправление в React, или сделать некоторые настройки в Kubernetes, или даже это лучшая практика для развертывания небольших приложений в качестве контейнера Изображение в Kubernetes.

Заранее спасибо.

1 Ответ

3 голосов
/ 03 апреля 2020

Вашему узлу Kubernetes, если он работает как виртуальная машина на вашей локальной машине разработки, будет присвоен IP-адрес. Точно так же, когда IP-адрес будет назначен вашему модулю, где работает служба «list-user-kubernetes». Вы можете просмотреть IP-адрес, выполнив следующую команду: kubectl get pod list-users-kubernetes, а для просмотра дополнительной информации добавьте -o wide в конце команды, например. kubectl get pod list-users-kubernetes -o wide.

Кроме того, вы можете сделать переадресацию портов на локальный хост, используя kubectl port-forward pod/POD_NAME POD_PORT:LOCAL_PORT. Пример ниже:

kubectl port-forward pod/list-users-kubernetes 8080:8080 Примечание: Вы должны запустить это как фоновую службу или на другой вкладке в вашем терминале, так как переадресация порта будет доступна, пока выполняется команда.

Я бы порекомендовал использовать второй подход, поскольку ваш внешний IP-адрес для модуля может изменяться во время развертываний, но сопоставление его с localhost позволит вам запустить приложение без внесения изменений в код.

Ссылка на документацию по переадресации портов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...