如何在DigitalOceanKubernetes上设置EclipseTheiaCloudIDE平台
作为 Write for DOnations 计划的一部分,作者选择了 Free and Open Source Fund 来接受捐赠。
介绍
随着开发人员工具迁移到云端,云 IDE(集成开发环境)平台的创建和采用正在增长。 云 IDE 可以通过 Web 浏览器从各种现代设备访问,它们为实时协作场景提供了许多优势。 在云 IDE 中工作可为您和您的团队提供统一的开发和测试环境,同时最大限度地减少平台不兼容性。 因为它们原生基于云技术,所以能够利用集群来完成任务,这可以大大超过单台开发计算机的能力和可靠性。
Eclipse Theia 是一个可扩展的云 IDE,运行在远程服务器上,可从 Web 浏览器访问。 在视觉上,它的外观和行为类似于 Microsoft Visual Studio Code,这意味着它支持多种编程语言,具有灵活的布局,并具有集成终端。 Eclipse Theia 与其他云 IDE 软件的不同之处在于它的可扩展性; 它可以使用 自定义扩展 进行修改,它允许您制作适合您需求的云 IDE。
在本教程中,您将在 DigitalOcean Kubernetes 集群上设置 Eclipse Theia 云 IDE 平台的默认版本,并将其公开在您的域中,使用 Let's Encrypt 证书进行保护并要求访问者进行身份验证。 最后,您将通过 HTTPS 在 Kubernetes 集群上运行 Eclipse Theia,并要求访问者登录。
先决条件
- 一个 DigitalOcean Kubernetes 集群,您的连接配置为
kubectl
默认值。 创建集群时,在 Connect to your Cluster 步骤下显示了有关如何配置kubectl
的说明。 要在 DigitalOcean 上创建 Kubernetes 集群,请阅读 Kubernetes 快速入门 。 - 安装在本地机器上的 Helm 3 包管理器。 完成 如何使用 Helm 3 包管理器 教程在 Kubernetes 集群上安装软件的 步骤 1。
- 使用 Helm 安装在集群上的 Nginx 入口控制器,以便将 ExternalDNS 与入口资源一起使用。 为此,请遵循 如何使用 Helm 在 DigitalOcean Kubernetes 上设置 Nginx 入口。
- 完全注册的域名。 本教程将自始至终使用
theia.your_domain
。 您可以在 Namecheap 上购买一个域名,在 Freenom 上免费获得一个域名,或者使用您选择的域名注册商。
第 1 步 — 安装和公开 Eclipse Theia
首先,您需要将 Eclipse Theia 安装到您的 DigitalOcean Kubernetes 集群。 然后,您将使用 Nginx Ingress 在所需的域中公开它。
由于您创建了两个示例部署和一个资源作为先决条件的一部分,您可以通过运行以下命令自由删除它们:
kubectl delete -f hello-kubernetes-ingress.yaml kubectl delete -f hello-kubernetes-first.yaml kubectl delete -f hello-kubernetes-second.yaml
对于本教程,您将在本地计算机上将部署配置存储在名为 eclipse-theia.yaml
的文件中。 使用以下命令创建它:
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 对象,与集群的其余部分分开。 Deployment 包含一个 Theia Docker 镜像实例,其端口 3000
暴露在容器上。 该服务查找部署并将容器端口重新映射到通常的 HTTP 端口 80
,从而允许集群内访问 Eclipse Theia。
Ingress 包含一个规则,用于在您所需域的外部端口 80
上提供服务。 在其注释中,您指定 Nginx 入口控制器应用于请求处理。 请记住将 theia.your_domain
替换为您指向集群负载均衡器的所需域,然后保存并关闭文件。
保存并退出文件。
然后,通过运行以下命令在 Kubernetes 中创建配置:
kubectl apply -f eclipse-theia.yaml
输出将类似于以下内容:
Outputnamespace/theia created ingress.networking.k8s.io/theia-next created service/theia-next created deployment.apps/theia-next created
您可以通过运行以下命令来观看 Eclipse Theia pod 创建:
kubectl get pods -w -n theia
输出将如下所示:
OutputNAME 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 期望列表符合的格式。
首先,更新包管理器缓存:
sudo apt update
然后,通过运行以下命令在您的系统上安装 htpasswd
:
sudo apt install apache2-utils -y
您将把列表存储在一个名为 auth
的文件中。 通过运行创建它:
touch auth
该文件需要命名为 auth
,因为 Nginx 入口控制器希望密钥包含一个名为 data.auth
的密钥。 如果丢失,控制器将返回 HTTP 503 Service Unavailable
状态。
通过运行以下命令将用户名和密码组合添加到 auth
:
htpasswd auth username
请记住将 username
替换为您想要的用户名。 系统会要求您提供随附的密码,并且该组合将添加到 auth
文件中。 您可以为希望添加的用户重复此命令。
注意:如果您正在使用的系统没有安装htpasswd
,您可以使用Dockerized版本。
你需要在你的机器上安装 Docker。 有关如何执行此操作的说明,请访问 官方文档 。
运行以下命令以运行 dockerized 版本:
docker run --rm -it httpd htpasswd -n <username>
请记住将 <username>
替换为您要使用的用户名。 您将被要求输入密码。 哈希登录组合将在控制台上写出,您需要手动将其添加到 auth
文件的末尾。 对要添加的登录名重复此过程。
完成后,通过运行以下命令在 Kubernetes 中使用文件内容创建一个新密钥:
kubectl create secret generic theia-basic-auth --from-file=auth -n theia
您可以通过以下方式查看秘密:
kubectl get secret theia-basic-auth -o yaml -n theia
输出将如下所示:
OutputapiVersion: 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 以使其使用密钥。 打开部署配置进行编辑:
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
注释指定将向用户显示的消息,以解释为什么需要身份验证。 您可以根据自己的喜好更改此字段中包含的消息。
保存并关闭文件。
要将更改传播到您的集群,请运行以下命令:
kubectl apply -f eclipse-theia.yaml
你会看到输出:
Outputnamespace/theia unchanged ingress.networking.k8s.io/theia-next configured service/theia-next unchanged deployment.apps/theia-next unchanged
在浏览器中导航到您的域,现在将要求您登录。
通过将 Ingress 配置为使用包含散列用户名和密码组合的密钥,您已在 Ingress 上启用了基本登录身份验证。 在下一步中,您将通过添加 TLS 证书进一步保护访问,以便您和 Eclipse Theia 部署之间的流量保持加密。
第 3 步 — 应用 Let's Encrypt HTTPS 证书
接下来,您将通过将 Let's Encrypt 证书应用到您的 Ingress 来保护您的 Eclipse Theia 安装,Cert-Manager 将自动配置该证书。 完成此步骤后,您的 Eclipse Theia 安装将可通过 HTTPS 访问。
打开eclipse-theia.yaml
进行编辑:
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
部分中,指定应该保护的确切域,以及将持有这些证书的秘密名称。
保存并退出文件。
通过运行以下命令将更改应用到集群:
kubectl apply -f eclipse-theia.yaml
输出将如下所示:
Outputnamespace/theia unchanged ingress.networking.k8s.io/theia-next configured service/theia-next unchanged deployment.apps/theia-next unchanged
配置和完全应用证书需要几分钟时间。 您可以通过观察以下命令的输出来跟踪进度:
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 的左侧,有一排垂直的四个按钮,用于打开侧面板中最常用的功能。
此栏是可自定义的,因此您可以将这些视图移动到不同的顺序或从栏中删除它们。 默认情况下,第一个视图会打开 Explorer 面板,该面板提供项目结构的树状导航。 您可以在此处管理您的文件夹和文件——根据需要创建、删除、移动和重命名它们。
通过 File 菜单创建新文件后,您会看到在新选项卡中打开了一个空文件。 保存后,您可以在资源管理器侧面板中查看文件名。 要创建文件夹,请右键单击资源管理器侧边栏并单击 New Folder。 您可以通过单击文件夹名称来展开文件夹,也可以将文件和文件夹拖放到层次结构的上部以将它们移动到新位置。
下一个选项提供对搜索和替换功能的访问。 在它之后,下一个提供了您可能正在使用的源代码控制系统的视图,例如 Git。
下一个视图是调试器选项,它提供了面板中调试的所有常用操作。 您可以将调试配置保存在launch.json
文件中。
最后一个选项允许您查看和安装扩展:
GUI 的中心部分是您的编辑器,您可以通过选项卡将其分开以进行代码编辑。 您可以将编辑视图更改为网格系统或并排文件。 与所有现代 IDE 一样,Eclipse Theia 支持代码的语法高亮显示。
您可以通过键入 CTRL+SHIFT+`
或单击上方菜单中的 Terminal 并选择 New Terminal 来访问终端。 终端将在下方面板中打开,其工作目录将设置为项目的工作区,其中包含资源管理器侧面板中显示的文件和文件夹。
如果您希望销毁集群上的 Eclipse Theia 部署,请运行以下命令:
kubectl delete -f eclipse-theia.yaml
您已经浏览了 Eclipse Theia 界面的高级概述,并回顾了一些最常用的特性。
结论
您现在已经在 DigitalOcean Kubernetes 集群上安装了 Eclipse Theia,这是一个多功能的云 IDE。 您已使用免费的 Let's Encrypt TLS 证书对其进行保护,并将实例设置为要求访问者登录。 您可以单独处理源代码和文档,也可以与您的团队协作。 如果您需要其他功能,也可以尝试构建自己的 Eclipse Theia 版本。 有关如何执行此操作的更多信息,请访问 Theia 文档 。