2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Red Hat OpenShift Administration対策】(3)Openshift上のSecretのPodへの適用例

Last updated at Posted at 2021-02-23

Red Hat openshift Administration試験(EX280)の勉強記事三回目です。
今回は資格情報や証明書を保管するためのSecretと、それをPodが使用できるようにするための例について書きます。

Secretとは

一回目の記事でも書きましたが、OpenshiftにはSecretという資格情報(ユーザーIDやパスワード)や、証明書を保存するために暗号化されたKey-Valueデータを保持する仕組みがあります。
Secretはetcd上にプロジェクト単位(namespace単位)で保管されており、同じプロジェクト内であれば同じSecretへアクセスすることができます。Base64でエンコードされているのですが、プロジェクト単位で権限が与えられているので、同じプロジェクトであれば暗号化された値を取得してデコードすることもぶっちゃけ可能です。

20210211_Openshift上のSecretのPodへの適用例.jpg

Secretは、環境変数としてPodに挿入する方法と、ファイルとしてPodに挿入する方法の二種類があります。例えば資格情報は環境変数としてPodに設定し、証明書はファイルとしてPodに設定することが考えられます。

またSeretを使用するPodを作成した後、Secretを別の値に更新しても稼働中のPodには影響を与えません。更新したSecretをPodが使えるようにするには、Podを再作成する必要がありますので注意してください。

Secretの作成とPodへの挿入

Secretは以下コマンドで作成できます。

oc create secret generic test-secret --from-literal key1=secret1 --from-literal key2=secret2

・環境変数として挿入
環境変数として挿入する場合、oc set env の構文でSecretを指定します。以下が例です。

oc set env deployment/test-deploy --from secret/test-secret

・ファイルとして挿入
ファイル(ボリューム)として挿入する場合、oc set volume の構文でSecretとPod上のマウントポイントを指定します。以下が例です。

oc set volume deployment/test-deploy --add --type secret --secret-name test-secret --mount-path /secret

上記を実行すると、Pod内に/secret/key1ファイルと/secret/key2がマウントされます。key1ファイルの中身にvalue1が、key2ファイルの中身にvalue2が記載されています。

実例

wordpressとmysqlのPodを構築し、それぞれの環境変数をSecretを使用して設定する事を考えます。
今回は環境変数としてユーザーIDやパスワードのSecretをwordpressとmysqlに設定することにします。
またSCCも適用する必要があるので、以下手順はkube-admin権限があるユーザーで実行してください。

手順の流れは以下となります。
(1)ユーザーIDやパスワード等の資格情報が入ったSecret作成
(2)wordpressとmysqlを実行するPodを作成
(3)SecretをPodに環境変数として挿入
(4)Podを実行するサービスアカウントの作成と適用
(5)稼働確認

(1)ユーザーIDやパスワード等の資格情報が入ったSecret作成
wordpressとmysqlに挿入する資格情報が入ったSecretを作成します。以下の通りです。

oc create secret generic wp-secret --from-literal WORDPRESS_DB_HOST=test-mysql --from-literal WORDPRESS_DB_NAME=wpdb --from-literal WORDPRESS_DB_USER=wpuser --from-literal WORDPRESS_DB_PASSWORD=wppassword
oc create secret generic mysql-secret --from-literal MYSQL_DATABASE=wpdb --from-literal MYSQL_USER=wpuser --from-literal MYSQL_PASSWORD=wppassword --from-literal MYSQL_ROOT_PASSWORD=P@ssw0rd

(2)wordpressとmysqlを実行するPodを作成
Podを作成します。最初から環境変数を挿入してPodをデプロイすることもできるのですが、あえてPodを実行してから環境変数を使用するよう変更することにします。

oc new-app --name test-mysql --docker-image mysql
oc new-app --name test-wordpress --docker-image wordpress

上記コマンドを実行しても、環境変数が設定されていないため、deploymentは正しく成功していません。

(3)SecretをPodに環境変数として挿入

oc set env deployment/test-mysql --from secret/mysql-secret
oc set env deployment/test-wordpress --from secret/wp-secret

数十秒ほど待つと、Podが再起動し、環境変数が正しく設定されます。
deploymentの状態がRunningにならない場合は、以下コマンドを実行してPodのエラーメッセージを確認しましょう。

oc get pod
oc logs test-mysql-XXXXXXXXX-XXXXX
oc logs test-wordpress-XXXXXXXXX-XXXXX

(4)Podを実行するサービスアカウントの作成と適用
openshiftでは、デフォルトではセキュリティコンテキスト制約(SCC:Security Context Constraints)が適用されています。これは、作成したPodが外部リソースへアクセスすることを制限する機能です。
この場合、wordpressを実行するためのサービスアカウント(ここではwpsaとします)を作成してセキュリティー・ポリシーを設定しdeploymentに適用することでアクセスができるようになります。次回解説しますが、ここではまず以下のコマンドを実行してください。SCC変更にはcluster-admin権限が必要です。

oc create serviceaccount wpsa
oc adm policy add-scc-to-user anyuid -z wpsa
oc set serviceaccount deployment/test-wordpress wpsa

(5)稼働確認
wordpressアプリケーションのrouteを作成し、curlコマンドを実行してwordpressとmysqlが稼働しており、かつ二つのアプリケーションが通信できることを確認します。

wordpressアプリケーションのrouteを作成

oc expose service/test-wordpress
oc get route

test-wordpressへのルートが作成され、HOST/PORT欄にURLが出力されていることを確認します。

wordpressからMySQLに通信できることを確認

curl -s http://<test-wordpressへのURL>/wp-admin/install.php

wordpressインストールページのソースが表示されれば成功です。

タグに「WordPress Installation」と表示されているはずです。可能であれば、上記URLをそのままブラウザで開いてしまったほうが早いと思います。

ConfigMapの使い方

Secretとは別に、ConfigMapと呼ばれるものを使用してKey-ValueをPodに与えることもできます。ただしConfigMapは暗号化されていません。以下がコマンド例です。

oc create configmap test-configmap --from-literal key1=value1 --from-literal key2=value2
2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?