Como configurar a plataforma Eclipse Theia Cloud IDE no Kubernetes da DigitalOcean

O autor selecionou o Fundo de Software Livre e de Código Aberto para receber uma doação como parte do programa Write for DOnations.

Introdução

Com as ferramentas de desenvolvimento migrando para a nuvem, a criação e adoção de plataformas de IDE (Ambiente de Desenvolvimento Integrado) na nuvem estão crescendo. As IDEs na nuvem são acessíveis a partir de todos os tipos de dispositivos modernos através de navegadores da web e oferecem inúmeras vantagens para cenários de colaboração em tempo real. Trabalhar em uma IDE na nuvem oferece um ambiente unificado de desenvolvimento e teste para você e sua equipe, enquanto minimiza incompatibilidades de plataforma. Por serem baseadas nativamente em tecnologias de nuvem, elas podem aproveitar o cluster para realizar tarefas, o que pode exceder significativamente a potência e confiabilidade de um único computador de desenvolvimento.

O Eclipse Theia é uma IDE na nuvem extensível que roda em um servidor remoto e é acessível a partir de um navegador da web. Visualmente, é projetado para se parecer e se comportar de maneira semelhante ao Microsoft Visual Studio Code, o que significa que suporta muitas linguagens de programação, tem um layout flexível e possui um terminal integrado. O que diferencia o Eclipse Theia de outros softwares de IDE na nuvem é sua extensibilidade; ele pode ser modificado usando extensões personalizadas, que permitem criar uma IDE na nuvem adequada às suas necessidades.

Neste tutorial, você configurará a versão padrão da plataforma de IDE em nuvem Eclipse Theia em seu cluster Kubernetes do DigitalOcean e a exporá em seu domínio, protegida com certificados Let’s Encrypt e exigindo autenticação do visitante. No final, você terá o Eclipse Theia em execução em seu cluster Kubernetes disponível via HTTPS e exigindo que o visitante faça login.

Pré-requisitos

Passo 1 — Instalando e Expondo o Eclipse Theia

Para começar, você irá instalar o Eclipse Theia no seu cluster Kubernetes da DigitalOcean. Em seguida, você irá expô-lo em seu domínio desejado usando um Nginx Ingress.

Como você criou dois exemplos de implantações e um recurso como parte dos pré-requisitos, você pode excluí-los livremente executando os seguintes comandos:

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

Para este tutorial, você irá armazenar a configuração de implantação em sua máquina local, em um arquivo chamado eclipse-theia.yaml. Crie-o usando o seguinte comando:

  1. nano eclipse-theia.yaml

Adicione as seguintes linhas ao arquivo:

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

Esta configuração define um Namespace, uma Implantação, um Serviço e um Ingresso. O Namespace é chamado theia e conterá todos os objetos Kubernetes relacionados ao Eclipse Theia, separados do restante do cluster. A Implantação consiste em uma instância da imagem Docker Theia com a porta 3000 exposta no contêiner. O Serviço procura a Implantação e remapeia a porta do contêiner para a porta HTTP usual, 80, permitindo acesso no-cluster ao Eclipse Theia.

O Ingresso contém uma regra para servir o Serviço na porta 80 externamente em seu domínio desejado. Em suas anotações, você especifica que o Controlador de Ingresso Nginx deve ser usado para o processamento de solicitações. Lembre-se de substituir theia.seu_domínio pelo seu domínio desejado que você apontou para o Balanceador de Carga do seu cluster, depois salve e feche o arquivo.

Salve e saia do arquivo.

Em seguida, crie a configuração no Kubernetes executando o seguinte comando:

  1. kubectl apply -f eclipse-theia.yaml

A saída será semelhante a esta:

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

Você pode assistir à criação do pod do Eclipse Theia executando:

  1. kubectl get pods -w -n theia

A saída será semelhante a esta:

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

Após algum tempo, o status mudará para RUNNING, o que significa que você instalou com sucesso o Eclipse Theia no seu cluster.

Acesse o seu domínio no seu navegador. Você verá a interface gráfica padrão do editor Eclipse Theia:

Você implantou o Eclipse Theia no seu cluster Kubernetes da DigitalOcean e o expôs no seu domínio desejado com um Ingress. Em seguida, você garantirá o acesso seguro à implantação do Eclipse Theia ativando a autenticação de login.

Passo 2 — Habilitando a Autenticação de Login Para o Seu Domínio

Neste passo, você habilitará a autenticação de nome de usuário e senha para a sua implantação do Eclipse Theia. Você conseguirá isso primeiro, criando uma lista de combinações de login válidas usando o utilitário htpasswd. Em seguida, você criará um segredo do Kubernetes contendo essa lista e configurará o Ingress para autenticar os visitantes de acordo com ela. No final, o seu domínio só será acessível quando o visitante inserir uma combinação válida de nome de usuário e senha. Isso impedirá que convidados e outros visitantes indesejados acessem o Eclipse Theia.

O utilitário htpasswd vem do servidor web Apache e é usado para criar arquivos que armazenam listas de combinações de login. O formato dos arquivos htpasswd é uma combinação username:hashed_password por linha, que é o formato que o Controlador de Ingresso do Nginx espera que a lista siga.

Primeiro, atualize o cache do gerenciador de pacotes:

  1. sudo apt update

Em seguida, instale o htpasswd no seu sistema executando o seguinte comando:

  1. sudo apt install apache2-utils -y

Você irá armazenar a lista em um arquivo chamado auth. Crie-o executando:

  1. touch auth

Este arquivo precisa se chamar auth porque o Controlador de Ingresso do Nginx espera que o segredo contenha uma chave chamada data.auth. Se estiver faltando, o controlador retornará o status HTTP 503 Service Unavailable.

Adicione uma combinação de nome de usuário e senha ao auth executando o seguinte comando:

  1. htpasswd auth username

Lembre-se de substituir username pelo nome de usuário desejado. Você será solicitado a fornecer uma senha acompanhante e a combinação será adicionada ao arquivo auth. Você pode repetir este comando para quantos usuários desejar adicionar.

Observação: Se o sistema em que você está trabalhando não tiver o htpasswd instalado, você pode usar uma versão Dockerizada em vez disso.

Você precisará ter o Docker instalado em sua máquina. Para instruções sobre como fazer isso, visite a documentação oficial.

Execute o seguinte comando para executar uma versão dockerizada:

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

Lembre-se de substituir <username> pelo nome de usuário que deseja usar. Você será solicitado a fornecer uma senha. A combinação de login hash será escrita no console, e você precisará adicioná-la manualmente ao final do arquivo auth. Repita este processo para quantos logins desejar adicionar.

Quando terminar, crie um novo segredo no Kubernetes com o conteúdo do arquivo executando o seguinte comando:

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

Você pode ver o segredo com:

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

A saída será semelhante a:

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

Em seguida, você precisará editar o Ingress para fazê-lo usar o segredo. Abra a configuração de implantação para edição:

  1. nano eclipse-theia.yaml

Adicione as linhas destacadas ao seu arquivo:

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
...

Primeiro, na anotação auth-type, você especifica que o tipo de autenticação é basic. Isso significa que o Nginx exigirá que o usuário digite um nome de usuário e uma senha. Em seguida, em auth-secret, você especifica que o segredo que contém a lista de combinações válidas é theia-basic-auth, que acabou de ser criado. A anotação auth-realm restante especifica uma mensagem que será mostrada ao usuário como uma explicação do motivo pelo qual a autenticação é necessária. Você pode alterar a mensagem contida neste campo conforme desejar.

Salve e feche o arquivo.

Para propagar as alterações para seu cluster, execute o seguinte comando:

  1. kubectl apply -f eclipse-theia.yaml

Você verá a saída:

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

Navegue até seu domínio em seu navegador, onde agora será solicitado que faça o login.

Você ativou a autenticação básica de login no seu Ingress configurando-o para usar o segredo contendo as combinações de nome de usuário e senha criptografadas. No próximo passo, você irá garantir o acesso ainda mais adicionando certificados TLS, para que o tráfego entre você e sua implantação do Eclipse Theia permaneça criptografado.

Passo 3 — Aplicando Certificados HTTPS Let’s Encrypt

Em seguida, você irá garantir a instalação do seu Eclipse Theia aplicando certificados Let’s Encrypt ao seu Ingress, que o Cert-Manager irá provisionar automaticamente. Após concluir este passo, sua instalação do Eclipse Theia estará acessível via HTTPS.

Abra o arquivo eclipse-theia.yaml para edição:

  1. nano eclipse-theia.yaml

Adicione as linhas destacadas ao seu arquivo, garantindo substituir o domínio marcador de posição pelo seu próprio:

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
...

Primeiro, você especifica o letsencrypt-prod ClusterIssuer que você criou como parte dos pré-requisitos como o emissor que será usado para provisionar certificados para este Ingress. Em seguida, na seção tls, você especifica o domínio exato que deve ser seguro, bem como um nome para um segredo que conterá esses certificados.

Salve e saia do arquivo.

Aplique as alterações ao seu cluster executando o seguinte comando:

  1. kubectl apply -f eclipse-theia.yaml

A saída será parecida com:

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

Levará alguns minutos para que os certificados sejam provisionados e totalmente aplicados. Você pode acompanhar o progresso observando a saída do seguinte comando:

  1. kubectl describe certificate theia-prod -n theia

Quando terminar, o final da saída se parecerá com isso:

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

Atualize seu domínio no seu navegador. Você verá um cadeado verde mostrado no lado mais à esquerda da barra de endereço, significando que a conexão é segura.

Você configurou o Ingress para usar certificados Let’s Encrypt, tornando assim sua implantação do Eclipse Theia mais segura. Agora você pode revisar a interface de usuário padrão do Eclipse Theia.

Passo 4 — Usando a Interface do Eclipse Theia

Nesta seção, você explorará algumas das características da interface do Eclipse Theia.

No lado esquerdo do IDE, há uma fila vertical de quatro botões que abrem as características mais comumente usadas em um painel lateral.

Esta barra é personalizável, então você pode mover essas visualizações para uma ordem diferente ou removê-las da barra. Por padrão, a primeira visualização abre o painel do Explorer que fornece navegação semelhante a uma árvore da estrutura do projeto. Você pode gerenciar suas pastas e arquivos aqui — criando, excluindo, movendo e renomeando-os conforme necessário.

Depois de criar um novo arquivo através do menu Ficheiro, você verá um arquivo vazio aberto em uma nova guia. Uma vez salvo, você pode ver o nome do arquivo no painel lateral do Explorador. Para criar pastas, clique com o botão direito no painel lateral do Explorador e clique em Nova Pasta. Você pode expandir uma pasta clicando em seu nome, bem como arrastar e soltar arquivos e pastas para partes superiores da hierarquia para movê-los para uma nova localização.

A próxima opção fornece acesso à funcionalidade de pesquisa e substituição. A seguir, a próxima opção fornece uma visão dos sistemas de controle de origem que você pode estar usando, como Git.

A próxima visualização é a opção de depuração, que fornece todas as ações comuns para depuração no painel. Você pode salvar configurações de depuração no arquivo launch.json.

A opção final permite visualizar e instalar extensões:

A parte central da GUI é o seu editor, que você pode separar por guias para a edição do seu código. Você pode alterar a visualização da edição para um sistema de grade ou para arquivos lado a lado. Como todas as IDEs modernas, o Eclipse Theia suporta realce de sintaxe para o seu código.

Você pode acessar um terminal digitando CTRL+SHIFT+`, ou clicando em Terminal no menu superior, e selecionando Novo Terminal. O terminal será aberto em um painel inferior e seu diretório de trabalho será definido para o espaço de trabalho do projeto, que contém os arquivos e pastas mostrados no painel lateral do Explorador.

Se desejar destruir a implantação do Eclipse Theia em seu cluster, execute o seguinte comando:

  1. kubectl delete -f eclipse-theia.yaml

Você explorou uma visão geral de alto nível da interface do Eclipse Theia e revisou algumas das funcionalidades mais comumente usadas.

Conclusão

Agora você tem o Eclipse Theia, uma IDE em nuvem versátil, instalada em seu cluster DigitalOcean Kubernetes. Você a segurou com um certificado TLS gratuito do Let’s Encrypt e configurou a instância para exigir um login do visitante. Você pode trabalhar em seu código-fonte e documentos individualmente ou colaborar com sua equipe. Você também pode tentar criar sua própria versão do Eclipse Theia se precisar de funcionalidades adicionais. Para obter mais informações sobre como fazer isso, visite a documentação do Theia.

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