如何在DigitalOcean Kubernetes上设置Eclipse Theia Cloud IDE平台

作者選擇了自由開源基金作為為捐贈而寫計劃的捐贈對象。

介紹

隨著開發者工具轉移到雲端,雲端集成開發環境(IDE)平台的創建和採用正在增長。雲端IDE可以從現代各種類型的設備通過網絡瀏覽器訪問,並且在實時協作場景中提供了眾多優勢。在雲端IDE中工作為您和您的團隊提供了統一的開發和測試環境,同時最大程度地減少了平台不兼容性。由於它們是基於雲技術的,因此它們能夠利用集群來完成任務,這可以大大超過單個開發計算機的功率和可靠性。

Eclipse Theia是一款可擴展的雲端IDE,運行在遠程服務器上,可以通過網絡瀏覽器訪問。在視覺上,它設計成與Microsoft Visual Studio Code類似的外觀和行為,這意味著它支持許多編程語言,具有靈活的布局和集成終端。Eclipse Theia與其他雲端IDE軟件的區別在於它的可擴展性;它可以使用自定義擴展進行修改,使您能夠打造出適合您需求的雲端IDE。

在本教程中,您將在您的DigitalOcean Kubernetes集群上設置Eclipse Theia雲IDE平台的默認版本,並將其公開在您的域上,使用Let’s Encrypt證書進行保護,並要求訪問者進行身份驗證。最終,您將在您的Kubernetes集群上運行Eclipse Theia,通過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

此配置定義了一個命名空間、一個部署、一個服務和一個 Ingress。命名空間被稱為 theia,並且將包含與 Eclipse Theia 相關的所有 Kubernetes 物件,與集群的其餘部分分開。部署包含一個 Theia Docker 映像的實例,容器上暴露端口 3000。服務尋找部署並重新映射容器端口到通常的 HTTP 端口 80,允許在集群內訪問 Eclipse Theia。

Ingress 包含一個規則,將服務外部的端口 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 Pod 的創建:

  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:

您已將 Eclipse Theia 部署到了您的 DigitalOcean Kubernetes 叢集並通過 Ingress 將其暴露在您所需的域名下。接下來,您將通過啟用登錄驗證來保護對 Eclipse Theia 的訪問。

步驟 2 — 啟用您域名的登錄驗證

在此步驟中,您將為 Eclipse Theia 部署啟用用戶名和密碼驗證。您將首先使用 htpasswd 實用程序編輯一個有效登錄組合的列表。然後,您將創建一個包含該列表的 Kubernetes 密鑰,並配置 Ingress 以根據該列表對訪問者進行驗證。最終,只有在訪問者輸入有效的用戶名和密碼組合時,您的域名才可訪問。這將防止訪客和其他不需要的訪問者訪問 Eclipse Theia。

htpasswd 工具來自 Apache web 伺服器,用於創建存儲登錄組合列表的文件。 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 化的版本。

您需要在您的機器上安裝 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

接下來,您需要編輯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

在瀏覽器中導航到您的域,您現在將被要求登錄。

您已經通過配置使用包含雜湊用戶名和密碼組合的秘密來啟用Ingress的基本登錄身份驗證。在下一步中,您將通過添加TLS憑證進一步保護訪問,從而使您和您的Eclipse Theia部署之間的流量保持加密。

步驟3 — 應用Let’s Encrypt HTTPS憑證

接下來,您將通過將Let’s Encrypt憑證應用於您的Ingress來保護您的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 ClusterIssuer作為將用於為此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

在瀏覽器中刷新您的域名。您將在地址欄的最左側看到一個綠色的小鎖,表示連接是安全的。

您已配置Ingress使用Let’s Encrypt證書,從而使您的Eclipse Theia部署更加安全。現在您可以查看默認的Eclipse Theia用戶界面。

第四步 – 使用Eclipse Theia界面

在本部分中,您將探索Eclipse Theia界面的一些功能。

在IDE的左側,有一個垂直排列的四個按鈕,可以在側邊欄中打開最常用的功能。

此欄是可自定義的,因此您可以將這些視圖移動到不同的順序,或者從欄中刪除它們。默認情況下,第一個視圖打開了Explorer面板,提供了項目結構的樹形導航。您可以在這裡管理文件夾和文件 – 根據需要創建、刪除、移動和重命名它們。

通過文件菜單創建新文件後,您將在新標籤中看到一個空文件打開。保存後,您可以在資源管理器側邊欄中查看文件名。要創建文件夾,請右擊資源管理器側邊欄,然後點擊新建文件夾。您還可以通過點擊其名稱來展開文件夾,並將文件和文件夾拖放到層次結構的較高部分以將其移動到新位置。

下一個選項提供了訪問搜索和替換功能的入口。接著,下一個選項提供了您可能正在使用的源代碼控制系統的視圖,例如Git

接下來的視圖是調試器選項,它在面板中提供了所有常見的調試操作。您可以在launch.json文件中保存調試配置。

最後一個選項允許您查看和安裝擴展:

GUI的中心部分是您的編輯器,您可以通過標籤將其分開以進行代碼編輯。您可以將編輯視圖更改為網格系統或並排文件。與所有現代IDE一樣,Eclipse Theia支持代碼的語法突出顯示。

您可以通過輸入CTRL+SHIFT+`來訪問終端,或者通過點擊上方菜單中的終端,然後選擇新建終端來訪問終端。終端將在下方面板中打開,其工作目錄將設置為項目的工作區,其中包含資源管理器側邊欄中顯示的文件和文件夾。

如果您想要銷毀集群上的Eclipse Theia部署,請運行以下命令:

  1. kubectl delete -f eclipse-theia.yaml

你已經對 Eclipse Theia 介面進行了高層次概述,並且檢查了一些最常用的功能。

結論

你現在已在你的 DigitalOcean Kubernetes 集群上安裝了 Eclipse Theia,一個多功能的雲端 IDE。你已經使用免費的 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