第6章 ワークスペースでのクレデンシャルと設定の使用
ワークスペースでクレデンシャルと設定を使用できます。
これを行うには、組織の OpenShift Dev Spaces インスタンスの OpenShift クラスター内の Dev Workspace
コンテナーにクレデンシャルと設定をマウントします。
- クレデンシャルと機密性の高い設定を Kubernetes シークレット としてマウントします。
- 機密性のない設定を Kubernetes ConfigMaps としてマウントします。
クラスター内の Dev Workspace
Pod が認証を必要とするコンテナーレジストリーにアクセスできるようにする必要がある場合は、Dev Workspace
Pod の イメージプルシークレット を作成します。
マウントプロセスでは、標準の Kubernetes マウントメカニズムを使用し、既存のリソースに追加のラベルとアノテーションを適用する必要があります。新しいワークスペースを開始するとき、または既存のワークスペースを再起動するときに、リソースがマウントされます。
さまざまなコンポーネントの永続的なマウントポイントを作成できます。
-
ユーザー固有 の
settings.xml
ファイルなどの Maven 設定 - SSH キーペア
- Git プロバイダーアクセストークン
- AWS 認証トークン
- 設定ファイル
- 永続ストレージ
6.1. シークレットのマウント
機密データをワークスペースにマウントするには、Kubernetes シークレットを使用します。
Kubernetes Secrets を使用すると、ユーザー名、パスワード、SSH キーペア、認証トークン (AWS など)、および機密性の高い設定をマウントできます。
組織の OpenShift Dev Spaces インスタンスの OpenShift クラスター内の Dev Workspace
コンテナーに Kubernetes シークレットをマウントします。
前提条件
-
宛先 OpenShift クラスターへの管理権限を持つアクティブな
oc
セッション。CLI の使用方法 を参照。 -
ユーザープロジェクトですべての
Dev Workspace
コンテナーにマウントする新しいシークレットを作成するか、既存のシークレットを決定している。
手順
Secret のマウントに必要なラベルを Secret に追加します。
$ oc label secret <Secret_name> \ controller.devfile.io/mount-to-devworkspace=true \ controller.devfile.io/watch-secret=true
オプション: アノテーションを使用して、シークレットのマウント方法を設定します。
表6.1 オプションのアノテーション アノテーション 説明 controller.devfile.io/mount-path:
マウントパスを指定します。
デフォルトは
/etc/secret/<Secret_name>
です。controller.devfile.io/mount-as:
リソースのマウント方法を指定します:
file
、subpath
、またはenv
。デフォルトは
file
です。mount-as: file
は、キーと値をマウントパス内のファイルとしてマウントします。mount-as: subpath
は、サブパスボリュームマウントを使用して、マウントパス内のキーと値をマウントします。mount-as: env
は、すべてのDev Workspace
コンテナーに環境変数としてキーと値をマウントします。
例6.1 シークレットをファイルとしてマウント
apiVersion: v1
kind: Secret
metadata:
name: mvn-settings-secret
labels:
controller.devfile.io/mount-to-devworkspace: 'true'
controller.devfile.io/watch-secret: 'true'
annotations:
controller.devfile.io/mount-path: '/home/user/.m2'
data:
settings.xml: <Base64_encoded_content>
ワークスペースを開始すると、/home/user/.m2/settings.xml
ファイルが Dev Workspace
コンテナーで使用可能になります。
Maven を使用すると、settings.xml
ファイルのカスタムパスを設定できます。以下に例を示します。
$ mvn --settings /home/user/.m2/settings.xml clean install
6.1.1. イメージプルシークレットの作成
組織の OpenShift Dev Spaces インスタンスの OpenShift クラスター内の Dev Workspace
Pod が、認証を必要とするコンテナーレジストリーにアクセスできるようにするには、イメージプルシークレットを作成します。
oc
、.dockercfg
ファイル、または config.json
ファイルを使用して、イメージプルシークレットを作成できます。
6.1.1.1. oc
でシークレットをプルするイメージを作成する
前提条件
-
宛先 OpenShift クラスターへの管理権限を持つアクティブな
oc
セッション。CLI の使用方法 を参照。
手順
ユーザープロジェクトで、プライベートコンテナーレジストリーの詳細とクレデンシャルを使用してイメージプルシークレットを作成します。
$ oc create secret docker-registry <Secret_name> \ --docker-server=<registry_server> \ --docker-username=<username> \ --docker-password=<password> \ --docker-email=<email_address>
次のラベルをイメージプルシークレットに追加します。
$ oc label secret <Secret_name> controller.devfile.io/devworkspace_pullsecret=true controller.devfile.io/watch-secret=true
6.1.1.2. .dockercfg
ファイルからイメージプルシークレットを作成する
プライベートコンテナーレジストリーのクレデンシャルを .dockercfg
ファイルにすでに保存している場合は、そのファイルを使用してイメージプルシークレットを作成できます。
前提条件
手順
.dockercfg
ファイルを Base64 にエンコードします。$ cat .dockercfg | base64 | tr -d '\n'
ユーザープロジェクトに新しい OpenShift シークレットを作成します。
apiVersion: v1 kind: Secret metadata: name: <Secret_name> labels: controller.devfile.io/devworkspace_pullsecret: 'true' controller.devfile.io/watch-secret: 'true' data: .dockercfg: <Base64_content_of_.dockercfg> type: kubernetes.io/dockercfg
シークレットを適用します。
$ oc apply -f - <<EOF <Secret_prepared_in_the_previous_step> EOF
6.1.1.3. config.json
ファイルからイメージプルシークレットを作成する
プライベートコンテナーレジストリーのクレデンシャルを $HOME/.docker/config.json
ファイルに既に保存している場合は、そのファイルを使用してイメージプルシークレットを作成できます。
前提条件
手順
$HOME/.docker/config.json
ファイルを Base64 にエンコードします。$ cat config.json | base64 | tr -d '\n'
ユーザープロジェクトに新しい OpenShift シークレットを作成します。
apiVersion: v1 kind: Secret metadata: name: <Secret_name> labels: controller.devfile.io/devworkspace_pullsecret: 'true' controller.devfile.io/watch-secret: 'true' data: .dockerconfigjson: <Base64_content_of_config.json> type: kubernetes.io/dockerconfigjson
シークレットを適用します。
$ oc apply -f - <<EOF <Secret_prepared_in_the_previous_step> EOF
6.1.2. Git プロバイダーアクセストークンの使用
GitHub、GitLab、または Bitbucket の OAuth は、組織の OpenShift Dev Spaces インスタンスの 管理者が設定する 必要があります。管理者が OpenShift Dev Spaces ユーザー用に設定できなかった場合の回避策は、パーソナルアクセストークンを Kubernetes シークレットとして適用することです。
アクセストークンを Secret としてマウントすると、OpenShift Dev Spaces サーバーは、リポジトリーの /.che
および /.vscode
フォルダーへのアクセスを含め、ワークスペースの作成中に複製されたリモートリポジトリーにアクセスできます。
組織の OpenShift Dev Spaces インスタンスの OpenShift クラスターのユーザープロジェクトにシークレットを適用します。
シークレットを適用した後、プライベート GitHub、GitLab、または Bitbucket-server リポジトリーから新しいワークスペースを作成できます。
Git プロバイダーごとに複数のアクセストークンシークレットを作成して適用できます。これらの各 Secret をユーザープロジェクトに適用する必要があります。
前提条件
- 組織の OpenShift Dev Spaces インスタンスが実行されているクラスターのクラスター管理者権限を持っています。
クラスターにログインしました。
ヒントOpenShift では、
oc
コマンドラインツールを使用してクラスターにログインできます。$ oc login "https://devspaces-<openshift_deployment_name>.<domain_name>" --username=<my_user>
手順
- Git プロバイダーの Web サイトでアクセストークンを生成します。
アクセストークンを Base64 にエンコードします。
ヒントオペレーティングシステムに base64 コマンドラインツールがインストールされている場合は、次のコマンドラインを使用できます。
$ echo -n '<your_access_token_string>' | base64
-
Web ブラウザーで
"https://devspaces-<openshift_deployment_name>.<domain_name>"/api/user
アクセスし、レスポンスからid
値をコピーします。これは、OpenShift Dev Spaces ユーザー ID です。 Git プロバイダーの API ドキュメントに従って、Git プロバイダーのユーザー ID を取得します。
-
GitHub: ユーザーを取得します。レスポンスの
id
値を参照してください。 -
GitLab: ユーザーの一覧表示: 通常のユーザー の場合は、
username
フィルターを使用します:/users?username=:username
。レスポンスのid
値を参照してください。 -
Bitbucket Server: ユーザーを取得します。レスポンスの
id
値を参照してください。
-
GitHub: ユーザーを取得します。レスポンスの
新しい OpenShift シークレットを準備します。
kind: Secret apiVersion: v1 metadata: name: personal-access-token-<your_choice_of_name_for_this_token> labels: app.kubernetes.io/component: scm-personal-access-token app.kubernetes.io/part-of: che.eclipse.org annotations: che.eclipse.org/che-userid: <devspaces_user_id>1 che.eclipse.org/scm-personal-access-token-name: <git_provider_name>2 che.eclipse.org/scm-url: <git_provider_endpoint>3 che.eclipse.org/scm-userid: '<git_provider_user_id>'4 che.eclipse.org/scm-username: <git_provider_username> data: token: <Base64_encoded_access_token> type: Opaque
-
"https://devspaces-<openshift_deployment_name>.<domain_name>"/api/kubernetes/namespace
にアクセスして、OpenShift Dev Spaces ユーザーの namespace をname
として取得します。 クラスター内の OpenShift Dev Spaces ユーザー namespace に切り替えます。
ヒントOpenShift の場合:
oc
コマンドラインツールは、クラスター内で現在使用している namespace を返すことができます。これを使用して、現在の namespace を確認できます。$ oc project
必要に応じて、コマンドラインで OpenShift Dev Spaces ユーザー namespace に切り替えることができます。
$ oc project <your_user_namespace>
シークレットを適用します。
ヒントOpenShift では、
oc
コマンドラインツールを使用できます。$ oc apply -f - <<EOF <Secret_prepared_in_step_5> EOF
検証
- Git プロバイダーがホストする リモート Git リポジトリーの URL を使用して、新しいワークスペースを開始します。
- 変更を加えて、ワークスペースからリモート Git リポジトリーにプッシュします。