2.4. 制限された環境での odo の使用

2.4.1. 制限された環境での odo について

odo を非接続の OpenShift Container Platform クラスター、または制限された環境でプロビジョニングされたクラスターで実行するには、クラスター管理者がミラーリングされたレジストリーでクラスターを作成していることを確認する必要があります。

非接続クラスターで作業を開始するには、まず odo init イメージをクラスターのレジストリーにプッシュし、ODO_BOOTSTRAPPER_IMAGE 環境変数を使用して odo init イメージパスを上書きする必要があります。

odo init image のプッシュ後に、レジストリーからサポートされているビルダーイメージをミラーリングしミラーレジストリーを上書きした後にアプリケーションを作成する必要があります。ビルダーイメージは、アプリケーションのランタイム環境を設定するために必要であり、これにはアプリケーションのビルドに必要なビルドツールが含まれます (例: Node.js の場合は npm、Java の場合は Maven)。ミラーレジストリーには、アプリケーションに必要なすべての依存関係が含まれます。

2.4.2. odo init イメージの制限されたクラスターレジストリーへのプッシュ

クラスターおよびオペレーティングシステムの設定に応じて、odo init イメージをミラーレジストリーにプッシュするか、または内部レジストリーに直接プッシュできます。

前提条件

  • クライアントオペレーティングシステムに oc をインストールします。
  • odo をクライアントオペレーティングシステムにインストールします。
  • 内部レジストリーまたはミラーレジストリーが設定された OpenShift Container Platform の制限付きクラスターへのアクセス。

2.4.2.1. odo init イメージのミラーレジストリーへのプッシュ

オペレーティングシステムによっては、以下のように odo init イメージをミラーレジストリーを持つクラスターにプッシュできます。

2.4.2.1.1. init イメージを Linux のミラーレジストリーにプッシュする

手順

  1. base64 を使用してミラーレジストリーのルート認証局 (CA) コンテンツをエンコードします。

    $ echo <content_of_additional_ca> | base64 -d > disconnect-ca.crt
  2. エンコーディングされたルート CA 証明書を適切な場所にコピーします。

    $ sudo cp ./disconnect-ca.crt /etc/pki/ca-trust/source/anchors/<mirror-registry>.crt
  3. クライアントプラットフォームで CA を信頼し、OpenShift Container Platform ミラーレジストリーにログインします。

    $ sudo update-ca-trust enable && sudo systemctl daemon-reload && sudo systemctl restart / docker && docker login <mirror-registry>:5000 -u <username> -p <password>
  4. odo init イメージをミラーリングします。

    $ oc image mirror registry.access.redhat.com/openshiftdo/odo-init-image-rhel7:<tag> <mirror-registry>:5000/openshiftdo/odo-init-image-rhel7:<tag>
  5. ODO_BOOTSTRAPPER_IMAGE 環境変数を設定してデフォルトの odo init イメージパスを上書きします。

    $ export ODO_BOOTSTRAPPER_IMAGE=<mirror-registry>:5000/openshiftdo/odo-init-image-rhel7:<tag>
2.4.2.1.2. init イメージを MacOS のミラーレジストリーにプッシュする

手順

  1. base64 を使用してミラーレジストリーのルート認証局 (CA) コンテンツをエンコードします。

    $ echo <content_of_additional_ca> | base64 -d > disconnect-ca.crt
  2. エンコーディングされたルート CA 証明書を適切な場所にコピーします。

    1. Docker UI を使用して Docker を再起動します。
    2. 以下のコマンドを実行します。

      $ docker login <mirror-registry>:5000 -u <username> -p <password>
  3. odo init イメージをミラーリングします。

    $ oc image mirror registry.access.redhat.com/openshiftdo/odo-init-image-rhel7:<tag> <mirror-registry>:5000/openshiftdo/odo-init-image-rhel7:<tag>
  4. ODO_BOOTSTRAPPER_IMAGE 環境変数を設定してデフォルトの odo init イメージパスを上書きします。

    $ export ODO_BOOTSTRAPPER_IMAGE=<mirror-registry>:5000/openshiftdo/odo-init-image-rhel7:<tag>
2.4.2.1.3. Windows のミラーレジストリーに init イメージをプッシュする

手順

  1. base64 を使用してミラーレジストリーのルート認証局 (CA) コンテンツをエンコードします。

    PS C:\> echo <content_of_additional_ca> | base64 -d > disconnect-ca.crt
  2. 管理者として、以下のコマンドを実行して、エンコーディングされたルート CA 証明書を適切な場所にコピーします。

    PS C:\WINDOWS\system32> certutil -addstore -f "ROOT" disconnect-ca.crt
  3. クライアントプラットフォームで CA を信頼し、OpenShift Container Platform ミラーレジストリーにログインします。

    1. Docker UI を使用して Docker を再起動します。
    2. 以下のコマンドを実行します。

      PS C:\WINDOWS\system32> docker login <mirror-registry>:5000 -u <username> -p <password>
  4. odo init イメージをミラーリングします。

    PS C:\> oc image mirror registry.access.redhat.com/openshiftdo/odo-init-image-rhel7:<tag> <mirror-registry>:5000/openshiftdo/odo-init-image-rhel7:<tag>
  5. ODO_BOOTSTRAPPER_IMAGE 環境変数を設定してデフォルトの odo init イメージパスを上書きします。

    PS C:\> $env:ODO_BOOTSTRAPPER_IMAGE="<mirror-registry>:5000/openshiftdo/odo-init-image-rhel7:<tag>"

2.4.2.2. odo init イメージを内部レジストリーに直接プッシュする

クラスターでイメージを内部レジストリーに直接プッシュできる場合、以下のように odo init イメージをレジストリーにプッシュします。

2.4.2.2.1. init イメージを Linux 上で直接プッシュする

手順

  1. デフォルトのルートを有効にします。

    $ oc patch configs.imageregistry.operator.openshift.io cluster -p '{"spec":{"defaultRoute":true}}' --type='merge' -n openshift-image-registry
  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
  3. base64 を使用してミラーレジストリーのルート認証局 (CA) コンテンツをエンコードします。

    $ echo <tls.crt> | base64 -d > ca.crt
  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
  5. 内部レジストリーにログインします。

    $ 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)
  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>
  7. ODO_BOOTSTRAPPER_IMAGE 環境変数を設定してデフォルトの odo init イメージパスを上書きします。

    $ export ODO_BOOTSTRAPPER_IMAGE=<registry_path>/openshiftdo/odo-init-image-rhel7:1.0.1
2.4.2.2.2. init イメージを MacOS 上で直接プッシュする

手順

  1. デフォルトのルートを有効にします。

    $ oc patch configs.imageregistry.operator.openshift.io cluster -p '{"spec":{"defaultRoute":true}}' --type='merge' -n openshift-image-registry
  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
  3. base64 を使用してミラーレジストリーのルート認証局 (CA) コンテンツをエンコードします。

    $ echo <tls.crt> | base64 -d > ca.crt
  4. クライアントプラットフォームで CA を信頼します。

    $ sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain ca.crt
  5. 内部レジストリーにログインします。

    $ 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)
  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>
  7. ODO_BOOTSTRAPPER_IMAGE 環境変数を設定してデフォルトの odo init イメージパスを上書きします。

    $ export ODO_BOOTSTRAPPER_IMAGE=<registry_path>/openshiftdo/odo-init-image-rhel7:1.0.1
2.4.2.2.3. init イメージを Windows 上で直接プッシュする

手順

  1. デフォルトのルートを有効にします。

    PS C:\> oc patch configs.imageregistry.operator.openshift.io cluster -p '{"spec":{"defaultRoute":true}}' --type='merge' -n openshift-image-registry
  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
  3. base64 を使用してミラーレジストリーのルート認証局 (CA) コンテンツをエンコードします。

    PS C:\> echo <tls.crt> | base64 -d > ca.crt
  4. 管理者として、以下のコマンドを実行して、クライアントプラットフォームの CA を信頼します。

    PS C:\WINDOWS\system32> certutil -addstore -f "ROOT" ca.crt
  5. 内部レジストリーにログインします。

    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)
  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>
  7. ODO_BOOTSTRAPPER_IMAGE 環境変数を設定してデフォルトの odo init イメージパスを上書きします。

    PS C:\> $env:ODO_BOOTSTRAPPER_IMAGE="<registry_path>/openshiftdo/odo-init-image-rhel7:<tag>"

2.4.3. コンポーネントの作成および非接続クラスターへのデプロイ

ミラーリングされたレジストリーを持つクラスターに init イメージをプッシュした後に、アプリケーションでサポートされるビルダーイメージを oc ツールでミラーリングし、環境変数を使用してミラーレジストリーを上書きし、コンポーネントを作成する必要があります。

前提条件

  • クライアントオペレーティングシステムに oc をインストールします。
  • odo をクライアントオペレーティングシステムにインストールします。
  • 内部レジストリーまたはミラーレジストリーが設定された OpenShift Container Platform の制限付きクラスターへのアクセス。
  • odo init イメージをクラスターレジストリーにプッシュします

2.4.3.1. サポートされるビルダーイメージのミラーリング

Node.js の依存関係に npm パッケージを使用し、Java の依存関係に Maven パッケージを使用し、アプリケーションのランタイム環境を設定するには、ミラーレジストリーから適切なビルダーイメージをミラーリングする必要があります。

手順

  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
    
    [...]
  2. サポートされるイメージタグをプライベートレジストリーに対してミラーリングします。

    $ oc image mirror registry.access.redhat.com/rhscl/nodejs-10-rhel7:<tag> <private_registry>/rhscl/nodejs-10-rhel7:<tag>
  3. イメージをインポートします。

    $ oc tag <mirror-registry>:<port>/rhscl/nodejs-10-rhel7:<tag> nodejs-10-rhel7:latest --scheduled

    イメージを定期的に再インポートする必要があります。--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
    
    [...]

2.4.3.2. ミラーレジストリーの上書き

Node.js の依存関係用の npm パッケージおよび Java の依存関係用の Maven パッケージをプライベートミラーレジストリーからダウンロードするには、クラスター上にミラー npm または Maven レジストリーを作成し、設定する必要があります。その後、既存のコンポーネントで、または新規コンポーネントの作成時にミラーレジストリーを上書きできます。

手順

  • 既存のコンポーネントでミラーレジストリーを上書きするには、以下を実行します。

    $ odo config set --env NPM_MIRROR=<npm_mirror_registry>
  • コンポーネントの作成時にミラーレジストリーを上書きするには、以下を実行します。

    $ odo component create nodejs --env NPM_MIRROR=<npm_mirror_registry>

2.4.3.3. odo を使用した Node.js アプリケーションの作成

Node.js コンポーネントを作成するには、Node.js アプリケーションをダウンロードし、odoでソースコードをクラスターにプッシュします。

手順

  1. 現在のディレクトリーをアプリケーションのあるディレクトリーに切り替えます。

    $ cd <directory name>
  2. Node.js タイプのコンポーネントをアプリケーションに追加します。

    $ odo create nodejs
    注記

    デフォルトで、最新イメージが使用されます。また、odo create openshift/nodejs:8 を使用してイメージのバージョンを明示的に指定できます。

  3. 初期ソースコードをコンポーネントにプッシュします。

    $ odo push

    これで、コンポーネントは OpenShift Container Platform にデプロイされます。

  4. URL を作成し、以下のようにローカル設定ファイルにエントリーを追加します。

    $ odo url create --port 8080
  5. 変更をプッシュします。これにより、URL がクラスターに作成されます。

    $ odo push
  6. コンポーネントに必要な URL を確認するために URL を一覧表示します。

    $ odo url list
  7. 生成された URL を使用してデプロイされたアプリケーションを表示します。

    $ curl <URL>