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

作者选择了 自由和开源基金作为 写给捐款计划的一部分接受捐款。

介绍

随着开发人员的工具转向云,云 IDE(集成开发环境)平台的创建和采用正在增加。云 IDEs可以通过Web浏览器从任何现代设备访问,并且为实时协作场景提供了无数的优势。在云 IDE中工作为您和您的团队提供了一个统一的开发和测试环境,同时最大限度地减少平台不兼容性。

Eclipse Theia是一个可扩展的云 IDE,在远程服务器上运行,并可通过 Web 浏览器访问。视觉上,它设计的外观和行为类似于 Microsoft Visual Studio Code,这意味着它支持许多编程语言,具有灵活的布局,并具有集成的终端。 区分 Eclipse Theia 与其他云 IDE 软件是它的扩展性;它可以通过 自定义扩展进行修改,从而允许您创建适合您的需求的云 IDE。

在本教程中,您将在您的 DigitalOcean Kubernetes 集群上设置 Eclipse Theia 云 IDE 平台的默认版本,并将其暴露在您的域中,使用 Let’s Encrypt 证书进行安全保护,并要求访问者进行身份验证。

前提条件

您在 DigitalOcean 上创建一个 Kubernetes 集群时,请参阅 Kubernetes Quickstart。 在本地计算机上安装了 Helm 3 包管理器。 在 How To Install Software on Kubernetes Clusters with the Helm 3 Package Manager教程中完成 Step 1。 在 DigitalOcean 上创建 Kubernetes 集群时,请参阅 Kubernetes Quickstart。 在您的集群上使用 Helm 安装了 Nginx Ingress Controller,以便在您的本地计算机上使用 ExternalDNS 与 Ingress Resources。 要做到这一点,请遵循 [How To Set Up Ingress Software on DigitalOcean Kubernetes Kub

步骤 1 – 安装和暴露 Eclipse Theia

首先,您将安装 Eclipse Theia 到您的 DigitalOcean Kubernetes 集群中,然后,您将使用 Nginx Ingress 将其曝光到您想要的域。

由于您创建了两个示例部署和一个资源作为前提条件的一部分,您可以通过运行以下命令自由删除它们:

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

对于本教程,您将在本地机器上存储部署配置,以名为eclipse-theia.yaml的文件。

1nano eclipse-theia.yaml

将以下行添加到文件中:

 1[label eclipse-theia.yaml]
 2apiVersion: v1
 3kind: Namespace
 4metadata:
 5  name: theia
 6---
 7apiVersion: networking.k8s.io/v1
 8kind: Ingress
 9metadata:
10  name: theia-next
11  namespace: theia
12spec:
13  ingressClassName: nginx
14  rules:
15  - host: theia.your_domain
16    http:
17      paths:
18      - path: /
19        pathType: Prefix
20        backend:
21          service:
22            name: theia-next
23            port:
24              number: 80
25---
26apiVersion: v1
27kind: Service
28metadata:
29 name: theia-next
30 namespace: theia
31spec:
32 ports:
33 - port: 80
34   targetPort: 3000
35 selector:
36   app: theia-next
37---
38apiVersion: apps/v1
39kind: Deployment
40metadata:
41  labels:
42    app: theia-next
43  name: theia-next
44  namespace: theia
45spec:
46  selector:
47    matchLabels:
48      app: theia-next
49  replicas: 1
50  template:
51    metadata:
52      labels:
53        app: theia-next
54    spec:
55      containers:
56      - image: francoisvans/theia-docker-test
57        imagePullPolicy: Always
58        name: theia-next
59        ports:
60        - containerPort: 3000

此配置定义了一个名称空间、一个部署、一个服务和一个 Ingress. 名称空间被称为theia,并将包含与 Eclipse Theia 相关的所有 Kubernetes 对象,与群集的其余部分分开。 部署由 Theia Docker 图像的一个实例组成,容器上显示的端口为3000。 服务寻找了部署,并将容器端口重置到通常的 HTTP 端口为80,允许集群内访问 Eclipse Theia。

Ingress 包含一个规则,以便在您所想要的域外在端口 80 服务。在其注释中,您指定应该使用 Nginx Ingress 控制器来处理请求。 请记住,用您指向群集的负载平衡器的所需域代替 theia.your_domain`,然后保存并关闭文件。

保存和退出文件。

然后,通过运行以下命令在 Kubernetes 中创建配置:

1kubectl apply -f eclipse-theia.yaml

结果将看起来像这样:

1[secondary_label Output]
2namespace/theia created
3ingress.networking.k8s.io/theia-next created
4service/theia-next created
5deployment.apps/theia-next created

您可以通过运行观看Eclipse Theia pod的创作:

1kubectl get pods -w -n theia

结果将是这样的:

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

过了一段时间,状态将转换为运行,这意味着您已成功安装 Eclipse Theia 到您的集群中。

在您的浏览器中导航到您的域,您将看到默认的 Eclipse Theia 编辑器 GUI:

The default Eclipse Theia editor GUI

您已将 Eclipse Theia 部署到您的 DigitalOcean Kubernetes 集群中,并通过 Ingress 将其暴露在您想要的域中,接下来,您将通过启用登录身份验证来确保访问 Eclipse Theia 部署。

步骤 2 – 启用您的域名登录身份验证

在此步骤中,您将为您的Eclipse Theia部署启用用户名和密码身份验证。您将通过使用htpasswd实用的有效登录组合列表来实现此目标。然后,您将创建包含该列表的Kubernetes秘密,并将Ingress配置为相应的访问者身份验证。最终,您的域名只有当访问者输入有效的用户名和密码组合时才可访问。

htpasswd实用程序来自Apache网页服务器,用于创建存储登录组合列表的文件。 htpasswd文件的格式是每行一个 username:hashed_password组合,这是 Nginx Ingress Controller预计列表符合的格式。

首先,更新包管理器缓存:

1sudo apt update

然後,在您的系統上安裝「htpasswd」,執行以下命令:

1sudo apt install apache2-utils -y

您将将列表存储在名为auth的文件中。

1touch auth

这个文件需要被命名为auth,因为 Nginx Ingress 控制器预计秘密将包含一个名为data.auth的密钥。

将用户名和密码组合添加到auth,运行以下命令:

1htpasswd auth username

请记住用您想要的用户名替换用户名。您将被要求提供附加密码,并将该组合添加到Auth文件中。

<$>[注] 注: 如果您正在使用的系统没有安装htpasswd,则可以使用 Dockerized 版本。

您需要在您的计算机上安装 Docker. 有关如何做到这一点的说明,请访问 官方文件

运行以下命令来运行一个文件化版本:

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

请记住用你想要使用的用户名代替<username>。你将被要求提供密码。在控制台上将写出哈希登录组合,你将需要手动将其添加到auth文件的末尾。

完成后,通过运行以下命令在 Kubernetes 中创建一个新的秘密与文件的内容:

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

你可以看到秘密与:

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

结果将看起来像:

 1[secondary_label Output]
 2apiVersion: v1
 3data:
 4  auth: ...
 5kind: Secret
 6metadata:
 7  creationTimestamp: "2021-12-31T17:16:29Z"
 8  name: theia-basic-auth
 9  namespace: theia
10  resourceVersion: "32437"
11  uid: 47461e23-e281-411b-acfd-cea82fcde41b
12type: Opaque

接下来,您需要编辑 Ingress 以使其使用秘密。

1nano eclipse-theia.yaml

将突出的行添加到您的文件中:

 1[label eclipse-theia.yaml]
 2apiVersion: v1
 3kind: Namespace
 4metadata:
 5  name: theia
 6---
 7apiVersion: networking.k8s.io/v1
 8kind: Ingress
 9metadata:
10  name: theia-next
11  namespace: theia
12  annotations:
13    nginx.ingress.kubernetes.io/auth-type: basic
14    nginx.ingress.kubernetes.io/auth-secret: theia-basic-auth
15    nginx.ingress.kubernetes.io/auth-realm: 'Authentication Required - Eclipse Theia'
16spec:
17  ingressClassName: nginx
18  rules:
19  - host: theia.your_domain
20    http:
21      paths:
22      - path: /
23        pathType: Prefix
24        backend:
25          service:
26            name: theia-next
27            port:
28              number: 80
29...

首先,在auth-type注释中,您指定身份验证类型为基本。这意味着 Nginx 将要求用户输入用户名和密码。然后,在auth-secret中,您指定包含有效组合列表的秘密为theia-basic-auth,您刚刚创建的秘密。剩余的auth-realm注释指定了一个信息,将向用户显示为何需要身份验证。

保存并关闭文件。

若要将更改传播到您的集群中,请运行以下命令:

1kubectl apply -f eclipse-theia.yaml

你会看到输出:

1[secondary_label Output]
2namespace/theia unchanged
3ingress.networking.k8s.io/theia-next configured
4service/theia-next unchanged
5deployment.apps/theia-next unchanged

在您的浏览器中导航到您的域,您现在将被要求登录。

您已在您的 Ingress 上启用了基本登录身份验证,通过配置它以使用含有哈希用户名和密码组合的秘密。在下一步中,您将通过添加 TLS 证书来进一步保护访问,以便您和您的 Eclipse Theia 部署之间的流量保持加密。

步骤 3 – 应用 Let’s Encrypt HTTPS 证书

接下来,您将通过将 Let’s Encrypt 证书应用于您的 Ingress 来确保您的 Eclipse Theia 安装,Cert-Manager 将自动提供这些证书。

打开eclipse-theia.yaml来编辑:

1nano eclipse-theia.yaml

将突出列出的行添加到您的文件中,确保您用自己的域名取代位置持有者:

 1[label eclipse-theia.yaml]
 2apiVersion: v1
 3kind: Namespace
 4metadata:
 5  name: theia
 6---
 7apiVersion: networking.k8s.io/v1
 8kind: Ingress
 9metadata:
10  name: theia-next
11  namespace: theia
12  annotations:
13    nginx.ingress.kubernetes.io/auth-type: basic
14    nginx.ingress.kubernetes.io/auth-secret: theia-basic-auth
15    nginx.ingress.kubernetes.io/auth-realm: 'Authentication Required - Eclipse Theia'
16    cert-manager.io/cluster-issuer: letsencrypt-prod
17spec:
18  tls:
19  - hosts:
20    - theia.your_domain
21    secretName: theia-prod
22  ingressClassName: nginx
23  rules:
24  - host: theia.your_domain
25    http:
26      paths:
27      - path: /
28        pathType: Prefix
29        backend:
30          service:
31            name: theia-next
32            port:
33              number: 80
34...

首先,您指定您创建的‘letsencrypt-prod’ ClusterIssuer 作为发行商的先决条件的一部分,该发行商将用于为此 Ingress 提供证书,然后,在‘tls’ 部分中,您指定应该被保护的确切域名,以及将持有这些证书的秘密的名称。

保存和退出文件。

通过运行以下命令将更改应用于您的集群:

1kubectl apply -f eclipse-theia.yaml

结果将看起来像:

1[secondary_label Output]
2namespace/theia unchanged
3ingress.networking.k8s.io/theia-next configured
4service/theia-next unchanged
5deployment.apps/theia-next unchanged

需要几分钟才能提供证书并完全应用,您可以通过观察下列命令的输出来跟踪进展:

1kubectl describe certificate theia-prod -n theia

当它完成时,输出的结尾将看起来像这样:

1[secondary_label Output]
2...
3Events:
4  Type Reason Age From Message
5  ----    ------        ----  ----          -------
6  Normal GeneratedKey 42m cert-manager Generated a new private key
7  Normal Requested 42m cert-manager Created new CertificateRequest resource "theia-prod-3785736528"
8  Normal Issued 42m cert-manager Certificate issued successfully

在您的浏览器中更新您的域名,您将看到地址栏的左侧显示的绿色锁定,表示连接是安全的。

您已配置 Ingress 以使用 Let's Encrypt 证书,从而使您的 Eclipse Theia 部署更安全。

步骤 4 — 使用 Eclipse Theia 接口

在本节中,您将探索Eclipse Theia界面的一些功能。

在IDE的左侧,有一个四个按钮的垂直行,打开了侧面面板中最常用的功能。

Eclipse Theia GUI - Sidepanel

此栏是可自定义的,所以您可以将这些视图移动到不同的顺序或从栏中删除它们. 默认情况下,第一个视图会打开 Explorer 面板,为项目结构提供树形导航。

通过 ** 文件 ** 菜单创建新文件后,你会看到一个空的文件在一个新的卡上打开. 一旦保存,你可以查看文件的名称在 Explorer 侧面面板. 要创建文件夹,右键单击 Explorer 侧面栏,然后单击 ** 新文件夹**. 您可以通过点击其名称来扩展文件夹,并将文件和文件夹拖放到层次的顶部,将其移动到一个新的位置。

Eclipse Theia GUI - New Folder

下一个选项提供访问搜索和替换功能,然后下一个选项提供您可能正在使用的源控制系统的视图,例如 Git

下一个视图是调试选项,该选项提供了面板中的所有常见调试操作,您可以将调试配置保存到launch.json文件中。

Debugger View with launch.json open

最后的选项允许您查看和安装扩展:

Eclipse Theia GUI - Extensions

GUI的中心部分是您的编辑器,您可以通过编辑代码的标签进行分离。您可以将编辑视图更改为网格系统或旁边的文件。

Editor Grid View

您可以通过键入CTRL+SHIFT+来访问终端,或者在上方菜单中单击终端并选择新终端

Terminal open

如果你想破坏你的群集上的Eclipse Theia部署,请运行以下命令:

1kubectl delete -f eclipse-theia.yaml

你已经探索了Eclipse Theia界面的高级概述,并审查了一些最常用的功能。

结论

您现在已在您的 DigitalOcean Kubernetes 集群上安装了 Eclipse Theia,一个多功能的云 IDE。您已使用免费的 Let's Encrypt TLS 证书保护它,并设置该实例以要求访问者登录。您可以单独处理源代码和文件,或与您的团队合作。如果您需要额外的功能,您还可以尝试构建您自己的 Eclipse Theia 版本。 有关如何做到这一点的更多信息,请访问 Theia docs

Published At
Categories with 技术
comments powered by Disqus