シンクについて¶
イベントソースを作成する際、ソースからイベントを送信するシンクを指定できます。シンクとは、他のリソースから受信イベントを受け取ることができるアドレス指定可能または呼び出し可能なリソースです。Knativeサービス、チャネル、ブローカーはすべてシンクの例です。
アドレス指定可能なオブジェクトは、`status.address.url`フィールドで定義されたアドレスにHTTP経由で配信されたイベントを受け取り、確認応答します。特別なケースとして、コアKubernetes Serviceオブジェクトもアドレス指定可能インターフェースを満たします。
呼び出し可能なオブジェクトは、HTTP経由で配信されたイベントを受け取り、イベントを変換し、HTTPレスポンスで0個または1個の新しいイベントを返すことができます。これらの返されたイベントは、外部イベントソースからのイベントと同じ方法でさらに処理される可能性があります。
パラメータとしてのシンク¶
シンクは、シンクとして使用するURIに解決されるオブジェクトへの参照として使用されます。
`sink`定義は次のフィールドをサポートします
フィールド | 説明 | 必須またはオプション |
---|---|---|
ref |
これはアドレス指定可能なオブジェクトを指します。 | `uri`を使用していない場合必須 |
ref.apiVersion |
参照先のAPIバージョン。 | `ref`を使用する場合必須 |
ref.kind |
参照先のkind。 | `ref`を使用する場合必須 |
ref.namespace |
参照先のネームスペース。省略した場合は、それを保持するオブジェクトのデフォルトになります。 | オプション |
ref.name |
参照先の名前。 | `ref`を使用する場合必須 |
uri |
これは、ターゲットを指す空ではないスキームと空ではないホストを持つ絶対URL、または相対URIです。相対URIは、Refから取得したベースURIを使用して解決されます。 | `ref`を使用していない場合必須 |
注記
`ref`と`uri`の少なくとも一方は必須です。両方が指定されている場合、`uri`はAddressable `ref`の結果からURLに解決されます。
シンクパラメータの例¶
次のYAMLの場合、`ref`が` "http://mysink.default.svc.cluster.local"`に解決されると、`uri`が追加され、` "http://mysink.default.svc.cluster.local/extra/path"`になります。
apiVersion: sources.knative.dev/v1
kind: SinkBinding
metadata:
name: bind-heartbeat
spec:
...
sink:
ref:
apiVersion: v1
kind: Service
namespace: default
name: mysink
uri: /extra/path
契約
これにより、`subject`上の`K_SINK`環境変数が` "http://mysink.default.svc.cluster.local/extra/path"`として設定されます。
カスタムリソースをシンクとして使用¶
Kubernetesカスタムリソース(CR)をイベントのシンクとして使用するには、次の手順を実行する必要があります。
-
CRをアドレス指定可能にする必要があります。CRに`status.address.url`が含まれていることを確認する必要があります。詳細については、アドレス指定可能なリソースの仕様を参照してください。
-
必要なRBACルールをシンクがイベントを受信できるようにするために、Addressable-resolver ClusterRoleを作成します。
たとえば、`kafkasinks-addressable-resolver` ClusterRoleを作成して、KafkaSinkオブジェクトとステータスへの`get`、`list`、`watch`アクセスを許可できます。
kind: ClusterRole apiVersion: rbac.authorization.k8s.io/v1 metadata: name: kafkasinks-addressable-resolver labels: kafka.eventing.knative.dev/release: devel duck.knative.dev/addressable: "true" # Do not use this role directly. These rules will be added to the "addressable-resolver" role. rules: - apiGroups: - eventing.knative.dev resources: - kafkasinks - kafkasinks/status verbs: - get - list - watch
トリガーを使用してシンクに送信されるイベントをフィルタリング¶
トリガーをシンクに接続して、イベントがシンクに送信される前にフィルタリングできます。トリガーに接続されているシンクは、トリガーリソース仕様で`subscriber`として設定されます。
例:
apiVersion: eventing.knative.dev/v1
kind: Trigger
metadata:
name: <trigger-name>
spec:
...
subscriber:
ref:
apiVersion: eventing.knative.dev/v1alpha1
kind: KafkaSink
name: <kafka-sink-name>
ここで;
- `<trigger-name>`は、シンクに接続されているトリガーの名前です。
- `<kafka-sink-name>`は、KafkaSinkオブジェクトの名前です。
kn CLI --sinkフラグを使用したシンクの指定¶
Knative( `kn`)CLIを使用してイベント生成CRを作成する場合、`--sink`フラグを使用して、そのリソースからイベントを送信するシンクを指定できます。
次の例では、サービス`http://event-display.svc.cluster.local`をシンクとして使用するSinkBindingを作成します。
kn source binding create bind-heartbeat \
--namespace sinkbinding-example \
--subject "Job:batch/v1:app=heartbeat-cron" \
--sink http://event-display.svc.cluster.local \
--ce-override "sink=bound"
`http://event-display.svc.cluster.local`の`svc`は、シンクがKnativeサービスであることを示します。他のデフォルトのシンクプレフィックスには、チャネルとブローカーがあります。
ヒント
`kn` CLIコマンドで`--sink`フラグで使用できるリソースを構成するには、`kn`をカスタマイズします。
サポートされているサードパーティのシンクタイプ¶
名前 | メンテナー | 説明 |
---|---|---|
JobSink | Knative | 長時間実行バックグラウンドジョブのトリガー |
KafkaSink | Knative | Kafkaトピックへのイベント送信 |
RedisSink | Knative | Redisストリームへのイベント送信 |