コンテンツへスキップ

シンクについて

イベントソースを作成する際、ソースからイベントを送信するシンクを指定できます。シンクとは、他のリソースから受信イベントを受け取ることができるアドレス指定可能または呼び出し可能なリソースです。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)をイベントのシンクとして使用するには、次の手順を実行する必要があります。

  1. CRをアドレス指定可能にする必要があります。CRに`status.address.url`が含まれていることを確認する必要があります。詳細については、アドレス指定可能なリソースの仕様を参照してください。

  2. 必要な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ストリームへのイベント送信

サイトトラフィックを理解するために、アナリティクスとCookieを使用しています。サイトの使用に関する情報は、その目的でGoogleと共有されます。詳細はこちら。