[OCI] WebLogic Server for OKE をプロビジョニングしてみた

[Oracle WebLogic Server for OKE が Oracle Cloud Marketplace から利用可能に](https://blogs.oracle.com/oracle4engineer/wls4oke-byol)

Oracle WebLogic Server for Oracle Cloud Infrastructure Container Engine for Kubernetes（WebLogic Server for OKE）が Oracle Cloud Marketplaceから利用可能になったので、プロビジョニングして動作確認してみました。

チュートリアルが公開されているので、これに基づいてプロビジョニングします。チュートリアルには設定値の具体例や画面のイメージが不足している部分もあるので、本文とチュートリアルを見比べながらプロビジョニングするとよいかもしれません。また試してみた上での留意点、補足説明についても本文中に一部加筆しています。

[Get Started with Oracle WebLogic Server for Oracle Cloud Infrastructure Container Engine for Kubernetes](https://docs.oracle.com/en/cloud/paas/weblogic-container/wlkgs/index.html#xd_co_f=NTkzYjg2ZDQtZjgxYS00MzE3LThjOWEtMWJiMGQ3NzdiOGY4~)



# はじめに

WebLogic Server for OKE のトポロジーには以下の構成要素が含まれるようですが、ここでは詳細には触れずチュートリアルのプロビジョニングを進めていきます。
※ トポロジ―の概要は前述の利用可能に関するURLをご覧ください。

プロビジョニング完了後にWebLogicの管理コンソールにアクセスしたり、Kubectl コマンドを実行したりします。

![image-20210409131255709.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/c61397ae-ebb3-5e71-a076-2b0d7bf96321.png)

# プロビジョニング準備



## 前提条件

プロビジョニングにあたり以下が必要です。

- Oracle Cloud  Infrastructure（以後OCI）の管理者権限を持つユーザー名とパスワード

- 利用可能なOCIコンパートメント

- OCI 認証トークン（未取得の場合は取得方法を後述）

- SSH公開鍵と秘密鍵

  

## 1. ボールトとキーの作成

OCIにサインイン後、左上のナビゲーションメニューから[セキュリティ]-[ボールト]を選択し、**ボールトの作成** をおこないます。
![image-20210408152324488.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/c11f22c9-2758-1178-edec-78ae1b51e10d.png)
**[コンパートメントに作業]** 利用可能なコンパートメントを指定
**[名前]** ボールトの名前を指定。例）WebLogicOKEVault
**ボールトの作成** をクリックし、ボールトの作成を待ちます。

新たに作成されたボールトをクリックし、左下リソースから**マスター暗号化キー**を選択し、**キーの作成**をクリックし暗号化キーを作成します。
![image-20210408152509290.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/3c4624d4-180a-b504-e797-a0a186dd20e4.png)
**[コンパートメントに作業]** 利用可能なコンパートメントを指定
**[名前]** キーの名前を指定。例）WebLogicOKEKey
**キーの作成** をクリックし、キーが作成されるのを待ちます。

キーが作成されて有効になりました。
![image-20210408152655820.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/116306f7-559e-7daa-c15c-3f4811b386a8.png)

## 2. シークレットの作成

### 2-1. WebLogic サーバー管理者のシークレットを作成

ボールトのリソースからシークレットを選択し、**シークレットの作成**をクリックします。
![image-20210408153040079.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/ad0877bf-03a6-0179-687c-81fec4d58b25.png)
**[コンパートメントに作業]** 利用可能なコンパートメントを指定
**[名前]** シークレットの名前を指定。例）WebLogicAdminSecret
**[暗号化キー]** 作成済みの暗号化キーを選択します。例）WebLogicOKEKey
**[シークレット・コンテンツ]** WebLogicサーバーの管理者のパスワードを指摘します。例）WelcomeXXXX
**シークレットの作成** をクリックし、シークレットが作成されるのを待ちます。

新たに作成されたWebLogic 管理者のためのシークレットをクリックし、OCID をコピーします。
**このOCIDはあとでプロビジョニング時に使うので、コピーして保持しておきます。**
![image-20210408153206677.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/ec79c5bf-f834-92ce-9479-d174e7f06727.png)

### 2-2. レジストリユーザーのシークレットを作成
レジストリユーザーはOCIにサインインするユーザーであることを前提としています。ダッシュボード右上の人アイコンをクリックしプロファイルを表示し、**ユーザー設定**を選択します。
![image-20210409143157323.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/60c8c532-b241-1b47-42fa-4f662ff8ce31.png)
ユーザーの詳細が表示されるので、左下リソースから**認証トークン**を選択し、**トークンの作成**をおこないます。
![image-20210408154237412.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/3793cd3b-1278-a5e0-f6c4-fe2d575d1873.png)
**説明**を記入して**トークンの作成**をクリックします。
![image-20210408154315574.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/e87f3b34-a7bc-7d52-a2c1-dd8cde095c1f.png)
**トークンが生成**されるので、生成されたトークンをコピーしておきます。
![image-20210408154341449.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/32de07bc-8a47-5219-dbe7-81f4682b9400.png)
生成されたトークンは、例えば次のような表記になってます。**次のシークレットの作成で使うのでコピーを保持しておきます。**

```
tF)9wtx{4]YF6LGSPE(}
```

**ボールトの詳細**に戻り**認証トークン**のシークレットを作成します。
![image-20210408154723964.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/48fbf897-f85a-42f5-be30-d489e428e22b.png)
**[コンパートメントに作業]** 利用可能なコンパートメントを指定
**[名前]** シークレットの名前を指定。例）TokenSecret
**[暗号化キー]** 作成済みの暗号化キーを選択します。例）WebLogicOKEKey
**[シークレット・コンテンツ]** コピーしておいた認証トークンを指定します。
**シークレットの作成** をクリックし、シークレットが作成されるのを待ちます。

新たに作成された認証トークンのシークレットをクリックし、OCID をコピーします。
**このOCIDはあとでプロビジョニング時に使うので、コピーして保持しておきます。**
![image-20210408154859287.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/10cdf66a-2604-969d-84fe-fdb572f7aeff.png)
以下のように２つのシークレットが追加されました。
![image-20210408155026636.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/4d09c801-8b8c-d35a-a212-fc5da29f7593.png)


## スタックの作成 - プロビジョニング開始
ナビゲーションメニューから[マーケットプレース]-[すべてのアプリケーション]を選択し、WebLogic Server for OKEを検索します。
![image-20210408155618047.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/9c434fe0-3201-7f25-f673-1a4907cf33d5.png)
今回は **WebLogic Server Enterprise Edition for OKE UCM** を選択します。バージョンとコンパートメントを指定しOracle使用条件をチェックして、**スタックの起動**します。
![image-20210408155821682.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/988283c3-9917-2942-fc16-18f25ecb08b2.png)
はじめに*[スタック情報]* 画面が表示されます。
![image-20210409104010776.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/b4844d63-a48c-d61d-e810-eddf6dc237cd.png)
**[名前 オプション]** スタックの名前を指定します。例）wls4okestack07 としてます。
**次** をクリックし進みます。

*[変数の構成]* 画面が表示されます。
![image-20210409103811462.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/fea4fb77-c045-6999-53ed-d1738fb3f1f0.png)
**[Resource Name Prefix]** **スタックにより作成されるリソースに付与される接頭語**です。作成される vcn や、compute、loadbalancer の先頭に指定した文字列が付与されます。例）wls4oke07 としてます。
※ 既存環境の接頭語と重複しないよう注意してください。重複するとスタックのジョブ実行で失敗することもありました。
**[SSL Public Key]** SSHパブリックファイルを選択
**[Managed Server Count]** WebLogic管理対象サーバー数を指定。デフォルトのまま **2** としてます。
**[Administration User Name]** WebLogic管理者ユーザーの名前を指定します。例) wlsadmin
**[Secret OCID for Administration Password]**保持しておいたWebLogic管理者ユーザーのパスワードのシークレットのOCIDを指定します。 
例）ocid1.vaultsecret.oc1.uk-london-1.amaaaaaassl65iqa566c4b4pppabskfxe4hmpdtbnqsie5nsxvmgbbiv6xxx

続いてNetwork 情報を設定します。
![image-20210408160617877.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/7f2238f9-c793-88c0-bf2b-2d0af70f7ac2.png)
**[Virtual Cloud Network Strategy]** VCNを新規で作成します。
あとはデフォルトのままとしてます。

続いてContainer Cluster (OKE) Configration 情報を設定します。
![image-20210408160737448.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/8759e5b5-d966-65ab-ab51-74e3aae7e3fb.png)
すべてデフォルトのままとします。

続いてContainer Cluster (OKE) Administration Instance 情報、ほかを設定します。Availability Domain を指定して、あとはデフォルトのままで進めます。
![image-20210408160852974.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/6785fbb6-c575-91be-b5c1-1bf41e6725f5.png)

最後にRepository (OCIR) 情報を設定します。
![image-20210408161358554.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/413c83e6-5aac-5d75-9fc8-a425d1a80e17.png)
**[Registory User Name]** レジストリユーザーの名前を指定します。2-2 で**ユーザーの詳細**画面で表示されたユーザー名を指定します。
**例) oracleidentitycloudservice/xxxx.xxxx@oracle.com**
※ レジストリユーザーの指定が正しくないとスタックのジョブ実行中に、OCIRの接続に失敗する旨のエラーがでてジョブが失敗してました。

**[Secret OCID for Authentication Token]** 保持しておいたレジストリユーザー認証トークンのシークレットのOCIDを指定します。 
例）ocid1.vaultsecret.oc1.uk-london-1.amaaaaaassl65iqatyneddarrkyttcwgymfj3zsjiet7nk4ne6ujnbtroxxx

**次** をクリックすると、**確認**画面が表示されます。設定内容をチェックして**作成** でスタックのジョブを開始します。
![image-20210408161511338.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/9d45670d-d035-df8b-2e15-11d0629303a2.png)
ジョブが開始されました。ログに進行状況が表示されます。
![image-20210409104256886.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/a9dc144f-6584-d00b-6835-0c67c8a5de92.png)
成功すると緑色（失敗した場合には赤色）で表示されます。ジョブが成功して完了するまでに24分程度を要しました。(ロンドンリージョンを利用)
![image-20210409104431021.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/6db22c3b-90ee-bfca-e57a-3b6be620f7a6.png)

## WebLogic管理コンソールへの接続
成功したスタックの詳細のログを参照します。
![image-20210412090644226.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/f25ec98f-0a8b-7919-7def-4b7ef46770ab.png)
ログから次の情報をコピーします。

- Bastion_Instance_Public_IP =   "132.145.xxx.xxx" （踏み台サーバー：パブリックIPアドレス）
- "weblogic_console_url"": ""http://10.0.3.14/console"（プライベートIPアドレス）

### ダイナミック・ポートフォワーディングでの接続
WebLogic 管理コンソールには、踏み台サーバからダイナミック・ポートフォワーディングで接続します。
SSHコマンドでの書式は以下です。

```
ssh -C -D port_for_socks_proxy -i path_to_private_key opc@bastion_public_ip
```

実際には以下の記述です。例）

```
ssh -C -D 9999 -i ~/.ssh/id_rsa opc@132.145.xxx.xxx
```

#### 準備 - WebブラウザのSocksホスト設定
**Webブラウザ(Firefox使用)にSocksホストの設定（ポート9999に設定）が必要です。**詳細は、以下をご覧ください。
[[OCI] SSHポートフォワーディングしてみた](https://qiita.com/cocotaro0202/items/191a6b73e0869a70767b)

#### 1. ダイナミック・ポートをワーディングの有効化
ラップトップPC（Windows10）のPowerShell を起動して、ダイナミック・ポートフォワーディングを実施します。
![image-20210409105239801.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/98d4e09e-9c52-150a-d75a-9fba728e50ac.png)

#### 2. WebLogic管理コンソールの起動
続いて、WebLogic管理コンソールのURL http://10.0.3.14/console をFoxfire のURL部に記述し実行します。
ダイナミック・ポートフォワーディングが正しく設定されていれば、WebLogic 管理コンソールが表示されます。
![image-20210409105521098.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/971dc52d-983f-2c1b-70fc-9266c5b2987c.png)
ユーザー名/パスワードを入力してログインします。
![image-20210409105725951.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/380d5a4c-41eb-c2ed-209d-b4bcf0bed098.png)
サーバー項目を選択すると、管理サーバー、管理対象サーバー(２台)が実行状態(RUNNING)であることが確認できました。

```
wls4oke07-adminserver ポート7001 : 管理サーバー
wls4oke07-managedserver1 ポート8001 : 管理対象サーバー1
wls4oke07-managedserver2 ポート8001 : 管理対象サーバー2
```

おまけで、jenkins を呼び出しても接続に成功することが確認できました。
![image-20210409105937101.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/00fa7543-9a5e-4601-25d9-bf8c20e7d64d.png)

## 管理ホストへの接続
前述の構成図のプライベート・サブネットの管理ホストに接続して、管理ホストからkubectlコマンドツールでOKEのクラスタ環境にアクセスします。
スタックの詳細の**出力**を表示します。
![image-20210409111116233.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/6ca4c255-9d66-3167-bae4-17385b7b0a3e.png)
以下をコピーします。

- admin_instance_private_ip 10.0.2.8　（プライベートIPアドレス）
- bastion_instance_public_ip 132.145.xxx.xxx （踏み台サーバー：パブリックIPアドレス）

### 1. 管理ホストへの接続
踏み台サーバーを経由して、管理ホストへ接続します。

#### 1-1. 踏み台サーバーへの接続
はじめに踏み台サーバーに接続します。

```
ssh -i ~/.ssh/id_rsa opc@132.145.xxx.xxx
```

#### 1-2. プライベート・サブネットの管理ホストへ接続
続いて、踏み台サーバーから管理ホストへ接続します。

```
ssh -i ~/.ssh/id_rsa opc@10.0.2.8
```

※ 踏み台サーバーに秘密鍵をコピーし、権限を変更しておく必要があります。詳細は以下をご覧ください。
[[OCI] 踏み台サーバーからSSHでプライベート・サブネットのインスタンスへの接続と、NATゲートウェイを試してみる](https://qiita.com/cocotaro0202/items/7b115b108bb9f03b90a6)

続けて、実行すると以下のようになります。
![image-20210412103712049.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/1b941425-e7ea-ebd7-cb9c-a96d960b3a3e.png)
最終的に管理ホストのプロンプトが表示され、プライベート・サブネットの管理ホストへ接続できました。

```
[opc@wls4oke07-admin ~]$
```

### 2. WebLogicドメインのポッドを表示

管理ホストからkubectlコマンドを実行します。
1. はじめにネームスペースをリストしWebLogicドメインのネームスペースを見つけます。
2. 続けて、WebLogicドメインのポッドをリストします。
![image-20210412114710639.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/8d0fc42b-3f91-b17f-31cb-2a5c2ee7e4c0.png)
次のようにWebLogicドメインのポッドが表示されました。

```
NAME                                        READY   STATUS    RESTARTS   AGE
wls4oke07domain-wls4oke07-adminserver       1/1     Running   0          26h
wls4oke07domain-wls4oke07-managed-server1   1/1     Running   0          26h
wls4oke07domain-wls4oke07-managed-server2   1/1     Running   0          26h
```



## 参考URL

[[OCI] SSHポートフォワーディングしてみた](https://qiita.com/cocotaro0202/items/191a6b73e0869a70767b)

[[OCI] 踏み台サーバーからSSHでプライベート・サブネットのインスタンスへの接続と、NATゲートウェイを試してみる](https://qiita.com/cocotaro0202/items/7b115b108bb9f03b90a6)

[WebLogic Server for Oracle Cloud Infrastructure をプロビジョニングしてみた](https://qiita.com/cocotaro0202/items/dd0abc4d5ccb40ed94c4)