Как настроить платформу Eclipse Theia Cloud IDE на DigitalOcean Kubernetes

Автор выбрал Фонд свободного и открытого исходного кода для получения пожертвования в рамках программы Написать в обмен на пожертвования.

Введение

С развитием облачных технологий инструменты разработки переходят в облако, и растет создание и принятие платформ облачных сред разработки (Cloud IDE). Облачные среды разработки доступны с любого современного устройства через веб-браузеры и предлагают множество преимуществ для сценариев совместной работы в реальном времени. Работа в облачной среде разработки обеспечивает единое рабочее и тестовое окружение для вас и вашей команды, минимизируя несовместимости платформ. Поскольку они нативно основаны на облачных технологиях, они могут использовать кластер для выполнения задач, что может значительно превзойти мощность и надежность одного компьютера для разработки.

Eclipse Theia – это расширяемая облачная среда разработки, работающая на удаленном сервере и доступная через веб-браузер. Визуально она спроектирована так, чтобы выглядеть и вести себя аналогично Microsoft Visual Studio Code, что означает, что она поддерживает множество языков программирования, имеет гибкую структуру и интегрированный терминал. То, что отличает Eclipse Theia от другого программного обеспечения для облачных сред разработки, – это его расширяемость; его можно модифицировать с помощью пользовательских расширений, которые позволяют создавать облачные среды разработки, подходящие под ваши потребности.

В этом руководстве вы настроите версию Eclipse Theia облачной среды IDE на вашем кластере Kubernetes DigitalOcean и опубликуете ее на вашем домене, обеспечив безопасность с помощью сертификатов Let’s Encrypt и требования аутентификации посетителя. В конце у вас будет запущен Eclipse Theia на вашем кластере Kubernetes, доступный через HTTPS и требующий входа посетителя.

Предварительные требования

Шаг 1 — Установка и Публикация Eclipse Theia

Для начала установите Eclipse Theia на свой кластер DigitalOcean Kubernetes. Затем вы сможете предоставить доступ к нему через выбранный вами домен, используя Nginx Ingress.

Поскольку вы создали два примера развертываний и ресурс как часть предварительных условий, вы можете свободно удалить их, выполнив следующие команды:

  1. kubectl delete -f hello-kubernetes-ingress.yaml
  2. kubectl delete -f hello-kubernetes-first.yaml
  3. kubectl delete -f hello-kubernetes-second.yaml

Для этого учебного пособия вы сохраните конфигурацию развертывания на своем локальном компьютере в файле с именем eclipse-theia.yaml. Создайте его, используя следующую команду:

  1. nano eclipse-theia.yaml

Добавьте следующие строки в файл:

eclipse-theia.yaml
apiVersion: v1
kind: Namespace
metadata:
  name: theia
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: theia-next
  namespace: theia
spec:
  ingressClassName: nginx
  rules:
  - host: theia.your_domain
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: theia-next
            port:
              number: 80
---
apiVersion: v1
kind: Service
metadata:
 name: theia-next
 namespace: theia
spec:
 ports:
 - port: 80
   targetPort: 3000
 selector:
   app: theia-next
---
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: theia-next
  name: theia-next
  namespace: theia
spec:
  selector:
    matchLabels:
      app: theia-next
  replicas: 1
  template:
    metadata:
      labels:
        app: theia-next
    spec:
      containers:
      - image: francoisvans/theia-docker-test
        imagePullPolicy: Always
        name: theia-next
        ports:
        - containerPort: 3000

Эта конфигурация определяет пространство имен, развертывание, службу и вход. Пространство имен называется theia и будет содержать все объекты Kubernetes, связанные с Eclipse Theia, отделенные от остального кластера. Развертывание состоит из одного экземпляра образа Docker Theia с открытым портом 3000 в контейнере. Служба ищет развертывание и переназначает порт контейнера на обычный HTTP-порт, 80, что позволяет получать доступ к Eclipse Theia внутри кластера.

Во входе содержится правило для обслуживания службы на внешнем порту 80 по вашему выбранному домену. В ее аннотациях вы указываете, что для обработки запросов должен использоваться контроллер входа Nginx. Не забудьте заменить theia.your_domain на ваш выбранный домен, который вы настроили для балансировщика нагрузки кластера, затем сохраните и закройте файл.

Сохраните и закройте файл.

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

  1. kubectl apply -f eclipse-theia.yaml

Вывод будет похож на следующий:

Output
namespace/theia created ingress.networking.k8s.io/theia-next created service/theia-next created deployment.apps/theia-next created

Вы можете просмотреть создание контейнера Eclipse Theia, запустив:

  1. kubectl get pods -w -n theia

Вывод будет выглядеть следующим образом:

Output
NAME READY STATUS RESTARTS AGE theia-next-6f6b98dd4f-qknhb 1/1 Running 0 2m30s

Через некоторое время статус изменится на RUNNING, что означает успешную установку Eclipse Theia в ваш кластер.

Перейдите на свой домен в браузере. Вы увидите интерфейс редактора Eclipse Theia по умолчанию:

Вы развернули Eclipse Theia на своем кластере Kubernetes DigitalOcean и открыли его на выбранном вами домене с помощью Ingress. Затем вы обеспечите безопасный доступ к развертыванию Eclipse Theia, включив аутентификацию при входе.

Шаг 2 — Включение аутентификации при входе для вашего домена

На этом этапе вы включите аутентификацию по имени пользователя и паролю для развертывания Eclipse Theia. Для этого сначала составите список допустимых комбинаций логинов с паролями, используя утилиту htpasswd. Затем вы создадите секрет Kubernetes, содержащий этот список, и настроите Ingress для аутентификации посетителей в соответствии с ним. В результате ваш домен будет доступен только при вводе посетителем допустимой комбинации имени пользователя и пароля. Это предотвратит доступ гостей и других нежелательных посетителей к Eclipse Theia.

Утилита htpasswd происходит из веб-сервера Apache и используется для создания файлов, в которых хранятся списки комбинаций логинов. Формат файлов htpasswd представляет собой одну комбинацию имя_пользователя:хешированный_пароль на строку, который ожидает контроллер входа Nginx, чтобы список соответствовал.

Сначала обновите кеш менеджера пакетов:

  1. sudo apt update

Затем установите htpasswd на свою систему, выполнив следующую команду:

  1. sudo apt install apache2-utils -y

Вы будете хранить список в файле с именем auth. Создайте его, выполнив:

  1. touch auth

Этот файл должен иметь имя auth, потому что контроллер входа Nginx ожидает, что секрет будет содержать ключ с именем data.auth. Если его нет, контроллер вернет HTTP 503 статус Сервис недоступен.

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

  1. htpasswd auth username

Не забудьте заменить имя_пользователя на ваше желаемое имя пользователя. Вам будет предложено ввести сопровождающий пароль, и комбинация будет добавлена в файл auth. Вы можете повторить эту команду для добавления стольких пользователей, сколько вам нужно.

Примечание: Если на системе, с которой вы работаете, не установлен htpasswd, вы можете вместо этого использовать версию в Docker.

Вам нужно будет установить Docker на своем компьютере. Для инструкций, как это сделать, посетите официальную документацию.

Выполните следующую команду для запуска Docker-версии:

  1. docker run --rm -it httpd htpasswd -n <username>

Не забудьте заменить <username> на имя пользователя, которое вы хотите использовать. Вас попросят ввести пароль. Хэшированная комбинация для входа будет выведена на консоль, и вам нужно будет вручную добавить ее в конец файла auth. Повторите этот процесс для стольких входов, сколько вы хотите добавить.

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

  1. kubectl create secret generic theia-basic-auth --from-file=auth -n theia

Вы можете увидеть секрет с помощью:

  1. kubectl get secret theia-basic-auth -o yaml -n theia

Вывод будет выглядеть так:

Output
apiVersion
: v1 data: auth: ... kind: Secret metadata: creationTimestamp: "2021-12-31T17:16:29Z" name: theia-basic-auth namespace: theia resourceVersion: "32437" uid: 47461e23-e281-411b-acfd-cea82fcde41b type: Opaque

Затем вам нужно отредактировать вход, чтобы он использовал секрет. Откройте конфигурацию развертывания для редактирования:

  1. nano eclipse-theia.yaml

Добавьте выделенные строки в ваш файл:

eclipse-theia.yaml
apiVersion: v1
kind: Namespace
metadata:
  name: theia
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: theia-next
  namespace: theia
  annotations:
    nginx.ingress.kubernetes.io/auth-type: basic
    nginx.ingress.kubernetes.io/auth-secret: theia-basic-auth
    nginx.ingress.kubernetes.io/auth-realm: 'Authentication Required - Eclipse Theia'
spec:
  ingressClassName: nginx
  rules:
  - host: theia.your_domain
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: theia-next
            port:
              number: 80
...

Сначала в аннотации auth-type вы указываете, что тип аутентификации – basic. Это означает, что Nginx потребует от пользователя ввести имя пользователя и пароль. Затем в auth-secret вы указываете, что секрет, который содержит список допустимых комбинаций, – theia-basic-auth, который вы только что создали. Оставшаяся аннотация auth-realm указывает сообщение, которое будет показано пользователю в качестве объяснения того, почему требуется аутентификация. Вы можете изменить сообщение, содержащееся в этом поле, по своему усмотрению.

Сохраните и закройте файл.

Чтобы распространить изменения на ваш кластер, выполните следующую команду:

  1. kubectl apply -f eclipse-theia.yaml

Вы увидите вывод:

Output
namespace/theia unchanged ingress.networking.k8s.io/theia-next configured service/theia-next unchanged deployment.apps/theia-next unchanged

Перейдите на свой домен в браузере, где вас теперь попросят войти в систему.

Вы включили базовую аутентификацию при входе на свой вход, настроив его на использование секрета, содержащего хешированные комбинации имени пользователя и пароля. В следующем шаге вы дополнительно обеспечите безопасность доступа, добавив TLS-сертификаты, чтобы трафик между вами и вашим развертыванием Eclipse Theia оставался зашифрованным.

Шаг 3 — Применение сертификатов HTTPS Let’s Encrypt

Затем вы обеспечите защиту вашей установки Eclipse Theia, применив сертификаты Let’s Encrypt к вашему входу, который Cert-Manager автоматически создаст. После завершения этого шага ваша установка Eclipse Theia будет доступна через HTTPS.

Откройте eclipse-theia.yaml для редактирования:

  1. nano eclipse-theia.yaml

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

eclipse-theia.yaml
apiVersion: v1
kind: Namespace
metadata:
  name: theia
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: theia-next
  namespace: theia
  annotations:
    nginx.ingress.kubernetes.io/auth-type: basic
    nginx.ingress.kubernetes.io/auth-secret: theia-basic-auth
    nginx.ingress.kubernetes.io/auth-realm: 'Authentication Required - Eclipse Theia'
    cert-manager.io/cluster-issuer: letsencrypt-prod
spec:
  tls:
  - hosts:
    - theia.your_domain
    secretName: theia-prod
  ingressClassName: nginx
  rules:
  - host: theia.your_domain
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: theia-next
            port:
              number: 80
...

Сначала вы указываете ClusterIssuer letsencrypt-prod, который вы создали в рамках предварительных требований, как издателя, который будет использоваться для предоставления сертификатов для этого входа. Затем в разделе tls вы указываете точный домен, который должен быть защищен, а также имя для секрета, который будет содержать эти сертификаты.

Сохраните и закройте файл.

Примените изменения к вашему кластеру, запустив следующую команду:

  1. kubectl apply -f eclipse-theia.yaml

Вывод будет выглядеть следующим образом:

Output
namespace/theia unchanged ingress.networking.k8s.io/theia-next configured service/theia-next unchanged deployment.apps/theia-next unchanged

Потребуется несколько минут для предоставления и полного применения сертификатов. Вы можете отслеживать прогресс, наблюдая за выводом следующей команды:

  1. kubectl describe certificate theia-prod -n theia

Когда она завершится, конец вывода будет выглядеть примерно так:

Output
... Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal GeneratedKey 42m cert-manager Generated a new private key Normal Requested 42m cert-manager Created new CertificateRequest resource "theia-prod-3785736528" Normal Issued 42m cert-manager Certificate issued successfully

Обновите свой домен в браузере. Вы увидите зеленый замочек, отображаемый на крайней левой стороне строки адреса, что означает, что соединение безопасно.

Вы настроили Ingress на использование сертификатов Let’s Encrypt, тем самым обеспечив более высокий уровень безопасности для вашего развертывания Eclipse Theia. Теперь вы можете ознакомиться с интерфейсом пользователя Eclipse Theia по умолчанию.

Шаг 4 — Использование интерфейса Eclipse Theia

В этом разделе вы изучите некоторые функции интерфейса Eclipse Theia.

Слева в IDE есть вертикальная строка из четырех кнопок, открывающих наиболее часто используемые функции в боковой панели.

Эта панель настраиваема, поэтому вы можете перемещать эти виды в другой порядок или удалять их из панели. По умолчанию первый вид открывает панель “Проводник”, которая обеспечивает древовидную навигацию по структуре проекта. Здесь вы можете управлять своими папками и файлами — создавать, удалять, перемещать и переименовывать их при необходимости.

После создания нового файла через меню Файл вы увидите пустой файл, открытый в новой вкладке. После сохранения вы сможете увидеть имя файла в боковой панели Проводника. Чтобы создать папки, щелкните правой кнопкой мыши на боковой панели Проводника и выберите Новая папка. Вы можете развернуть папку, щелкнув по ее имени, а также перетаскивать файлы и папки в верхние части иерархии, чтобы переместить их в новое место.

Следующий параметр предоставляет доступ к функциональности поиска и замены. После этого следующий предоставляет вид систем управления исходным кодом, которые вы можете использовать, такие как Git.

Следующий вид – это опция отладчика, который предоставляет все общие действия для отладки в панели. Вы можете сохранять конфигурации отладки в файле launch.json.

Последний параметр позволяет просматривать и устанавливать расширения:

Центральная часть графического интерфейса пользователя – это ваш редактор, который вы можете разделить на вкладки для редактирования кода. Вы можете изменить вид редактора на сетку или на файлы рядом. Как и все современные среды разработки, Eclipse Theia поддерживает подсветку синтаксиса для вашего кода.

Вы можете получить доступ к терминалу, нажав CTRL+SHIFT+` , или щелкнув по Терминалу в верхнем меню и выбрав Новый терминал. Терминал откроется в нижней панели, и его рабочий каталог будет установлен в рабочее пространство проекта, которое содержит файлы и папки, отображаемые в боковой панели Проводника.

Если вы хотите удалить развертывание Eclipse Theia на вашем кластере, выполните следующую команду:

  1. kubectl delete -f eclipse-theia.yaml

Вы изучили общий обзор интерфейса Eclipse Theia и ознакомились с некоторыми из наиболее часто используемых функций.

Заключение

Теперь у вас есть Eclipse Theia, универсальная облачная IDE, установленная на вашем кластере DigitalOcean Kubernetes. Вы обеспечили ее бесплатным сертификатом TLS Let’s Encrypt и настроили экземпляр для требования входа посетителя. Вы можете работать с исходным кодом и документами индивидуально или сотрудничать с вашей командой. Вы также можете попробовать создать свою собственную версию Eclipse Theia, если вам нужна дополнительная функциональность. Для получения дополнительной информации о том, как это сделать, посетите документацию Theia.

Source:
https://www.digitalocean.com/community/tutorials/how-to-set-up-the-eclipse-theia-cloud-ide-platform-on-digitalocean-kubernetes