2.4. 在受限环境中使用 odo


2.4.1. 受限环境中的 odo

要在断开连接的 OpenShift Container Platform 集群或受限环境中置备的集群中运行 odo ,集群管理员需要创建带有registry 镜像(mirror)的集群。

要在断开连接的集群中工作,必须首先将 odo init 镜像推送到集群的 registry 中,然后使用 ODO_BOOTSTRAPPER_IMAGE 环境变量覆盖 odo init 镜像路径。

在推送 odo init镜像后,您需要为 registry 中的支持的构建程序镜像(builder image)在本地创建一个镜像(mirror)覆盖 registry 镜像(mirror),然后创建您的应用程序。构建程序镜像是为应用程序配置运行时环境所必需的,它还包含构建应用程序所需的构建工具,例如:用于 Node.js 的 npm 或用于 Java 的 Maven。一个 registry 镜像(mirror)会包含应用程序所需的所有依赖项。

根据集群和操作系统的配置,您可以将 odo init 镜像推送到一个 registry 镜像(mirror)中,或直接推送到内部 registry。

2.4.2.1. 先决条件

  • 在客户端操作系统上安装 oc
  • 在客户端操作系统中安装 odo
  • 访问带有已配置的内部 registry 或 registry 镜像(mirror)的 OpenShift Container Platform 受限集群。

根据您的操作系统,您可以将 odo init 镜像推送到带有 registry 镜像(mirror)的集群中,如下所示:

流程

  1. 使用 base64 对您的镜像 registry 的 root 认证授权 (CA) 内容进行编码:

    $ echo <content_of_additional_ca> | base64 -d > disconnect-ca.crt
    Copy to Clipboard Toggle word wrap
  2. 将编码的 root CA 证书复制到适当的位置:

    $ sudo cp ./disconnect-ca.crt /etc/pki/ca-trust/source/anchors/<mirror-registry>.crt
    Copy to Clipboard Toggle word wrap
  3. 信任客户端平台中的 CA,并登录 OpenShift Container Platform 镜像 registry:

    $ sudo update-ca-trust enable && sudo systemctl daemon-reload && sudo systemctl restart / docker && docker login <mirror-registry>:5000 -u <username> -p <password>
    Copy to Clipboard Toggle word wrap
  4. odo init 镜像进行镜像(mirror):

    $ oc image mirror registry.access.redhat.com/openshiftdo/odo-init-image-rhel7:<tag> <mirror-registry>:5000/openshiftdo/odo-init-image-rhel7:<tag>
    Copy to Clipboard Toggle word wrap
  5. 设置 ODO_BOOTSTRAPPER_IMAGE 环境变量来覆盖默认的 odo init 镜像路径:

    $ export ODO_BOOTSTRAPPER_IMAGE=<mirror-registry>:5000/openshiftdo/odo-init-image-rhel7:<tag>
    Copy to Clipboard Toggle word wrap

流程

  1. 使用 base64 对您的镜像 registry 的 root 认证授权 (CA) 内容进行编码:

    $ echo <content_of_additional_ca> | base64 -d > disconnect-ca.crt
    Copy to Clipboard Toggle word wrap
  2. 将编码的 root CA 证书复制到适当的位置:

    1. 使用 Docker UI 重启 Docker。
    2. 运行以下命令:

      $ docker login <mirror-registry>:5000 -u <username> -p <password>
      Copy to Clipboard Toggle word wrap
  3. odo init 镜像进行镜像(mirror):

    $ oc image mirror registry.access.redhat.com/openshiftdo/odo-init-image-rhel7:<tag> <mirror-registry>:5000/openshiftdo/odo-init-image-rhel7:<tag>
    Copy to Clipboard Toggle word wrap
  4. 设置 ODO_BOOTSTRAPPER_IMAGE 环境变量来覆盖默认的 odo init 镜像路径:

    $ export ODO_BOOTSTRAPPER_IMAGE=<mirror-registry>:5000/openshiftdo/odo-init-image-rhel7:<tag>
    Copy to Clipboard Toggle word wrap

流程

  1. 使用 base64 对您的镜像 registry 的 root 认证授权 (CA) 内容进行编码:

    PS C:\> echo <content_of_additional_ca> | base64 -d > disconnect-ca.crt
    Copy to Clipboard Toggle word wrap
  2. 作为管理员,请执行以下命令将编码的 root CA 证书复制到适当的位置:

    PS C:\WINDOWS\system32> certutil -addstore -f "ROOT" disconnect-ca.crt
    Copy to Clipboard Toggle word wrap
  3. 信任客户端平台中的 CA,并登录 OpenShift Container Platform 镜像 registry:

    1. 使用 Docker UI 重启 Docker。
    2. 运行以下命令:

      PS C:\WINDOWS\system32> docker login <mirror-registry>:5000 -u <username> -p <password>
      Copy to Clipboard Toggle word wrap
  4. odo init 镜像进行镜像(mirror):

    PS C:\> oc image mirror registry.access.redhat.com/openshiftdo/odo-init-image-rhel7:<tag> <mirror-registry>:5000/openshiftdo/odo-init-image-rhel7:<tag>
    Copy to Clipboard Toggle word wrap
  5. 设置 ODO_BOOTSTRAPPER_IMAGE 环境变量来覆盖默认的 odo init 镜像路径:

    PS C:\> $env:ODO_BOOTSTRAPPER_IMAGE="<mirror-registry>:5000/openshiftdo/odo-init-image-rhel7:<tag>"
    Copy to Clipboard Toggle word wrap

2.4.2.3. 将 odo init 镜像直接推送到内部 registry

如果集群允许镜像直接推送到内部 registry,请将 odo init 镜像推送到 registry:

2.4.2.3.1. 在 Linux 中直接推送 init 镜像

流程

  1. 启用默认路由:

    $ oc patch configs.imageregistry.operator.openshift.io cluster -p '{"spec":{"defaultRoute":true}}' --type='merge' -n openshift-image-registry
    Copy to Clipboard Toggle word wrap
  2. 获取通配符路由 CA:

    $ oc get secret router-certs-default -n openshift-ingress -o yaml
    apiVersion: v1
    data:
      tls.crt: **************************
      tls.key: ##################
    kind: Secret
    metadata:
      [...]
    type: kubernetes.io/tls
    Copy to Clipboard Toggle word wrap
  3. 使用 base64 对您的镜像 registry 的 root 认证授权 (CA) 内容进行编码:

    $ echo <tls.crt> | base64 -d > ca.crt
    Copy to Clipboard Toggle word wrap
  4. 在客户端平台中信任 CA:

    $ sudo cp ca.crt  /etc/pki/ca-trust/source/anchors/externalroute.crt && sudo update-ca-trust enable && sudo systemctl daemon-reload && sudo systemctl restart docker
    Copy to Clipboard Toggle word wrap
  5. 登录到内部 registry:

    $ oc get route -n openshift-image-registry
    NAME       HOST/PORT    PATH   SERVICES     PORT  TERMINATION   WILDCARD
    default-route   <registry_path>          image-registry   <all>   reencrypt     None
    
    $ docker login <registry_path> -u kubeadmin -p $(oc whoami -t)
    Copy to Clipboard Toggle word wrap
  6. 推送 odo init 镜像:

    $ docker pull registry.access.redhat.com/openshiftdo/odo-init-image-rhel7:<tag>
    
    $ docker tag registry.access.redhat.com/openshiftdo/odo-init-image-rhel7:<tag> <registry_path>/openshiftdo/odo-init-image-rhel7:<tag>
    
    $ docker push <registry_path>/openshiftdo/odo-init-image-rhel7:<tag>
    Copy to Clipboard Toggle word wrap
  7. 设置 ODO_BOOTSTRAPPER_IMAGE 环境变量来覆盖默认的 odo init 镜像路径:

    $ export ODO_BOOTSTRAPPER_IMAGE=<registry_path>/openshiftdo/odo-init-image-rhel7:1.0.1
    Copy to Clipboard Toggle word wrap
2.4.2.3.2. 在 MacOS 上直接推送 init 镜像

流程

  1. 启用默认路由:

    $ oc patch configs.imageregistry.operator.openshift.io cluster -p '{"spec":{"defaultRoute":true}}' --type='merge' -n openshift-image-registry
    Copy to Clipboard Toggle word wrap
  2. 获取通配符路由 CA:

    $ oc get secret router-certs-default -n openshift-ingress -o yaml
    apiVersion: v1
    data:
      tls.crt: **************************
      tls.key: ##################
    kind: Secret
    metadata:
      [...]
    type: kubernetes.io/tls
    Copy to Clipboard Toggle word wrap
  3. 使用 base64 对您的镜像 registry 的 root 认证授权 (CA) 内容进行编码:

    $ echo <tls.crt> | base64 -d > ca.crt
    Copy to Clipboard Toggle word wrap
  4. 在客户端平台中信任 CA:

    $ sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain ca.crt
    Copy to Clipboard Toggle word wrap
  5. 登录到内部 registry:

    $ oc get route -n openshift-image-registry
    NAME       HOST/PORT    PATH   SERVICES     PORT  TERMINATION   WILDCARD
    default-route   <registry_path>          image-registry   <all>   reencrypt     None
    
    $ docker login <registry_path> -u kubeadmin -p $(oc whoami -t)
    Copy to Clipboard Toggle word wrap
  6. 推送 odo init 镜像:

    $ docker pull registry.access.redhat.com/openshiftdo/odo-init-image-rhel7:<tag>
    
    $ docker tag registry.access.redhat.com/openshiftdo/odo-init-image-rhel7:<tag> <registry_path>/openshiftdo/odo-init-image-rhel7:<tag>
    
    $ docker push <registry_path>/openshiftdo/odo-init-image-rhel7:<tag>
    Copy to Clipboard Toggle word wrap
  7. 设置 ODO_BOOTSTRAPPER_IMAGE 环境变量来覆盖默认的 odo init 镜像路径:

    $ export ODO_BOOTSTRAPPER_IMAGE=<registry_path>/openshiftdo/odo-init-image-rhel7:1.0.1
    Copy to Clipboard Toggle word wrap
2.4.2.3.3. 在 Windows 上直接推送 init 镜像

流程

  1. 启用默认路由:

    PS C:\> oc patch configs.imageregistry.operator.openshift.io cluster -p '{"spec":{"defaultRoute":true}}' --type='merge' -n openshift-image-registry
    Copy to Clipboard Toggle word wrap
  2. 获取通配符路由 CA:

    PS C:\> oc get secret router-certs-default -n openshift-ingress -o yaml
    apiVersion: v1
    data:
      tls.crt: **************************
      tls.key: ##################
    kind: Secret
    metadata:
      [...]
    type: kubernetes.io/tls
    Copy to Clipboard Toggle word wrap
  3. 使用 base64 对您的镜像 registry 的 root 认证授权 (CA) 内容进行编码:

    PS C:\> echo <tls.crt> | base64 -d > ca.crt
    Copy to Clipboard Toggle word wrap
  4. 作为管理员,请执行以下命令在客户端平台中信任 CA:

    PS C:\WINDOWS\system32> certutil -addstore -f "ROOT" ca.crt
    Copy to Clipboard Toggle word wrap
  5. 登录到内部 registry:

    PS C:\> oc get route -n openshift-image-registry
    NAME       HOST/PORT    PATH   SERVICES     PORT  TERMINATION   WILDCARD
    default-route   <registry_path>          image-registry   <all>   reencrypt     None
    
    PS C:\> docker login <registry_path> -u kubeadmin -p $(oc whoami -t)
    Copy to Clipboard Toggle word wrap
  6. 推送 odo init 镜像:

    PS C:\> docker pull registry.access.redhat.com/openshiftdo/odo-init-image-rhel7:<tag>
    
    PS C:\> docker tag registry.access.redhat.com/openshiftdo/odo-init-image-rhel7:<tag> <registry_path>/openshiftdo/odo-init-image-rhel7:<tag>
    
    PS C:\> docker push <registry_path>/openshiftdo/odo-init-image-rhel7:<tag>
    Copy to Clipboard Toggle word wrap
  7. 设置 ODO_BOOTSTRAPPER_IMAGE 环境变量来覆盖默认的 odo init 镜像路径:

    PS C:\> $env:ODO_BOOTSTRAPPER_IMAGE="<registry_path>/openshiftdo/odo-init-image-rhel7:<tag>"
    Copy to Clipboard Toggle word wrap

2.4.3. 在断开连接的集群中创建和部署组件

init 镜像推送到具有镜像(mirror) registry 的集群中后,您必须使用 oc 工具为应用程序所需的构建程序镜像创建一个镜像(mirror),使用环境变量覆盖镜像 registry,然后创建组件。

2.4.3.1. 先决条件

要使用 Node.js 依赖项的 npm 软件包及 Java 依赖项的 Maven 软件包,并为应用程序配置运行时环境,您必须从镜像 registry 中镜像相应的构建器镜像。

流程

  1. 验证所需镜像标签没有导入:

    $ oc describe is nodejs -n openshift
    Name:                   nodejs
    Namespace:              openshift
    [...]
    
    10
      tagged from <mirror-registry>:<port>/rhoar-nodejs/nodejs-10
        prefer registry pullthrough when referencing this tag
    
      Build and run Node.js 10 applications on RHEL 7. For more information about using this builder image, including OpenShift considerations, see https://github.com/nodeshift/centos7-s2i-nodejs.
      Tags: builder, nodejs, hidden
      Example Repo: https://github.com/sclorg/nodejs-ex.git
    
      ! error: Import failed (NotFound): dockerimage.image.openshift.io "<mirror-registry>:<port>/rhoar-nodejs/nodejs-10:latest" not found
          About an hour ago
    
    10-SCL (latest)
      tagged from <mirror-registry>:<port>/rhscl/nodejs-10-rhel7
        prefer registry pullthrough when referencing this tag
    
      Build and run Node.js 10 applications on RHEL 7. For more information about using this builder image, including OpenShift considerations, see https://github.com/nodeshift/centos7-s2i-nodejs.
      Tags: builder, nodejs
      Example Repo: https://github.com/sclorg/nodejs-ex.git
    
      ! error: Import failed (NotFound): dockerimage.image.openshift.io "<mirror-registry>:<port>/rhscl/nodejs-10-rhel7:latest" not found
          About an hour ago
    
    [...]
    Copy to Clipboard Toggle word wrap
  2. 将支持的镜像标签镜像到私有 registry:

    $ oc image mirror registry.access.redhat.com/rhscl/nodejs-10-rhel7:<tag> <private_registry>/rhscl/nodejs-10-rhel7:<tag>
    Copy to Clipboard Toggle word wrap
  3. 导入镜像:

    $ oc tag <mirror-registry>:<port>/rhscl/nodejs-10-rhel7:<tag> nodejs-10-rhel7:latest --scheduled
    Copy to Clipboard Toggle word wrap

    您必须定期重新导入镜像。--scheduled 标志启用镜像自动重新导入。

  4. 验证带有指定标签的镜像已被导入:

    $ oc describe is nodejs -n openshift
    Name:                   nodejs
    [...]
    10-SCL (latest)
      tagged from <mirror-registry>:<port>/rhscl/nodejs-10-rhel7
        prefer registry pullthrough when referencing this tag
    
      Build and run Node.js 10 applications on RHEL 7. For more information about using this builder image, including OpenShift considerations, see https://github.com/nodeshift/centos7-s2i-nodejs.
      Tags: builder, nodejs
      Example Repo: https://github.com/sclorg/nodejs-ex.git
    
      * <mirror-registry>:<port>/rhscl/nodejs-10-rhel7@sha256:d669ecbc11ac88293de50219dae8619832c6a0f5b04883b480e073590fab7c54
          3 minutes ago
    
    [...]
    Copy to Clipboard Toggle word wrap

2.4.3.3. mirror registry 介绍

要从私有 mirror registry 中为 Node.js 依赖项下载 npm 软件包,及为 Java 依赖项下载 Maven 软件包,您必须在集群中创建并配置 mirror npm 或 Maven registry。然后您可以覆盖现有组件上的 mirror registry,或覆盖创建新组件时的 mirror registry。

流程

  • 覆盖现有组件上的 mirror registry:

    $ odo config set --env NPM_MIRROR=<npm_mirror_registry>
    Copy to Clipboard Toggle word wrap
  • 覆盖创建组件时的 mirror registry:

    $ odo component create nodejs --env NPM_MIRROR=<npm_mirror_registry>
    Copy to Clipboard Toggle word wrap

2.4.3.4. 使用 odo 创建 Node.js 应用程序

要创建一个 Node.js 组件,请下载 Node.js 应用程序并使用 odo将源代码推送到您的集群中。

流程

  1. 将当前目录变为您的应用程序的目录:

    $ cd <directory name>
    Copy to Clipboard Toggle word wrap
  2. 将类型 Node.js 的组件添加到应用程序中:

    $ odo create nodejs
    Copy to Clipboard Toggle word wrap
    注意

    默认情况下使用最新的镜像。也可以使用 odo create openshift/nodejs:8 明确指定一个镜像版本。

  3. 将初始源代码推送到组件中:

    $ odo push
    Copy to Clipboard Toggle word wrap

    现在,您的组件已被部署到 OpenShift Container Platform 中。

  4. 创建一个 URL,按以下方法在本地配置文件中添加条目:

    $ odo url create --port 8080
    Copy to Clipboard Toggle word wrap
  5. 推送更改。这会在集群中创建一个 URL。

    $ odo push
    Copy to Clipboard Toggle word wrap
  6. 列出用于检查组件所需 URL 的 URL。

    $ odo url list
    Copy to Clipboard Toggle word wrap
  7. 使用生成的 URL 查看部署的应用程序。

    $ curl <URL>
    Copy to Clipboard Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat