6.2. 运行 Open VSX On-Premises
按照以下说明来部署和配置内部 Eclipse Open VSX 扩展 registry,与 OpenShift Dev Spaces 和 OpenShift 环境完全集成。选择两个设置路径之一:使用 OpenShift Dev Spaces 工作区或 OpenShift CLI (oc
)来帮助设置安全、内部的 Open VSX 实例。这包括创建必要的 OpenShift 项目、部署 Open VSX 组件、发布扩展并将 registry 与 OpenShift Dev Spaces 集成。
6.2.1. 使用 OpenShift Dev Spaces 实例 复制链接链接已复制到粘贴板!
先决条件
- 以集群管理员身份登录。
流程
使用 Open VSX 存储库启动工作区。
使用以下 Eclipse Open VSX 存储库 创建工作区。
警告.devfile.yaml 包含一个
elasticsearch
组件,它不支持 IBM Power (ppc64le)或 IBM Z (s390x)架构。要在这些构架中成功启动工作区,唯一的选项是从 devfile 中删除这个组件。或者,您可以使用 OpenShift CLI 工具 文档,该文档描述了如何在不启动工作区的情况下单独运行 Open VSX。提示环境(包括所有必要命令)在
.devfile.yaml
文件中定义。为 Open VSX 创建一个新的 OpenShift 项目。
运行
2.1。在工作区(
创建命名空间。应该在集群中创建名为Terminal
任务创建 Namespace。为 OpenVSXRun Task… devfile 2.1)中为 OpenVSX openvsx
的新项目。部署 Open VSX。
运行
2.4.1。在工作区(
)。此任务将要求提供 Open VSX 服务器镜像。在终端输入Terminal
任务。部署自定义 OpenVSXRun Task… devfile 2.4.1 中部署自定义 OpenVSX registry.redhat.io/devspaces/openvsx-rhel9:3.23
。因此,在 OpenShift 控制台中,您可以找到带有两个组件的openvsx
项目:PostgreSQL 数据库和
Open VSX 服务器
。此外,Open VSX UI 应可通过 OpenShift 集群中的公开路由访问。提示所有部署信息都在
deploy/openshift/openvsx-deployment-no-es.yml
文件中带有一些默认值,如OVSX_PAT_BASE64
。将带有 PAT 的 Open VSX 用户添加到数据库。
运行
2.5。将带有 PAT 的 OpenVSX 用户添加到工作区中的 DB
任务(Terminal
)。命令将要求提供 Open VSX 用户名和用户 PAT。您可以点 enter 来使用默认值。Run Task… devfile 2.5.将带有 PAT 的 OpenVSX 用户添加到 DB 重要用户 PAT 必须与部署文件中指定的
OVSX_PAT_BASE64
的解码值匹配。如果OVSX_PAT_BASE64
已更新,请使用新令牌的解码值作为用户 PAT。将 OpenShift Dev Spaces 配置为使用内部 Open VSX。
运行
2.6。将 Che 配置为使用工作区中的内部 Open VSX registry
任务(Terminal
。它将补丁应用到Run Task… devfile 2.6。将 Che 配置为使用内部 OpenVSX registry CheCluster
自定义资源,更新其配置,以使用指定的 Open VSX URL 作为扩展 registry。从
.vsix
文件发布扩展。开始时,Open VSX 注册表不提供任何扩展。在
openvsx-server
pod 正在运行且处于 Ready 状态后,扩展可以发布到 registry。2.8。从 VSIX 文件发布 Visual Studio Code Extension
命令直接从.vsix
文件向本地 Open VSX registry 发布扩展。它会提示您提供扩展的命名空间名称
和.vsix
文件的路径。发布扩展列表。
2.9。发布 Visual Studio Code Extensions
命令列表,根据下载 URL 将预定义的 Microsoft Visual Studio Code 扩展列表发布到内部 Open VSX registry。提示命令从
deploy/openshift/extensions.txt
文件中读取,该文件列出了要发布的每个扩展的.vsix
文件的 URL。要将扩展发布到 Open VSX,请根据需要更新extensions.txt
文件,然后运行 2.9。从工作区中发布 Visual Studio Code Extensions 任务列表:Terminal
。Run Task… devfile 2.9。发布 Visual Studio Code Extensions 列表 验证 OpenShift Dev Spaces 使用内部 Open VSX。
启动任何工作区,并在工作区 IDE 的 Extensions 视图中检查可用的扩展,或者在 OpenVSX OpenShift 项目中打开内部路由。
6.2.2. 使用 OpenShift CLI (oc)工具 复制链接链接已复制到粘贴板!
先决条件
-
安装的
oc
工具。 登录到以集群管理员部署 OpenShift Dev Spaces 的 OpenShift 集群。
提示$ oc login https://<openshift_dev_spaces_fqdn> --username=<my_user>
流程
为 Open VSX 创建一个新的 OpenShift 项目。
oc new-project openvsx
oc new-project openvsx
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 部署 Open VSX。
在您的文件系统中保存 openvsx-deployment-no-es.yml 文件,然后导航到该目录并运行命令来部署 Open VSX:
oc process -f openvsx-deployment-no-es.yml \ -p OPENVSX_SERVER_IMAGE=registry.redhat.io/devspaces/openvsx-rhel9:3.23 \ | oc apply -f -
oc process -f openvsx-deployment-no-es.yml \ -p OPENVSX_SERVER_IMAGE=registry.redhat.io/devspaces/openvsx-rhel9:3.23 \ | oc apply -f -
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 验证
openvsx
命名空间中的所有 pod 都在运行并就绪。可能需要过几分钟后,所有 pod 才会就绪。运行以下命令:oc get pods -n openvsx \ -o jsonpath='{range .items[*]}{@.metadata.name}{"\t"}{@.status.phase}{"\t"}{.status.containerStatuses[*].ready}{"\n"}{end}'
oc get pods -n openvsx \ -o jsonpath='{range .items[*]}{@.metadata.name}{"\t"}{@.status.phase}{"\t"}{.status.containerStatuses[*].ready}{"\n"}{end}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将带有 PAT 的 Open VSX 用户添加到数据库。
查找 PostgreSQL pod:
export POSTGRESQL_POD_NAME=$(oc get pods -n openvsx \ -o jsonpath="{.items[*].metadata.name}" | tr ' ' '\n' | grep '^postgresql' | head -n 1)
export POSTGRESQL_POD_NAME=$(oc get pods -n openvsx \ -o jsonpath="{.items[*].metadata.name}" | tr ' ' '\n' | grep '^postgresql' | head -n 1)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将用户名插入到 OpenVSX 数据库:
oc exec -n openvsx "$POSTGRESQL_POD_NAME" -- bash -c \ "psql -d openvsx -c \"INSERT INTO user_data (id, login_name, role) VALUES (1001, 'eclipse-che', 'privileged');\""
oc exec -n openvsx "$POSTGRESQL_POD_NAME" -- bash -c \ "psql -d openvsx -c \"INSERT INTO user_data (id, login_name, role) VALUES (1001, 'eclipse-che', 'privileged');\""
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将用户 PAT 插入到 OpenVSX 数据库:
oc exec -n openvsx "$POSTGRESQL_POD_NAME" -- bash -c \ "psql -d openvsx -c \"INSERT INTO personal_access_token (id, user_data, value, active, created_timestamp, accessed_timestamp, description) VALUES (1001, 1001, 'eclipse_che_token', true, current_timestamp, current_timestamp, 'extensions publisher');\""
oc exec -n openvsx "$POSTGRESQL_POD_NAME" -- bash -c \ "psql -d openvsx -c \"INSERT INTO personal_access_token (id, user_data, value, active, created_timestamp, accessed_timestamp, description) VALUES (1001, 1001, 'eclipse_che_token', true, current_timestamp, current_timestamp, 'extensions publisher');\""
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 OpenShift Dev Spaces 配置为使用内部 Open VSX。
export CHECLUSTER_NAME="$(oc get checluster --all-namespaces -o json | jq -r '.items[0].metadata.name')" && export CHECLUSTER_NAMESPACE="$(oc get checluster --all-namespaces -o json | jq -r '.items[0].metadata.namespace')" && export OPENVSX_ROUTE_URL="$(oc get route internal -n openvsx -o jsonpath='{.spec.host}')" && export PATCH='{"spec":{"components":{"pluginRegistry":{"openVSXURL":"https://'"$OPENVSX_ROUTE_URL"'"}}}}' && oc patch checluster "${CHECLUSTER_NAME}" --type=merge --patch "${PATCH}" -n "${CHECLUSTER_NAMESPACE}"
export CHECLUSTER_NAME="$(oc get checluster --all-namespaces -o json | jq -r '.items[0].metadata.name')" && export CHECLUSTER_NAMESPACE="$(oc get checluster --all-namespaces -o json | jq -r '.items[0].metadata.namespace')" && export OPENVSX_ROUTE_URL="$(oc get route internal -n openvsx -o jsonpath='{.spec.host}')" && export PATCH='{"spec":{"components":{"pluginRegistry":{"openVSXURL":"https://'"$OPENVSX_ROUTE_URL"'"}}}}' && oc patch checluster "${CHECLUSTER_NAME}" --type=merge --patch "${PATCH}" -n "${CHECLUSTER_NAMESPACE}"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 提示有关在 OpenShift Dev Spaces 中配置 Open VSX registry URL 的详情,请参考 第 6.3 节 “打开 VSX 注册表 URL”。
使用
ovsx
命令发布 Visual Studio Code 扩展。注意开始时,Open VSX 注册表不提供任何扩展。
配置所有内容后,下一步是从 openvsx-server 容器内发布 Visual Studio Code 扩展。要做到这一点,您需要两个信息:扩展
命名空间名称
(用于发布)、.vsix 扩展软件包的下载 URL。获取这些信息后,运行以下命令发布扩展:检索运行 Open VSX 服务器的 pod 的名称:
export OVSX_POD_NAME=$(oc get pods -n openvsx -o jsonpath="{.items[*].metadata.name}" | tr ' ' '\n' | grep ^openvsx-server)
export OVSX_POD_NAME=$(oc get pods -n openvsx -o jsonpath="{.items[*].metadata.name}" | tr ' ' '\n' | grep ^openvsx-server)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 下载 .vsix 扩展:
oc exec -n openvsx "${OVSX_POD_NAME}" -- bash -c "wget -O /tmp/extension.vsix EXTENSION_DOWNLOAD_URL "
oc exec -n openvsx "${OVSX_POD_NAME}" -- bash -c "wget -O /tmp/extension.vsix EXTENSION_DOWNLOAD_URL "
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建扩展命名空间:
oc exec -n openvsx "${OVSX_POD_NAME}" -- bash -c "ovsx create-namespace EXTENSION_NAMESPACE_NAME" || true
oc exec -n openvsx "${OVSX_POD_NAME}" -- bash -c "ovsx create-namespace EXTENSION_NAMESPACE_NAME" || true
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 发布扩展:
oc exec -n openvsx "${OVSX_POD_NAME}" -- bash -c "ovsx publish /tmp/extension.vsix"
oc exec -n openvsx "${OVSX_POD_NAME}" -- bash -c "ovsx publish /tmp/extension.vsix"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除下载的扩展文件:
oc exec -n openvsx "${OVSX_POD_NAME}" -- bash -c "rm /tmp/extension.vsix"
oc exec -n openvsx "${OVSX_POD_NAME}" -- bash -c "rm /tmp/extension.vsix"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 提示示例:发布
redhat.vscode-yaml
扩展版本 1.18.0:oc exec -n openvsx "${OVSX_POD_NAME}" -- bash -c "wget -O /tmp/extension.vsix https://open-vsx.org/api/redhat/vscode-yaml/1.18.0/file/redhat.vscode-yaml-1.18.0.vsix " && oc exec -n openvsx "${OVSX_POD_NAME}" -- bash -c "ovsx create-namespace redhat" || true && oc exec -n openvsx "${OVSX_POD_NAME}" -- bash -c "ovsx publish /tmp/extension.vsix" && oc exec -n openvsx "${OVSX_POD_NAME}" -- bash -c "rm /tmp/extension.vsix"
oc exec -n openvsx "${OVSX_POD_NAME}" -- bash -c "wget -O /tmp/extension.vsix https://open-vsx.org/api/redhat/vscode-yaml/1.18.0/file/redhat.vscode-yaml-1.18.0.vsix " && oc exec -n openvsx "${OVSX_POD_NAME}" -- bash -c "ovsx create-namespace redhat" || true && oc exec -n openvsx "${OVSX_POD_NAME}" -- bash -c "ovsx publish /tmp/extension.vsix" && oc exec -n openvsx "${OVSX_POD_NAME}" -- bash -c "rm /tmp/extension.vsix"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证 Open VSX 扩展 registry。
通过导航到 OPENVSX_ROUTE_URL 环境变量中定义的 URL,以检查已发布的扩展列表。
6.2.3. 设置对 Open VSX 服务的内部访问权限 复制链接链接已复制到粘贴板!
除了使用公共路由来引用 Open VSX registry 外,您还可以将 OpenShift Dev Spaces 配置为设置内部集群服务路由。这个方法通过在集群中保持流量限制来提供更高的安全性,从而避免了公开公开。
流程
内部服务路由的步骤:
删除公共路由。
删除与 Open VSX registry 关联的公共路由,以限制外部访问:
oc delete route internal -n openvsx
oc delete route internal -n openvsx
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 设置内部 Open VSX 服务 URL。
更新 CheCluster 自定义资源以使用内部集群服务 DNS:
export CHECLUSTER_NAME="$(oc get checluster --all-namespaces -o json | jq -r '.items[0].metadata.name')" && export CHECLUSTER_NAMESPACE="$(oc get checluster --all-namespaces -o json | jq -r '.items[0].metadata.namespace')" && export PATCH='{"spec":{"components":{"pluginRegistry":{"openVSXURL":"http://openvsx-server.openvsx.svc:8080"}}}}' && oc patch checluster "${CHECLUSTER_NAME}" --type=merge --patch "${PATCH}" -n "${CHECLUSTER_NAMESPACE}"
export CHECLUSTER_NAME="$(oc get checluster --all-namespaces -o json | jq -r '.items[0].metadata.name')" && export CHECLUSTER_NAMESPACE="$(oc get checluster --all-namespaces -o json | jq -r '.items[0].metadata.namespace')" && export PATCH='{"spec":{"components":{"pluginRegistry":{"openVSXURL":"http://openvsx-server.openvsx.svc:8080"}}}}' && oc patch checluster "${CHECLUSTER_NAME}" --type=merge --patch "${PATCH}" -n "${CHECLUSTER_NAMESPACE}"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow