This documentation is for a release that is no longer maintained
See documentation for the latest supported version 3 or the latest supported version 4.第5章 開発
5.1. Serverless アプリケーション リンクのコピーリンクがクリップボードにコピーされました!
サーバーレスアプリケーションは、ルートと設定で定義され、YAML ファイルに含まれる Kubernetes サービスとして作成およびデプロイされます。OpenShift Serverless を使用してサーバーレスアプリケーションをデプロイするには、Knative Service
オブジェクトを作成する必要があります。
Knative Service
オブジェクトの YAML ファイルの例
以下の方法のいずれかを使用してサーバーレスアプリケーションを作成できます。
- OpenShift Container Platform Web コンソールからの Knative サービスの作成Developer パースペクティブを使用したアプリケーションの作成 についてのドキュメントを参照してください。
-
Knative (
kn
) CLI を使用して Knative サービスを作成します。 -
oc
CLI を使用して、KnativeService
オブジェクトを YAML ファイルとして作成し、適用します。
5.1.1. Knative CLI を使用したサーバーレスアプリケーションの作成 リンクのコピーリンクがクリップボードにコピーされました!
Knative (kn
) CLI を使用してサーバーレスアプリケーションを作成すると、YAML ファイルを直接修正するよりも合理的で直感的なユーザーインターフェイスが得られます。kn service create
コマンドを使用して、基本的なサーバーレスアプリケーションを作成できます。
前提条件
- OpenShift Serverless Operator および Knative Serving がクラスターにインストールされていること。
-
Knative (
kn
) CLI をインストールしている。 - OpenShift Container Platform でアプリケーションおよび他のワークロードを作成するために、プロジェクトを作成しているか、適切なロールおよびパーミッションを持つプロジェクトにアクセスできる。
手順
Knative サービスを作成します。
kn service create <service_name> --image <image> --tag <tag-value>
$ kn service create <service_name> --image <image> --tag <tag-value>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 詳細は以下のようになります。
-
--image
は、アプリケーションのイメージの URI です。 --tag
は、サービスで作成される初期リビジョンにタグを追加するために使用できるオプションのフラグです。コマンドの例
kn service create event-display \ --image quay.io/openshift-knative/knative-eventing-sources-event-display:latest
$ kn service create event-display \ --image quay.io/openshift-knative/knative-eventing-sources-event-display:latest
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
5.1.2. オフラインモードを使用したサービスの作成 リンクのコピーリンクがクリップボードにコピーされました!
オフラインモードで kn service
コマンドを実行すると、クラスター上で変更は発生せず、代わりにサービス記述子ファイルがローカルマシンに作成されます。記述子ファイルを作成した後、クラスターに変更を伝播する前にファイルを変更することができます。
Knative CLI のオフラインモードはテクノロジープレビュー機能としてのみご利用いただけます。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は実稼働環境でこれらを使用することを推奨していません。テクノロジープレビューの機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行いフィードバックを提供していただくことを目的としています。
Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。
前提条件
- OpenShift Serverless Operator および Knative Serving がクラスターにインストールされていること。
-
Knative (
kn
) CLI をインストールしている。
手順
オフラインモードでは、ローカルの Knative サービス記述子ファイルを作成します。
kn service create event-display \ --image quay.io/openshift-knative/knative-eventing-sources-event-display:latest \ --target ./ \ --namespace test
$ kn service create event-display \ --image quay.io/openshift-knative/knative-eventing-sources-event-display:latest \ --target ./ \ --namespace test
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Service 'event-display' created in namespace 'test'.
Service 'event-display' created in namespace 'test'.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow --target ./
フラグはオフラインモードを有効にし、./
を新しいディレクトリーツリーを保存するディレクトリーとして指定します。既存のディレクトリーを指定せずに、
--target my-service.yaml
などのファイル名を使用すると、ディレクトリーツリーは作成されません。代わりに、サービス記述子ファイルmy-service.yaml
のみが現在のディレクトリーに作成されます。ファイル名には、
.yaml
、.yml
または.json
拡張子を使用できます。.json
を選択すると、JSON 形式でサービス記述子ファイルが作成されます。--namespace test
オプションは、新規サービスをテスト
namespace に配置します。--namespace
を使用せずに、OpenShift クラスターにログインしている場合には、記述子ファイルが現在の namespace に作成されます。それ以外の場合は、記述子ファイルがdefault
の namespace に作成されます。
作成したディレクトリー構造を確認します。
tree ./
$ tree ./
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
--target
で指定する現在の./
ディレクトリーには新しいtest/
ディレクトリーが含まれます。このディレクトリーの名前は、指定の namespace をもとに付けられます。 -
test/
ディレクトリーには、リソースタイプの名前が付けられたksvc
ディレクトリーが含まれます。 -
ksvc
ディレクトリーには、指定のサービス名に従って命名される記述子ファイルevent-display.yaml
が含まれます。
-
生成されたサービス記述子ファイルを確認します。
cat test/ksvc/event-display.yaml
$ cat test/ksvc/event-display.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 新しいサービスに関する情報を一覧表示します。
kn service describe event-display --target ./ --namespace test
$ kn service describe event-display --target ./ --namespace test
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow --target ./
オプションは、namespace サブディレクトリーを含むディレクトリー構造のルートディレクトリーを指定します。または、
--target
オプションで YAML または JSON ファイルを直接指定できます。使用可能なファイルの拡張子は、.yaml
、.yml
、および.json
です。--namespace
オプションは、namespace を指定し、この namespace は必要なサービス記述子ファイルを含むサブディレクトリーのkn
と通信します。--namespace
を使用せず、OpenShift クラスターにログインしている場合には、kn
は現在の namespace をもとに名前が付けられたサブディレクトリーでサービスを検索します。それ以外の場合は、kn
はdefault/
サブディレクトリーで検索します。
サービス記述子ファイルを使用してクラスターでサービスを作成します。
kn service create -f test/ksvc/event-display.yaml
$ kn service create -f test/ksvc/event-display.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.1.3. YAML を使用したサーバーレスアプリケーションの作成 リンクのコピーリンクがクリップボードにコピーされました!
YAML ファイルを使用して Knative リソースを作成する場合、宣言的 API を使用するため、再現性の高い方法でアプリケーションを宣言的に記述することができます。YAML を使用してサーバーレスアプリケーションを作成するには、Knative Service
を定義する YAML ファイルを作成し、oc apply
を使用してこれを適用する必要があります。
サービスが作成され、アプリケーションがデプロイされると、Knative はこのバージョンのアプリケーションのイミュータブルなリビジョンを作成します。また、Knative はネットワークプログラミングを実行し、アプリケーションのルート、ingress、サービスおよびロードバランサーを作成し、Pod をトラフィックに基づいて自動的にスケールアップ/ダウンします。
前提条件
- OpenShift Serverless Operator および Knative Serving がクラスターにインストールされていること。
- OpenShift Container Platform でアプリケーションおよび他のワークロードを作成するために、プロジェクトを作成しているか、適切なロールおよびパーミッションを持つプロジェクトにアクセスできる。
-
OpenShift CLI (
oc
) をインストールしている。
手順
以下のサンプルコードを含む YAML ファイルを作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow YAML ファイルが含まれるディレクトリーに移動し、YAML ファイルを適用してアプリケーションをデプロイします。
oc apply -f <filename>
$ oc apply -f <filename>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.1.4. サーバーレスアプリケーションのデプロイメントの確認 リンクのコピーリンクがクリップボードにコピーされました!
サーバーレスアプリケーションが正常にデプロイされたことを確認するには、Knative によって作成されたアプリケーション URL を取得してから、その URL に要求を送信し、出力を確認する必要があります。OpenShift Serverless は HTTP および HTTPS URL の両方の使用をサポートしますが、oc get ksvc
からの出力は常に http://
形式を使用して URL を出力します。
前提条件
- OpenShift Serverless Operator および Knative Serving がクラスターにインストールされていること。
-
oc
CLI がインストールされている。 - Knative サービスを作成している。
前提条件
-
OpenShift CLI (
oc
) をインストールしている。
手順
アプリケーション URL を検索します。
oc get ksvc <service_name>
$ oc get ksvc <service_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow コマンドの例
oc get ksvc event-delivery
$ oc get ksvc event-delivery
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME URL LATESTCREATED LATESTREADY READY REASON event-delivery http://event-delivery-default.example.com event-delivery-4wsd2 event-delivery-4wsd2 True
NAME URL LATESTCREATED LATESTREADY READY REASON event-delivery http://event-delivery-default.example.com event-delivery-4wsd2 event-delivery-4wsd2 True
Copy to Clipboard Copied! Toggle word wrap Toggle overflow クラスターに対して要求を実行し、出力を確認します。
HTTP 要求の例
curl http://event-delivery-default.example.com
$ curl http://event-delivery-default.example.com
Copy to Clipboard Copied! Toggle word wrap Toggle overflow HTTPS 要求の例
curl https://event-delivery-default.example.com
$ curl https://event-delivery-default.example.com
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Hello Serverless!
Hello Serverless!
Copy to Clipboard Copied! Toggle word wrap Toggle overflow オプション。証明書チェーンで自己署名証明書に関連するエラーが発生した場合は、curl コマンドに
--insecure
フラグを追加して、エラーを無視できます。curl https://event-delivery-default.example.com --insecure
$ curl https://event-delivery-default.example.com --insecure
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Hello Serverless!
Hello Serverless!
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要自己署名証明書は、実稼働デプロイメントでは使用しないでください。この方法は、テスト目的にのみ使用されます。
オプション。OpenShift Container Platform クラスターが認証局 (CA) で署名されているが、システムにグローバルに設定されていない証明書で設定されている場合、
curl
コマンドでこれを指定できます。証明書へのパスは、--cacert
フラグを使用して curl コマンドに渡すことができます。curl https://event-delivery-default.example.com --cacert <file>
$ curl https://event-delivery-default.example.com --cacert <file>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Hello Serverless!
Hello Serverless!
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.1.5. HTTP2 および gRPC を使用したサーバーレスアプリケーションとの対話 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Serverless はセキュアでないルートまたは edge termination ルートのみをサポートします。非セキュアなルートまたは edge termination ルートは OpenShift Container Platform で HTTP2 をサポートしません。gRPC は HTTP2 によって転送されるため、これらのルートは gRPC もサポートしません。アプリケーションでこれらのプロトコルを使用する場合は、Ingress ゲートウェイを使用してアプリケーションを直接呼び出す必要があります。これを実行するには、Ingress ゲートウェイのパブリックアドレスとアプリケーションの特定のホストを見つける必要があります。
この方法は、LoadBalancer
サービスタイプを使用して Kourier Gateway を公開する必要があります。これは、以下の YAML を KnativeServing
カスタムリソース定義 (CRD) に追加して設定できます。
前提条件
- OpenShift Serverless Operator および Knative Serving がクラスターにインストールされていること。
-
OpenShift CLI (
oc
) をインストールしている。 - Knative サービスを作成している。
手順
- アプリケーションホストを検索します。サーバーレスアプリケーションのデプロイメントの確認の説明を参照してください。
Ingress ゲートウェイのパブリックアドレスを見つけます。
oc -n knative-serving-ingress get svc kourier
$ oc -n knative-serving-ingress get svc kourier
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kourier LoadBalancer 172.30.51.103 a83e86291bcdd11e993af02b7a65e514-33544245.us-east-1.elb.amazonaws.com 80:31380/TCP,443:31390/TCP 67m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kourier LoadBalancer 172.30.51.103 a83e86291bcdd11e993af02b7a65e514-33544245.us-east-1.elb.amazonaws.com 80:31380/TCP,443:31390/TCP 67m
Copy to Clipboard Copied! Toggle word wrap Toggle overflow パブリックアドレスは
EXTERNAL-IP
フィールドで表示され、この場合はa83e86291bcdd11e993af02b7a65e514-33544245.us-east-1.elb.amazonaws.com
になります。HTTP 要求のホストヘッダーを手動でアプリケーションのホストに手動で設定しますが、Ingress ゲートウェイのパブリックアドレスに対して要求自体をダイレクトします。
curl -H "Host: hello-default.example.com" a83e86291bcdd11e993af02b7a65e514-33544245.us-east-1.elb.amazonaws.com
$ curl -H "Host: hello-default.example.com" a83e86291bcdd11e993af02b7a65e514-33544245.us-east-1.elb.amazonaws.com
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Hello Serverless!
Hello Serverless!
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Ingress ゲートウェイに対して要求を直接ダイレクトする間に、権限をアプリケーションのホストに設定して gRPC 要求を行うこともできます。
grpc.Dial( "a83e86291bcdd11e993af02b7a65e514-33544245.us-east-1.elb.amazonaws.com:80", grpc.WithAuthority("hello-default.example.com:80"), grpc.WithInsecure(), )
grpc.Dial( "a83e86291bcdd11e993af02b7a65e514-33544245.us-east-1.elb.amazonaws.com:80", grpc.WithAuthority("hello-default.example.com:80"), grpc.WithInsecure(), )
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記直前の例のように、それぞれのポート (デフォルトでは 80) を両方のホストに追加します。
5.1.6. 制限のあるネットワークポリシーを持つクラスターでの Knative アプリケーションとの通信の有効化 リンクのコピーリンクがクリップボードにコピーされました!
複数のユーザーがアクセスできるクラスターを使用している場合、クラスターはネットワークポリシーを使用してネットワーク経由で相互に通信できる Pod、サービス、および namespace を制御する可能性があります。クラスターで制限的なネットワークポリシーを使用する場合は、Knative システム Pod が Knative アプリケーションにアクセスできない可能性があります。たとえば、namespace に、すべての要求を拒否する以下のネットワークポリシーがある場合、Knative システム Pod は Knative アプリケーションにアクセスできません。
namespace へのすべての要求を拒否する NetworkPolicy オブジェクトの例
Knative システム Pod からアプリケーションへのアクセスを許可するには、ラベルを各 Knative システム namespace に追加し、このラベルを持つ他の namespace の namespace へのアクセスを許可する アプリケーション namespace に NetworkPolicy
オブジェクトを作成する必要があります。
クラスターの非 Knative サービスへの要求を拒否するネットワークポリシーは、これらのサービスへのアクセスを防止するネットワークポリシーです。ただし、Knative システム namespace から Knative アプリケーションへのアクセスを許可することにより、クラスターのすべての namespace から Knative アプリケーションへのアクセスを許可する必要があります。
クラスターのすべての namespace から Knative アプリケーションへのアクセスを許可しない場合は、代わりに Knative サービスの JSON Web Token 認証 を使用するようにしてください。Knative サービスの JSON Web トークン認証にはサービスメッシュが必要です。
前提条件
-
OpenShift CLI (
oc
) をインストールしている。 - OpenShift Serverless Operator および Knative Serving がクラスターにインストールされていること。
手順
アプリケーションへのアクセスを必要とする各 Knative システム namespace に
knative.openshift.io/system-namespace=true
ラベルを追加します。knative-serving
namespace にラベルを付けます。oc label namespace knative-serving knative.openshift.io/system-namespace=true
$ oc label namespace knative-serving knative.openshift.io/system-namespace=true
Copy to Clipboard Copied! Toggle word wrap Toggle overflow knative-serving-ingress
namespace にラベルを付けます。oc label namespace knative-serving-ingress knative.openshift.io/system-namespace=true
$ oc label namespace knative-serving-ingress knative.openshift.io/system-namespace=true
Copy to Clipboard Copied! Toggle word wrap Toggle overflow knative-eventing namespace
にラベルを付けます。oc label namespace knative-eventing knative.openshift.io/system-namespace=true
$ oc label namespace knative-eventing knative.openshift.io/system-namespace=true
Copy to Clipboard Copied! Toggle word wrap Toggle overflow knative-kafka namespace
にラベルを付けます。oc label namespace knative-kafka knative.openshift.io/system-namespace=true
$ oc label namespace knative-kafka knative.openshift.io/system-namespace=true
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
アプリケーション namespace で
NetworkPolicy
オブジェクトを作成し、knative.openshift.io/system-namespace
ラベルのある namespace からのアクセスを許可します。サンプル
NetworkPolicy
オブジェクトCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.1.7. init コンテナーの設定 リンクのコピーリンクがクリップボードにコピーされました!
Init コンテナー は、Pod 内のアプリケーションコンテナーの前に実行される特殊なコンテナーです。これらは通常、アプリケーションの初期化ロジックを実装するために使用されます。これには、セットアップスクリプトの実行や、必要な設定のダウンロードが含まれる場合があります。
Init コンテナーを使用すると、アプリケーションの起動時間が長くなる可能性があるため、頻繁にスケールアップおよびスケールダウンすることが予想されるサーバーレスアプリケーションには注意して使用する必要があります。
複数の複数の init コンテナーは単一の Knative サービス仕様でサポートされます。テンプレート名が指定されていない場合、Knative はデフォルトの設定可能な名前付けテンプレートを提供します。初期化コンテナーテンプレートは、Knative Service
オブジェクト仕様に適切な値を追加することで設定できます。
前提条件
- OpenShift Serverless Operator および Knative Serving がクラスターにインストールされていること。
-
Knative サービスに init コンテナーを使用する前に、管理者は
kubernetes.podspec-init-containers
フラグをKnativeServing
カスタムリソース (CR) に追加する必要があります。詳細については、OpenShift Serverless のグローバルコンフィギュレーションドキュメントを参照してください。
手順
initContainers
仕様をKnativeService
オブジェクトに追加します。サービス仕様の例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- イメージのダウンロード時の イメージプルポリシー。
- 2
- init コンテナーイメージの URI。
- 3
- コンテナーファイルシステム内でボリュームがマウントされる場所。
5.1.8. サービスごとの HTTPS リダイレクト リンクのコピーリンクがクリップボードにコピーされました!
networking.knative.dev/http-option
アノテーションを設定することにより、サービスの HTTPS リダイレクトを有効または無効にできます。次の例は、Knative Service
YAML オブジェクトでこのアノテーションを使用する方法を示しています。