DigitalOcean Kubernetes에서 Eclipse Theia Cloud IDE 플랫폼 설정하기

저자는 자유 및 오픈 소스 기금을(를) 기부를 위한 글쓰기 프로그램의 일환으로 선택했습니다.

소개

개발자 도구가 클라우드로 이동함에 따라 클라우드 IDE(통합 개발 환경) 플랫폼의 생성과 채택이 증가하고 있습니다. 클라우드 IDE는 모든 현대적인 장치에서 웹 브라우저를 통해 접근할 수 있으며 실시간 협업 시나리오에 대한 다양한 장점을 제공합니다. 클라우드 IDE에서 작업하면 팀과 함께 통합 개발 및 테스트 환경을 제공하면서 플랫폼 호환성을 최소화할 수 있습니다. 클라우드 기술을 기반으로 하고 있기 때문에 클러스터를 활용하여 작업을 수행할 수 있으며 이는 단일 개발 컴퓨터의 성능과 신뢰성을 크게 초과할 수 있습니다.

이클립스 테이아는 원격 서버에서 실행되며 웹 브라우저를 통해 접근할 수 있는 확장 가능한 클라우드 IDE입니다. 시각적으로는 마이크로소프트 비주얼 스튜디오 코드와 유사하게 보이고 작동하도록 설계되어 있으며 이는 많은 프로그래밍 언어를 지원하고 유연한 레이아웃 및 통합 터미널을 갖추고 있음을 의미합니다. 다른 클라우드 IDE 소프트웨어와 구분되는 이클립스 테이아의 특징은 확장성입니다. 사용자 정의 확장을 사용하여 필요에 맞는 클라우드 IDE를 만들 수 있습니다.

이 튜토리얼에서는 DigitalOcean Kubernetes 클러스터에서 Eclipse Theia 클라우드 IDE 플랫폼의 기본 버전을 설정하고 도메인에서 노출시키며, Let’s Encrypt 인증서로 보호하고 방문자에게 인증을 요구합니다. 마지막에는 HTTPS를 통해 Kubernetes 클러스터에서 Eclipse Theia가 실행되며 방문자가 로그인해야 합니다.

전제 조건

  • A DigitalOcean Kubernetes cluster with your connection configured as the kubectl default. Instructions on how to configure kubectl are shown under the Connect to your Cluster step when you create your cluster. To create a Kubernetes cluster on DigitalOcean, read the Kubernetes Quickstart.
  • 로컬 머신에 설치된 Helm 3 패키지 관리자. Helm 3 패키지 관리자로 Kubernetes 클러스터에 소프트웨어를 설치하는 방법에 대한 단계 1을 완료하십시오. How To Install Software on Kubernetes Clusters with the Helm 3 Package Manager 튜토리얼을 참조하십시오.
  • 클러스터에 Nginx Ingress Controller가 Helm을 사용하여 설치되어 있어야 ExternalDNS를 Ingress 리소스와 함께 사용할 수 있습니다. 이를 위해 How to Set Up an Nginx Ingress on DigitalOcean Kubernetes Using Helm을(를) 따르십시오.
  • A fully registered domain name. This tutorial will use theia.your_domain throughout. You can purchase a domain name on Namecheap, get one for free on Freenom, or use the domain registrar of your choice.

단계 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라고 하며 Eclipse Theia와 관련된 모든 Kubernetes 객체를 클러스터의 나머지 부분과 분리하여 포함합니다. 배포는 컨테이너에서 노출된 포트 3000의 Theia Docker 이미지의 한 인스턴스로 구성됩니다. 서비스는 배포를 찾고 컨테이너 포트를 보통의 HTTP 포트인 80으로 다시 매핑하여 클러스터 내에서 Eclipse Theia에 액세스할 수 있도록 합니다.

인그레스에는 외부에서 포트 80에서 서비스를 제공하는 규칙이 포함되어 있습니다. 그 주석에서는 요청 처리에 Nginx Ingress 컨트롤러를 사용해야 한다고 지정합니다. 클러스터의 로드 밸런서에 지정한 원하는 도메인인 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 편집기 GUI가 표시됩니다:

DigitalOcean Kubernetes 클러스터에 Eclipse Theia를 배포하고 Ingress를 통해 원하는 도메인에 노출시켰습니다. 다음으로 Eclipse Theia 배포에 대한 액세스를 보안하는 것으로 진행하겠습니다. 로그인 인증을 활성화하겠습니다.

단계 2 — 도메인의 로그인 인증 활성화

이 단계에서는 Eclipse Theia 배포에 대한 사용자 이름 및 암호 인증을 활성화합니다. 먼저 htpasswd 유틸리티를 사용하여 유효한 로그인 조합 목록을 준비한 다음 해당 목록을 포함하는 Kubernetes 시크릿을 생성하고 Ingress를 구성하여 방문자를 그에 따라 인증합니다. 마지막으로 방문자가 유효한 사용자 이름과 암호 조합을 입력할 때만 도메인에 액세스할 수 있습니다. 이렇게 하면 게스트 및 기타 원치 않는 방문자가 Eclipse Theia에 액세스하는 것을 방지할 수 있습니다.

htpasswd 유틸리티는 Apache 웹 서버에서 나온 것으로, 로그인 조합 목록을 저장하는 파일을 만들 때 사용됩니다. htpasswd 파일의 형식은 한 줄에 하나의 username:hashed_password 조합입니다. 이 형식은 Nginx Ingress Controller가 목록이 따르기를 기대하는 형식입니다.

먼저, 패키지 관리자 캐시를 업데이트하세요:

  1. sudo apt update

그런 다음, 다음 명령을 실행하여 시스템에 htpasswd를 설치하세요:

  1. sudo apt install apache2-utils -y

목록을 auth라는 파일에 저장할 것입니다. 다음 명령을 실행하여 파일을 만드세요:

  1. touch auth

이 파일은 auth로 이름을 지정해야 합니다. 왜냐하면 Nginx Ingress Controller가 비밀키에 data.auth라는 키가 포함되어 있다고 예상하기 때문입니다. 이 키가 없으면 컨트롤러가 HTTP 503 Service Unavailable 상태를 반환합니다.

auth에 사용자 이름과 비밀번호 조합을 추가하려면 다음 명령을 실행하세요:

  1. htpasswd auth username

username을 원하는 사용자 이름으로 바꿔야 합니다. 관련된 비밀번호를 입력하라는 메시지가 나오고 조합이 auth 파일에 추가됩니다. 원하는 만큼 이 명령을 반복할 수 있습니다.

참고: 작업 중인 시스템에 htpasswd가 설치되어 있지 않은 경우 도커 버전을 대신 사용할 수 있습니다.

머신에 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

다음으로, Ingress를 수정하여 해당 비밀을 사용하도록 설정해야 합니다. 편집을 위해 배포 구성을 엽니다:

  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

브라우저에서 도메인으로 이동하면 로그인을 요청받게 됩니다.

인그레스에 기본 로그인 인증을 활성화하여 해시된 사용자 이름과 비밀번호 조합이 포함된 시크릿을 사용하도록 구성했습니다. 다음 단계에서는 Eclipse Theia 배포 간의 트래픽이 암호화되도록 TLS 인증서를 추가하여 액세스를 더욱 안전하게 보호할 것입니다.

단계 3 — Let’s Encrypt HTTPS 인증서 적용

다음으로 Ingress에 Let’s Encrypt 인증서를 적용하여 Eclipse Theia 설치를 보호할 것입니다. 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
...

먼저, 선행 조건으로 생성한 letsencrypt-prod 클러스터 발급자를 이 Ingress에 대한 인증서를 제공하는 데 사용할 발급자로 지정합니다. 그런 다음 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

브라우저에서 도메인을 새로 고치세요. 주소 표시줄의 가장 왼쪽에는 연결이 안전하다는 것을 나타내는 녹색 자물쇠가 표시됩니다.

이제 Let’s Encrypt 인증서를 사용하도록 Ingress를 구성했으므로 Eclipse Theia 배포를 보다 안전하게 만들었습니다. 이제 기본 Eclipse Theia 사용자 인터페이스를 검토할 수 있습니다.

단계 4 — Eclipse Theia 인터페이스 사용하기

이 섹션에서는 Eclipse Theia 인터페이스의 일부 기능을 살펴보겠습니다.

IDE의 왼쪽에는 측면 패널에서 가장 일반적으로 사용되는 기능을 열 수 있는 세로로 정렬된 네 개의 버튼이 있습니다.

이 막대는 사용자 정의할 수 있으므로 이러한 뷰를 다른 순서로 이동하거나 막대에서 제거할 수 있습니다. 기본적으로 첫 번째 뷰는 프로젝트 구조의 트리 형태 탐색을 제공하는 탐색기 패널을 엽니다. 여기에서 폴더 및 파일을 만들고 삭제, 이동 및 이름을 바꿀 수 있습니다.

새 파일을 만든 후 파일 메뉴를 통해 새 탭에서 빈 파일이 열립니다. 저장한 후에는 탐색기 측면 패널에서 파일 이름을 볼 수 있습니다. 폴더를 만들려면 탐색기 사이드바에서 오른쪽 버튼을 클릭한 다음 새 폴더를 클릭하십시오. 폴더를 확장하려면 해당 이름을 클릭하거나 파일 및 폴더를 계층 구조의 상위 부분으로 끌어다 놓아 새 위치로 이동할 수 있습니다.

다음 옵션은 검색 및 대체 기능에 액세스할 수 있도록 제공합니다. 그 뒤로, 다음 옵션은 Git과 같은 사용할 수 있는 소스 제어 시스템을 보여줍니다.

다음 뷰는 디버거 옵션으로, 패널에서 디버깅을 위한 모든 일반 작업을 제공합니다. 디버깅 구성은 launch.json 파일에 저장할 수 있습니다.

마지막 옵션은 확장 프로그램을 볼 수 있고 설치할 수 있습니다:

GUI의 중심 부분은 코드 편집을 위한 탭으로 구분할 수 있는 편집기입니다. 편집 보기를 그리드 시스템이나 파일을 옆에 배치하는 방식으로 변경할 수 있습니다. 모든 현대적인 IDE와 마찬가지로 Eclipse Theia는 코드의 구문 강조를 지원합니다.

CTRL+SHIFT+`를 입력하거나 상단 메뉴에서 터미널을 클릭한 다음 새 터미널을 선택하여 터미널에 액세스할 수 있습니다. 터미널은 하단 패널에 열리며 작업 디렉토리는 탐색기 측면 패널에 표시된 파일과 폴더가 포함된 프로젝트 작업 영역으로 설정됩니다.

클러스터에서 Eclipse Theia 배포를 제거하려면 다음 명령을 실행하십시오:

  1. kubectl delete -f eclipse-theia.yaml

당신은 이클립스 테이아 인터페이스의 고수준 개요를 탐색하고 가장 일반적으로 사용되는 기능 중 일부를 검토했습니다.

결론

이제 DigitalOcean Kubernetes 클러스터에 다재다능한 클라우드 IDE인 Eclipse Theia를 설치했습니다. 무료 Let’s Encrypt TLS 인증서로 보안을 강화했으며 방문자로부터 로그인을 요구하는 인스턴스를 설정했습니다. 이를 사용하여 소스 코드와 문서를 개별적으로 작업하거나 팀원과 협업할 수 있습니다. 또한 필요한 기능이 있을 경우 자체 Eclipse Theia 버전을 빌드해 볼 수도 있습니다. 이에 대한 자세한 정보는 Theia docs를 방문하십시오.

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