3.6. operator を使用した Self-managed APIcast ゲートウェイソリューションのデプロイ
本セクションでは、Openshift Container Platform コンソールから APIcast operator を使用して Self-managed APIcast ゲートウェイソリューションをデプロイする手順について説明します。
前提条件
- OpenShift Container Platform (OCP) 4 以降およびその管理者権限
- まず APIcast operator のインストール に記載の手順に従う必要があります。
手順
- 管理者権限を持つアカウントを使用して OCP コンソールにログインします。
- Operators > Installed Operators の順にクリックします。
- Installed Operators のリストで APIcast Operator をクリックします。
- APIcast > Create APIcast の順にクリックします。
3.6.1. APIcast のデプロイメントおよび設定オプション
Self-managed APIcast ゲートウェイソリューションは、以下に示す 2 とおりの方法を使用してデプロイおよび設定することができます。
3.6.1.1. 3scale システムエンドポイントを指定する
手順
3scale システム管理ポータルのエンドポイント情報が含まれる OpenShift シークレットを作成します。
oc create secret generic ${SOME_SECRET_NAME} --from-literal=AdminPortalURL=${MY_3SCALE_URL}
-
${SOME_SECRET_NAME}
はシークレットの名前で、既存のシークレットと競合しない限り、任意の名前を付けることができます。 ${MY_3SCALE_URL}
は、3scale アクセストークンおよび 3scale システム管理ポータルのエンドポイントが含まれる URI です。詳細は、THREESCALE_PORTAL_ENDPOINT
を参照してください。例
oc create secret generic 3scaleportal --from-literal=AdminPortalURL=https://access-token@account-admin.3scale.net
シークレットの内容についての詳細は、APIcast Custom Resource reference のEmbeddedConfSecret を参照してください。
-
APIcast の OpenShift オブジェクトを作成します。
apiVersion: apps.3scale.net/v1alpha1 kind: APIcast metadata: name: example-apicast spec: adminPortalCredentialsRef: name: SOME_SECRET_NAME
spec.adminPortalCredentialsRef.name
は、3scale システム管理ポータルのエンドポイント情報が含まれる既存の OpenShift シークレットの名前でなければなりません。APIcast オブジェクトに関連付けられた OpenShift デプロイメントの
readyReplicas
フィールドが 1 であることを確認し、APIcast Pod が動作状態にあり準備が整っていることを確認します。そうでなければ、以下のコマンドを使用してフィールドが設定されるまで待ちます。$ echo $(oc get deployment apicast-example-apicast -o jsonpath='{.status.readyReplicas}') 1
3.6.1.1.1. APIcast ゲートウェイが動作中で利用可能であることの確認
手順
ローカルマシンから OpenShift Service APIcast にアクセス可能であることを確認し、テストリクエストを実行します。そのために、APIcast OpenShift Service を
localhost:8080
にポート転送します。oc port-forward svc/apicast-example-apicast 8080
設定した 3scale サービスに対してリクエストを行い、HTTP 応答が正常であることを確認します。サービスの
Staging Public Base URL
またはProduction Public Base URL
設定で指定したドメイン名を使用します。以下に例を示します。$ curl 127.0.0.1:8080/test -H "Host: myhost.com"
3.6.1.1.2. Kubernetes Ingress 経由での APIcast の外部公開
Kubernetes Ingress 経由で APIcast を外部に公開するには、exposedHost
セクションを設定します。ExposedHost
セクションの host
フィールドを設定すると、Kubernetes Ingress オブジェクトが作成されます。事前にインストールした既存の Kubernetes Ingress Controller はこの Kubernetes Ingress オブジェクトを使用し、APIcast を外部からアクセス可能にします。
APIcast を外部からアクセス可能にするのに使用できる Ingress Controllers およびその設定方法について詳しく知るには、Kubernetes Ingress Controllers のドキュメント を参照してください。
ホスト名 myhostname.com
で APIcast を公開する例を以下に示します。
apiVersion: apps.3scale.net/v1alpha1 kind: APIcast metadata: name: example-apicast spec: ... exposedHost: host: "myhostname.com" ...
この例では、HTTP 用ポート 80 に Kubernetes Ingress オブジェクトを作成します。APIcast デプロイメントが OpenShift 環境にある場合、OpenShift のデフォルト Ingress Controller は APIcast が作成する Ingress オブジェクト使用して Route オブジェクトを作成し、APIcast インストールへの外部アクセスが可能になります。
exposedHost
セクションに TLS を設定することもできます。利用可能なフィールドの詳細を以下の表に示します。
json/yaml フィールド | タイプ | 必須/任意 | デフォルト値 | 説明 |
---|---|---|---|---|
| string | はい | 該当なし | ゲートウェイにルーティングされているドメイン名 |
| []extensions.IngressTLS | いいえ | 該当なし | 受信 TLS オブジェクトの配列。詳細は、TLS を参照してください。 |
3.6.1.2. 設定シークレットの指定
手順
設定ファイルを使用してシークレットを作成します。
$ curl https://raw.githubusercontent.com/3scale/APIcast/master/examples/configuration/echo.json -o $PWD/config.json oc create secret generic apicast-echo-api-conf-secret --from-file=$PWD/config.json
設定ファイルは
config.json
という名前にする必要があります。これは APIcast CRD の要件です。シークレットの内容についての詳細は、APIcast Custom Resource reference のEmbeddedConfSecret を参照してください。
APIcast カスタムリソース を作成します。
$ cat my-echo-apicast.yaml apiVersion: apps.3scale.net/v1alpha1 kind: APIcast metadata: name: my-echo-apicast spec: exposedHost: host: YOUR DOMAIN embeddedConfigurationSecretRef: name: apicast-echo-api-conf-secret $ oc apply -f my-echo-apicast.yaml
埋め込み設定シークレットの例を以下に示します。
apiVersion: v1 kind: Secret metadata: name: SOME_SECRET_NAME type: Opaque stringData: config.json: | { "services": [ { "proxy": { "policy_chain": [ { "name": "apicast.policy.upstream", "configuration": { "rules": [{ "regex": "/", "url": "http://echo-api.3scale.net" }] } } ] } } ] }
APIcast オブジェクトの作成時に以下の内容を設定します。
apiVersion: apps.3scale.net/v1alpha1 kind: APIcast metadata: name: example-apicast spec: embeddedConfigurationSecretRef: name: SOME_SECRET_NAME
spec.embeddedConfigurationSecretRef.name
は、ゲートウェイの設定が含まれる既存の OpenShift シークレットの名前でなければなりません。APIcast オブジェクトに関連付けられた OpenShift デプロイメントの
readyReplicas
フィールドが 1 であることを確認し、APIcast Pod が動作状態にあり準備が整っていることを確認します。そうでなければ、以下のコマンドを使用してフィールドが設定されるまで待ちます。$ echo $(oc get deployment apicast-example-apicast -o jsonpath='{.status.readyReplicas}') 1
3.6.1.2.1. APIcast ゲートウェイが動作中で利用可能であることの確認
手順
ローカルマシンから OpenShift Service APIcast にアクセス可能であることを確認し、テストリクエストを実行します。そのために、APIcast OpenShift Service を
localhost:8080
にポート転送します。oc port-forward svc/apicast-example-apicast 8080
設定した 3scale サービスに対してリクエストを行い、HTTP 応答が正常であることを確認します。サービスの
Staging Public Base URL
またはProduction Public Base URL
設定で指定したドメイン名を使用します。以下に例を示します。$ curl 127.0.0.1:8080/test -H "Host: localhost" { "method": "GET", "path": "/test", "args": "", "body": "", "headers": { "HTTP_VERSION": "HTTP/1.1", "HTTP_HOST": "echo-api.3scale.net", "HTTP_ACCEPT": "*/*", "HTTP_USER_AGENT": "curl/7.65.3", "HTTP_X_REAL_IP": "127.0.0.1", "HTTP_X_FORWARDED_FOR": ... "HTTP_X_FORWARDED_HOST": "echo-api.3scale.net", "HTTP_X_FORWARDED_PORT": "80", "HTTP_X_FORWARDED_PROTO": "http", "HTTP_FORWARDED": "for=10.0.101.216;host=echo-api.3scale.net;proto=http" }, "uuid": "603ba118-8f2e-4991-98c0-a9edd061f0f0"