【オプション】今回利用したアプリケーションに関する補足

ここでは、デプロイに使用したmanifestファイル(oke-atp-helidon.yaml)の詳細について解説します。

今回は、ATPのユーザ名とパスワードをkubernetesのSecretリソースとして作成し、それらをコンテナ上の環境変数として読み込みアプリケーションで使用しました。
今回のハンズオンでは、以下のmanifestを利用しました。

oke-atp-helidon-handson/oke-atp-helidon.yaml

上記manifestファイルは以下のようになっています。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
apiVersion: v1
kind: Service
metadata:
name: oke-atp-helidon
namespace: default
spec:
type: LoadBalancer
ports:
- port: 80
    protocol: TCP
    targetPort: 8080
selector:
    app: oke-atp-helidon
---
kind: Deployment
apiVersion: apps/v1
metadata:
name: oke-atp-helidon
spec:
selector:
    matchLabels:
    app: oke-atp-helidon
replicas: 2
template:
    metadata:
    labels:
        app: oke-atp-helidon
        version: v1
    spec:
    # The credential files in the secret are base64 encoded twice and hence they need to be decoded for the programs to use them.
    # This decode-creds initContainer takes care of decoding the files and writing them to a shared volume from which db-app container
    # can read them and use it for connecting to ATP.
    containers:
    - name: oke-atp-helidon
        image: iad.ocir.io/orasejapan/workshop/okeatpapp:latest
        imagePullPolicy: Always
        ports:
        - containerPort: 8080
        env:
        - name: javax_sql_DataSource_workshopDataSource_dataSource_user
        valueFrom:
            secretKeyRef:
            name: customized-db-cred
            key: user_name
        - name: javax_sql_DataSource_workshopDataSource_dataSource_password
        valueFrom:
            secretKeyRef:
            name: customized-db-cred
            key: password
        volumeMounts:
        - name: handson
        mountPath: /db-demo/creds              
    imagePullSecrets:
    - name: workshop-ocirsecret
    volumes:
    - name: handson
        configMap:
        name: okeatp

色がついている部分に注目してみましょう。 以下の行は、データベースのユーザとパスワードをコンテナにおける環境変数として設定しており、その値をcustomized-db-credというSecretから読み込んでいます。

    - name: javax_sql_DataSource_workshopDataSource_dataSource_user
    valueFrom:
        secretKeyRef:
        name: customized-db-cred
        key: user_name
    - name: javax_sql_DataSource_workshopDataSource_dataSource_password
    valueFrom:
        secretKeyRef:
        name: customized-db-cred
        key: password

今回の場合は、ユーザ名をjavax_sql_DataSource_workshopDataSource_dataSource_user、パスワードをjavax_sql_DataSource_workshopDataSource_dataSource_passwordという名前の環境変数としてそれぞれSecretリソースから読み込んでいます。

今回は"customized-db-cred"というSecretリソースをATPユーザの作成の手順で作成しました。

このようにkubernetesでは、アプリケーションで使用する機密情報をSecretリソースとして隠蔽し、その値を環境変数として読み込ませることができます。
詳細については公式ドキュメントをご確認ください。

次にWalletファイルについて解説します。

再度manifestファイルを確認してみましょう。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
apiVersion: v1
kind: Service
metadata:
name: oke-atp-helidon
namespace: default
spec:
type: LoadBalancer
ports:
- port: 80
    protocol: TCP
    targetPort: 8080
selector:
    app: oke-atp-helidon
---
kind: Deployment
apiVersion: apps/v1
metadata:
name: oke-atp-helidon
spec:
selector:
    matchLabels:
    app: oke-atp-helidon
replicas: 2
template:
    metadata:
    labels:
        app: oke-atp-helidon
        version: v1
    spec:
    # The credential files in the secret are base64 encoded twice and hence they need to be decoded for the programs to use them.
    # This decode-creds initContainer takes care of decoding the files and writing them to a shared volume from which db-app container
    # can read them and use it for connecting to ATP.
    containers:
    - name: oke-atp-helidon
        image: iad.ocir.io/orasejapan/workshop/okeatpapp:latest
        imagePullPolicy: Always
        ports:
        - containerPort: 8080
        env:
        - name: javax_sql_DataSource_workshopDataSource_dataSource_user
        valueFrom:
            secretKeyRef:
            name: customized-db-cred
            key: user_name
        - name: javax_sql_DataSource_workshopDataSource_dataSource_password
        valueFrom:
            secretKeyRef:
            name: customized-db-cred
            key: password
        volumeMounts:
        - name: handson
        mountPath: /db-demo/creds              
    volumes:
    - name: handson
        configMap:
        name: okeatp

色がついている部分に注目してみましょう。

    volumeMounts:
        - name: handson
        mountPath: /db-demo/creds
    volumes:
    - name: handson
        configMap:
        name: okeatp

今回は"okeatp"というConfigmapリソースをATPユーザの作成の手順で作成しました。
ここで作成したリソースを53-56行目で"handson"という名前でPodのボリュームに保持しています。

また、50-52行目では、上記で設定した"handson"リソースをコンテナ上の"/db-demo/creds"というパスにマウントしています。

今回は、このマウントしたリソースを構成ファイル(oke-atp-helidon-handson/src/main/resources/META-INF/microprofile-config.properties)で利用しています。

#
# Copyright (c) 2018 Oracle and/or its affiliates. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

# Application properties. This is the default greeting
app.greeting=Hello

# Microprofile server properties
server.port=8080
server.host=0.0.0.0

javax.sql.DataSource.workshopDataSource.dataSourceClassName=oracle.jdbc.pool.OracleDataSource
javax.sql.DataSource.workshopDataSource.dataSource.url=jdbc:oracle:thin:@Demo_HIGH?TNS_ADMIN=/db-demo/creds
javax.sql.DataSource.workshopDataSource.maximumPoolSize=5
javax.sql.DataSource.workshopDataSource.minimumIdle=2

# src/main/resources/web in your source tree
server.static.classpath.location=/web
# default is index.html
server.static.classpath.welcome=index.html
# static content path - default is "/"
# server.static.classpath.context=/static-cp

色がついている部分に注目してみましょう。

javax.sql.DataSource.workshopDataSource.dataSource.url=jdbc:oracle:thin:@Demo_HIGH?TNS_ADMIN=/db-demo/creds

jdbc:oracle:thin:@Demo_HIGH?TNS_ADMIN=/db-demo/credsがWalletファイルを読み込んでいる部分になります。
ここに先ほどmanifestでマウントしたパスが設定されています。
これでアプリケーションからKubernetesのConfigmapに設定したWalletファイルを利用することができます。