はじめに
Code Engine では、アプリを公開する際の公開範囲として "パブリック" や "プライベート" を指定して公開することができます。プライベート公開アプリへのアクセスには CSE 経由、あるいは VPE (Virtual Private Endpoint) を定義し、VPC のサブネットから割り振られるアドレスをプロジェクトに割り当てることができます。
本記事では、アクセス元のロケーションに応じてどのようなアクセス・パターンがあるかを記載します。
環境
全体構成は以下です。VPC内からのアクセスとClient PCからのアクセスを実施します。
準備
Code Engineアプリの設定
今回はデフォルトで提供されている以下のコンテナ・イメージを利用しました。
・icr.io/codeengine/helloworld
VPN for VPCの設定
VPNのルーティング設定にて、CSEを利用できるよう追加しています。
VPNの作成は以下を参照ください。
Qiita:IBM Cloud:Client to Site型VPNでVPC環境に接続する (Secrets Manager)
VPEの設定
Code Engineのプロジェクトに対して、VPEを作成しています。
(サブネットからIPアドレスが払い出されているのが分かります)
下記記事にて作成方法を記載しています。参照ください。
・IBM Cloud:Code EngineのVPE利用方法
アクセス・パターン
【アクセス不可】 パブリックネットワークからのアクセス
【パターン1】 VPC内のサーバーからのアクセス(VPE利用)
VPC内のサーバーからのアクセスの場合、同VPC内に作成されたVPEを利用することができます。
private domainの名前解決をしたところ、VPEのアドレスが返ってきました。
$ nslookup application-takason-private-domain.private.jp-tok.codeengine.appdomain.cloud
Server: 161.26.0.7
Address: 161.26.0.7#53
Non-authoritative answer:
Name: application-takason-private-domain.private.jp-tok.codeengine.appdomain.cloud
Address: 10.50.6.7
Code EngineではFQDNを用いてアプリへのルーティングを行うため、VPEのアドレスではアクセスすることはできません。
NG例:https://10.50.6.7
【パターン2】 VPNを繋いだPCからのアクセス (CSE利用)
private domainの名前解決をしたところ、CSEのアドレスが返ってきました。
$ nslookup application-takason-private-domain.private.jp-tok.codeengine.appdomain.cloud
Server: 161.26.0.10
Address: 161.26.0.10#53
Non-authoritative answer:
application-takason-private-domain.private.jp-tok.codeengine.appdomain.cloud canonical name = cse.s01.jp-tok.codeengine.appdomain.cloud.
Name: cse.s01.jp-tok.codeengine.appdomain.cloud
Address: 166.9.44.33
Name: cse.s01.jp-tok.codeengine.appdomain.cloud
Address: 166.9.40.80
Name: cse.s01.jp-tok.codeengine.appdomain.cloud
Address: 166.9.42.87
つまりこのパターンでは、「パブリックに名前解決をして」「VPNサーバーを経由して」「IBM Cloud のprivate networkを通り」 Code Engineへアクセスしていると分かります。
【パターン3】 VPNを繋いだPCからのアクセス (VPE利用)
VPNを繋いだ状態でVPEを利用する場合、以下をローカルPCの /etc/hosts
に追加する必要があります。
##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting. Do not change this entry.
##
10.50.6.7 application-takason.private.jp-tok.codeengine.appdomain.cloud <- !!追加!!
127.0.0.1 localhost
255.255.255.255 broadcasthost
::1 localhost
この設定後にprivate domainでアクセスすると、無事ブラウザ表示されました。
まとめ
Code EngineにおけるVPE利用の鍵は、以下のようです。
- VPEアドレスを名前解決できる
- FQDNでアクセスする
Client PCからVPN経由でアクセスする場合、特別な要件がない限りCSE経由でアクセスする構成が簡単ですね。