×

8.3. Публикация веб-приложения из кластера K8s

 
Статья описывает базовый и наглядный способ опубликовать простое веб‑приложение (на примере nginx) из гостевого Kubernetes‑кластера развёрнутого в сервисе DevSpace с использованием сервиса типа LoadBalancer для доступа через внешний IP адрес.
 
Инструкция ориентирована на пользователей начального уровня, которые уже имеют общее представление о Kubernetes.
 
ПРЕДВАРИТЕЛЬНЫЕ УСЛОВИЯ
 
1. У вас уже создано пространство в сервисе DevSpace.
2. В этом пространстве развёрнут гостевой Kubernetes-кластер.
3. У вас есть доступ к кластеру через kubectl (kubeconfig уже получен и настроен).
4. kubectl указывает на нужный контекст:
kubectl config current-context
 
Если контекст неверный — переключитесь на нужный.
 
ЧТО МЫ БУДЕМ ДЕЛАТЬ
 
В рамках статьи мы:
1. Создадим Kubernetes-манифест с:
  • Deploymentдля запуска nginx;
  • Serviceтипа LoadBalancer для публикации приложения наружу.
    2. Применим манифест в гостевом кластере.
    3. Проверим, что сервис получил внешний адрес.
    4. Убедимся, что приложение доступно из браузера.
     
    ШАГ 1. СОЗДАНИЕ МАНИФЕСТА ПРИЛОЖЕНИЯ
     
    Создайте файл public-app.yaml:
    Добавьте в него следующий манифест:
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deploy
  labels:
    app: nginx
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx:1.27
          ports:
            - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: my-app-lb
spec:
  type: LoadBalancer
  selector:
    app: nginx
  ports:
    - port: 80
      targetPort: 80
 
 
Deployment:
  • Запускает 2 реплики контейнера nginx;
  • Использует официальный образ nginx:1.27;
  • Контейнер слушает порт 80.
     
    Service (LoadBalancer):
  • Тип LoadBalancer означает, что платформа DevSpace создаст сетевой балансировщик с внешним IP;
  • Балансировщик будет направлять входящий трафик на Pod’ы nginx;
  • Порт 80 будет доступен извне.
 
ШАГ 2. ПРИМЕНЕНИЕ МАНИФЕСТА
 
Примените манифест в текущем пространстве:
kubectl apply -f public-app.yaml
 
В ответ вы должны увидеть сообщения вида:
deployment.apps/nginx-deploy
created service/my-app-lb created
 
ШАГ 3. ПРОВЕРКА СОСТОЯНИЯ РЕСУРСОВ
 
Проверка Pod’ов
 
Убедитесь, что Pod’ы запущены:
kubectl get pods
 
Ожидаемый результат:
NAME                            READY   STATUS    RESTARTS   AGE
nginx-deploy-xxxxxx-yyyyy       1/1     Running   0          1m
nginx-deploy-xxxxxx-zzzzz       1/1     Running   0          1m
 
Проверка сервиса
 
Проверьте сервис:
kubectl get svc
 
Пример вывода:
NAME        TYPE           CLUSTER-IP      EXTERNAL-IP      PORT(S)        AGE
my-app-lb  LoadBalancer   10.96.123.45     203.0.113.10     80:31234/TCP   1m
 
Важный момент
  • Поле EXTERNAL-IP может появиться не сразу
  • В течение 10–60 секунд статус может быть:
EXTERNAL-IP <pending>
Это нормально — DevSpace в этот момент создаёт балансировщик.
 
ШАГ 4. ДОСТУП К ПРИЛОЖЕНИЮ
 
Когда поле EXTERNAL-IP заполнится:
1. Скопируйте внешний IP
2. Откройте браузер
3. Перейдите по адресу:
http://EXTERNAL-IP
 
Если всё сделано правильно, вы увидите стандартную страницу приветствия nginx.
 
ЧТО ДЕЛАТЬ ДАЛЬШЕ
 
После успешной публикации вы можете:
  • Заменить образ nginx на своё веб-приложение.
  • Масштабировать приложение, изменив replicas.
 
УДАЛЕНИЕ РЕСУРСОВ (ПРИ НЕОБХОДИМОСТИ)
 
Чтобы удалить всё, созданное в этом гайде:
kubectl delete -f public-app.yaml
 
Гайд предназначен как базовая отправная точка для работы с публикацией приложений в DevSpace. Его можно использовать как шаблон для собственных сервисов.