まだプログラマーですが何か?

プログラマーネタ中心。たまに作成したウェブサービス関連の話も https://twitter.com/dotnsf

タグ:websphere

IBM Cloud から提供されている 30 日間無料 Kubernetes サービスIBM Kubernetes Service 、以下 "IKS")環境を使って利用することのできるコンテナイメージを1日に1個ずつ 30 日間連続で紹介していきます。

環境のセットアップや制約事項については Day0 のこちらの記事を参照してください。

Day 5 は IBM が提供する軽量版の Java アプリケーション・サーバー Websphere Liberty イメージをデプロイする例を紹介します。
4928521



【イメージの概要】
このイメージは IBM が提供する Java EE アプリケーション・サーバーである Websphere Application Server の軽量版として提供されました。


【イメージのデプロイ】
Liberty イメージのデプロイ用 YAML ファイルを公開したので、このファイルを指定してデプロイします。以下のコマンドを実行する前に Day 0 の内容を参照して ibmcloud CLI ツールで IBM Cloud にログインし、クラスタに接続するまでを済ませておいてください。

そして以下のコマンドを実行します:
$ kubectl apply -f https://raw.githubusercontent.com/dotnsf/yamls_for_iks/main/wasliberty.yaml

以下のコマンドで Webspher Liberty 関連の Deployment, Service, Pod, Replicaset が1つずつ生成されたことと、サービスが 30080 番ポートと 30443 番ポートで公開されていることを確認します:
$ kubectl get all

NAME                              READY   STATUS    RESTARTS   AGE
pod/wasliberty-778d6c87d5-b5khl   1/1     Running   0          37s

NAME                 TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                         AGE
service/kubernetes   ClusterIP   172.21.0.1       <none>        443/TCP                         27d
service/wasliberty   NodePort    172.21.161.184   <none>        9080:30080/TCP,9443:30443/TCP   38s

NAME                         READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/wasliberty   1/1     1            1           38s

NAME                                    DESIRED   CURRENT   READY   AGE
replicaset.apps/wasliberty-778d6c87d5   1         1         1       38s

この後に実際にサービスを利用するため、以下のコマンドでワーカーノードのパブリック IP アドレスを確認します(以下の例であれば 161.51.204.190):
$ ibmcloud ks worker ls --cluster=mycluster-free
OK
ID                                                       パブリック IP    プライベート IP   フレーバー   状態     状況    ゾーン   バージョン
kube-c3biujbf074rs3rl76t0-myclusterfr-default-000000df   169.51.204.190   10.144.185.144    free         normal   Ready   mil01    1.20.7_1543*

つまりこの時点で(上述の結果であれば)アプリケーションは http://169.51.204.190:30080/ で稼働している、ということになります。早速実行してみます。ウェブブラウザか curl コマンドを使って、アプリケーションの URL(上述の方法で確認した URL)にアクセスしてみます:
20210723_liberty


Liberty サーバーのトップページが表示されました。無事に IKS 環境へデプロイすることができました。


【YAML ファイルの解説】
YAML ファイルはこちらを使っています:
apiVersion: v1
kind: Service
metadata:
  name: wasliberty
spec:
  selector:
    app: wasliberty
  ports:
  - port: 9080
    name: port0
    protocol: TCP
    targetPort: 9080
    nodePort: 30080
  - port: 9443
    name: port2
    protocol: TCP
    targetPort: 9443
    nodePort: 30443
  type: NodePort
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: wasliberty
spec:
  replicas: 1
  selector:
    matchLabels:
      app: wasliberty
  template:
    metadata:
      labels:
        app: wasliberty
    spec:
      containers:
      - name: wasliberty
        image: websphere-liberty
        ports:
        - containerPort: 9080
        - containerPort: 9443

Deployment 1つと、Service 1つのごくごくシンプルな YAML ファイルですが、一応解説を加えておきます。アプリケーションそのものは 9080 番ポートと 9443 番ポートで動作するように作られているため、NodePort 30080 番および 30443 番をそれぞれ指定して、外部からは 30080 番ポートでアクセスできるようにしています(NodePort として指定可能な番号の範囲は 30000 ~ 32767 です、指定しない場合は空いている番号がランダムに割り振られます)。また ReplicaSet は1つだけで作りました。



デプロイしたコンテナイメージを削除する場合はデプロイ時に使った YAML ファイルを再度使って、以下のコマンドを実行します。不要であれば削除しておきましょう:
$ kubectl delete -f https://raw.githubusercontent.com/dotnsf/yamls_for_iks/main/wasliberty.yaml


【紹介したイメージ】
https://hub.docker.com/_/websphere-liberty


【紹介記録】
Dayカテゴリーデプロイ内容
0準備準備作業
1ウェブサーバーhostname
2Apache HTTP
3Nginx
4Tomcat
5Websphere Liberty
6データベースMySQL
7phpMyAdmin
8PostgreSQL
9pgAdmin4
10MongoDB
11Mongo-Express
12Redis
13RedisCommander
14ElasticSearch
15Kibana
16CouchDB
17CouchBase
18HATOYA
19プログラミングNode-RED
20Scratch
21Eclipse Orion
22Swagger Editor
23R Studio
24Jenkins
25アプリケーションFX
262048
27DOS Box
28VNC Server(Lubuntu)
29Drupal
30WordPress

IBM Bluemix の提供サービスの1つに WAS(WebSphere Application Server) があります:
2017031901
(https://console.ng.bluemix.net/docs/services/ApplicationServeronCloud/index.html)


この IBM Bluemix の WAS サービスを利用する場合、サービスインスタンスのダッシュボード画面から VPN に必要なモジュールや設定ファイルをダウンロードして、VPN で WAS ホスティングサーバーに接続した上で管理コンソールにアクセスしたり、アプリケーションをデプロイしたり、といった手順で管理・利用することが可能になります。

そして必要な設定を変更したり、アプリケーションをデプロイした後に(URL を通知したりして)ユーザーへ公開するわけですが、ユーザーが利用する段階では管理者のように VPN などの利用を条件にしたりはせず、パブリックネットワークから直接アクセスさせるという使い方も少なくないと思います。そのための設定方法を紹介します:
2017031900



まず、IBM Bluemix の WAS サービスをパブリックネットワーク上に公開するには、WAS の HTTP サーバーを 80(http)/443(https) 番ポートで起動させる必要があります(少なくともユーザーにアクセスさせるアプリケーションは 80/443 番ポートで listen している必要があります)。そのため事前に VPN 接続をした状態で WAS 側の設定変更を済ませておく必要があります。WAS Liberty / WAS それぞれの起動ポート番号変更手順については以下を参照ください:
WAS Liberty Core を 80/443 番ポートで動かす
WAS を 80/443 番ポートで動かす


なお、以下は WAS Liberty Core 版の図を使ったりして紹介しますが、WAS フルプロファイル版でも同様だとお考えください。

まずは 80/443 番への起動ポート番号の変更を行った WAS(Liberty) のダッシュボードを IBM Bluemix 上で開きます。以下のようにホストの IP アドレスが確認できる状態になっているはずです(この IP アドレスはプライベートアドレスなので、アクセスするには VPN 接続が必要です):
2017031901


VPN 接続が確立していれば、このアドレスをウェブブラウザで開くと、WAS(Liberty) のトップページが表示されます。他にデプロイ済みのアプリケーションがある場合も同様です:
2017031902


ではこのページに VPN なしでパブリックネットワークからアクセスできるようにするための設定を行います。上記のダッシュボードページに戻り、「パブリック IP へのアクセスを管理」ボタンをクリックします:
2017031903


最初の段階ではまだパブリック IP アドレスが割り振られていないので、「パブリック IP アドレスを要求」します:
2017031904


しばらく処理を待つと先程の画面に戻ります。この時点ではパブリック IP アドレスが割り振られていますが、まだ VPN 内のホストへの転送がクローズされています。再度「パブリック IP へのアクセスを管理」をクリックします:
2017031906


割り振られた IP アドレスからの利用ができるよう、「アクセスのオープン」をクリックします:
2017031907


三度元の画面に戻ってきました。今回は IP がオープンされて、この段階でパブリックアクセスが可能になりました:
2017031908


最後に、(接続済みであれば VPN 接続を切断してから)パブリック IP アドレスにウェブブラウザでアクセスし、元の画面が表示できていることを確認します:
2017031909


なお、この仕組の説明などは以下のドキュメントを参照ください:
https://console.ng.bluemix.net/docs/services/ApplicationServeronCloud/networkEnvironment.html#configureLibertyForPublicAccess


前回(「WAS Liberty Core を 80/443 番ポートで動かす」)の続きです。

今回は軽量版ではなく、いわゆる「フルプロファイル版」などと呼ばれている、従来の WAS(Websphere Application Server)を対象に起動ポート番号を変更する手順を紹介します。また今回も具体的には IBM Bluemix 内の WAS on Bluemix サービスの BASE プランインスタンスを使って紹介します。


では実際に起動ポートを変更します。ウェブブラウザで https://(ホスト名):9433/ibm/console/ にアクセスして管理コンソールを開き、正しいユーザー名とパスワードを入力してログインします:
2017031601


WAS の管理コンソールにアクセスしました:
2017031602


WAS の場合、起動ポート番号はアプリケーションサーバー内の Web コンテナのトランスポートチェーンで管理しています。というわけで、まずは左ペインから サーバー - サーバータイプ - WebSphere Application Server を選択し、アプリケーションサーバーとして起動ポートを変更したいサーバーの名称(デフォルトでは server1)を選択します:
2017031603


選択したアプリケーションサーバー内から Web コンテナー設定 - Web コンテナー・トランスポート・チェーン を選択します:
2017031604


現在設定されている Web トランスポートチェーンの一覧が表示されます。この中に 80 番(http)と 443 番(https)を追加します。まずは 80 番ポートを追加するために「新規作成」ボタンをクリックします:
2017031604


作成するトランスポートチェーンの名称(下図では WCInboundDefault80)を入力し、テンプレートに WebContainer が選択されていることを確認して「次へ」をクリックします:
2017031605


利用するポート番号をここで指定します。「新規ポートの作成」が選択されていることを確認して、ポート名は "80"、ホストは "*" 、ポートは "80" をそれぞれ入力して「次へ」:
2017031606


確認の画面で「終了」を選択します:
2017031607


トランスポートチェーン一覧の画面に戻るので、今回の変更をマスター構成として「保存」します:
2017031608


追加したトランスポートチェーンが一覧に含まれていることを確認します:
2017031609


同様にしてもう1つ、443 番ポート(https)のトランスポートチェーンも新規に作成します。その場合、テンプレートには "WebContainer-Secure" を選択することに注意してください:
2017031601

また、ポート名とポートには "443" を入力します:
2017031602


こうして 80 番ポート(http)と 443 番ポート(https)のトランスポートチェーンが追加されたことを確認します:
2017031603


ここまでの作業ができれば後はサーバーを再起動して、変更を反映するだけです。が、ここも前回紹介した理由により root ユーザー権限でサーバーを起動する必要があります。具体的には ssh 等でログイン後、root ユーザーに su/sudo して、root ユーザー権限でサーバーを止めて、再び起動する、という手順を実行します:

$ sudo /bin/bash

# /opt/IBM/WebSphere/AppServer/bin/stopServer.sh server1

# /opt/IBM/WebSphere/AppServer/bin/startServer.sh server1

# exit

$

これで WAS Liberty Core の時と同様に WAS も 80/443 番ポートで利用できるようになっているはずです。

IBM の Java アプリケーションサーバーである WAS(Websphere Application Server) は標準設定のまま導入して使い始めると、9080 番ポート(http)や 9443 番ポート(https)でサーバーが起動します。これを一般的な 80 番や 443 番で起動させるための設定を紹介します。方法自体はいくつかあるのですが、ここで紹介するのは「とりあえずてっとり早くできる方法」です。 また今回は軽量版である WAS Liberty Core を対象として紹介します(フル機能版は次回)。具体的にはパブリッククラウドであるIBM Bluemix 内の WAS on Bluemix サービスの Liberty Core インスタンスを使って紹介します:


では実際に起動ポートを変更します。WAS Liberty Core の場合はアプリケーションサーバーの server.xml を編集することで変更できるので、まずはこのファイルを探します。

既にアプリケーションサーバーが起動している場合はウェブブラウザからも変更できます。 https://(ホスト名):9080/ にアクセスして、"Open Admin Console" をクリックします:
2017031601


認証が有効に設定されている場合は認証画面になります。正しいユーザー名とパスワードを入力して「送信」します:
2017031602


管理コンソールにアクセスできました。server.xml を編集するには "Server Config" を選択します:
2017031601


構成ファイルとして server.xml が表示されている(これしか表示されてない??)ので、server.xml をクリック:
2017031602


すると server.xml の編集画面に移動します。「ソース」タブで表示すると、XML テキストを直接編集することも可能です:
2017031603


なお、SSH 等でアプリケーションサーバーシステムに直接ログインできる場合であれば、server.xml は以下に存在しているので、このファイルを直接テキストエディタで編集しても構いません:
/opt/IBM/WebSphere/Profiles/Liberty/servers/server1/server.xml


以下の赤字部分4箇所を変更します。変更が完了したら保存(管理コンソールであれば右上のボタン)します:
<server description="Default Hypervisor Server">
  <!-- Simple application server, supporting servlets and jsps -->
  <featureManager>
    <feature>jsp-2.2</feature>
    <feature>adminCenter-1.0</feature>
  </featureManager>
<remoteFileAccess>
<writeDir>${server.config.dir}</writeDir>
</remoteFileAccess>
<virtualHost id="default_host" allowFromEndpointRef="defaultHttpEndpoint">
 <hostAlias>*:80</hostAlias>
 <hostAlias>*:443</hostAlias>
</virtualHost>
<!-- virtualHost id="external_host">
 <hostAlias>*:80</hostAlias>
 <hostAlias>*:443</hostAlias>
</virtualHost -->

  <quickStartSecurity userName="wsadmin" userPassword="{xor}am07ZzlubWg=" />
  <keyStore id="defaultKeyStore" password="{xor}am07ZzlubWg=" />
  <!-- disable automatic configuration and application updates, but leave mbean support enabled -->
  <config updateTrigger="mbean"/>
  <applicationMonitor updateTrigger="mbean" dropinsEnabled="true"/>
  <ssl id="defaultSSLConfig"
     sslProtocol="SSL_TLSv2"
     keyStoreRef="defaultKeyStore"
     clientAuthenticationSupported="true"/>

  <!-- open port 9080 for incoming http connections -->
  <httpEndpoint id="defaultHttpEndpoint"
                host="*"
                httpPort="80"
                httpsPort="443">
      <tcpOptions soReuseAddr="true"/>
  </httpEndpoint>
  <!-- httpEndpoint id="publicHttpEndpoint"
              host="*"
              httpPort="80"
              httpsPort="443">
      <tcpOptions soReuseAddr="true"/>
  </httpEndpoint -->
</server>


設定の変更そのものはこれだけです。後はアプリケーションサーバーを再起動・・・なのですが、OS が Linux の場合はもう1点注意が必要です。

Linux の場合、1024 番未満のポートはデフォルトでは root 権限がないと listen できません
。つまり上記の設定変更をしても再起動の際に root 以外のユーザー権限で再起動するとポートを listen できないのです。

特に IBM Bluemix 環境での場合、OS は RedHat で、その一般ユーザーである virtuser の権限で WAS は起動します。つまり上記の制約をまともに受けてしまうのでした。というわけで、WAS 再起動の際には注意が必要です。具体的にはまず root ユーザーに su(または sudo)し、root ユーザー権限でサーバーを止めて、再び起動、という手順が必要です:
$ sudo /bin/bash

# /opt/IBM/WebSphere/Liberty/bin/server stop server1

# /opt/IBM/WebSphere/Liberty/bin/server start server1

# exit

$


これで WAS Liberty Core が 80/443 番ポートで利用できるようになっているはずです:
2017031603


 

IBM Bluemix にはもともと Liberty for Java という Java アプリケーションサーバーのランタイムが用意されています:
2016011903

軽量な Java アプリケーションサーバーである Liberty は Bluemix 上で簡単に使えて、Bluemix のメリットでもあるスケール対応も容易になり、また PaaS としてのメリットでもあるサーバー資産管理が不要になる、などなど、非常にメリットの多い Java アプリケーションサーバーです。

その一方、「IBM の Java アプリケーションサーバーといえば WAS(WebSphere Application Server)」という認識を持っている人も多いと思います。商用 Java アプリケーションサーバーのデファクトスタンダードとしても君臨しており、今でも多くのお客様の環境内で稼働しています。

これまで WAS 環境を Bluemix で利用することはできませんでしたが、現在は WebSphere Application Server on Bluemix という(ランタイムではなく)サービスの1つとして提供されています:
2016011904


このサービスは WAS のサーバーを IBM Cloud 上にホスティングするサービスです。サーバーへのウェブ管理コンソールが提供され、利用者自身が WAS の設定を管理することができます。なお Bluemix 上ではサービスの1つとして提供されていますが実際にはアプリケーションサーバーであり、ランタイムにバインドして使う、というものではありません(バインド未対応):
2016011905


用意されているエディションは Liberty Core(のホスティング版)、WAS Base、WAS ND(Network Deployment)、WAS v9 Classic(ベータ)、そして既に WAS のライセンスをお持ちのユーザーを対象としたライセンス持ち込み利用エディションの5つです。各エディションのスペックと料金はこのページから個別に確認してください。うち WAS v9 Classic (共有 CPU 1個 + メモリ 2GB + ディスク 12 GB + RedHat Linux)はベータ版ということもあり、2016/Jan/19 時点では無料で提供されています。試しにこのエディションを1インスタンス作ってみます:
2016011906


インスタンス作成後の画面がこちらです。管理コンソールに接続するための情報が書かれていますが、その前にサーバーに VPN 接続をする必要があります。VPN 接続に必要なファイルは「VPN 構成のダウンロード」と書かれたボタンをクリックするとダウンロードできます:
2016011901


ダウンロードしたファイル(openVPNConfig.zip)を展開すると、openvpn というディレクトリが作られ、その中に VPN 接続に必要な構成ファイルや鍵ファイルが含まれていることが確認できます:
2016011902


これらのファイルを使って VPN 接続をします。ファイルは OpenVPN 環境用のものなので、自分の環境にあわせて OpenVPN クライアントをセットアップする必要があります。


追記 Linux 環境であればこちらの記事を参照ください
CentOS に OpenVPN クライアントを導入する


例えば Windows 環境であれば OpenVPN のダウンロードサイトにバイナリのインストーラーがあるので、最新版をダウンロードして実行してインストールするだけです、簡単です:
2016011903


デフォルト設定で導入すると、OpenVPN クライアントの導入先フォルダは C:\Program Files\OpenVPN になります。この下の config ディレクトリ(C:\Program Files\OpenVPN\config)に先程ダウンロード&展開した VPN 接続用の設定ファイルと鍵ファイル一式をコピーします:
2016011904


これで準備は整いました。OpenVPN を実行します:
2016011901


実行直後はタスクバーの中で起動します。この時点ではまだ VPN 接続していないのでタスクバーの OpenVPN GUI を探します:
2016011902


OpenVPN GUI のアイコンを右クリックし、wasaas-uss - 接続 を選択します:
2016011903


すると接続ログがダイアログで表示されます。接続されるまでこのまま待ちます:
2016011904


接続されるとダイアログが消え、タスクバー内の OpenVPN GUI が緑色に変わります。これで VPN 接続ができました:
2016011905


VPN 接続後であれば WAS サービスの画面に表示されていた URL を指定するとウェブ管理コンソールのログイン画面が表示されます。同じ画面に表示されていた ID とパスワードでログインします:
2016011901


無事に管理コンソールが表示されました。ここから先は(いつもの?)WAS のように使うことができます:
2016011902


WAS だけでなく、DB2 についても同様のホスティング環境が IBM DB2 on Cloud サービスとして提供されています。これら2つのサービスを併用することで既存のオンプレミス環境を IBM Cloud(Bluemix)上に移行することが可能になります:
2016011908


柔軟な管理機能はそのままに、クラウドメリットを活用できる WAS のサービスも Bluemix から提供された、ということになります。


このページのトップヘ