1.3. サービスメッシュと OpenShift Serverless の統合
Kourier をデフォルトのイングレスとして使用せずに、Service Mesh を OpenShift Serverless と統合できます。このため、以下の手順を完了する前に、Knative Serving コンポーネントをインストールしないでください。Knative Serving をサービスメッシュと統合するために KnativeServing カスタムリソース定義 (CRD) を作成する際に必要な追加の手順があります。これは、一般的な Knative Serving のインストール手順では説明されていません。この手順は、サービスメッシュをデフォルトとして統合し、OpenShift Serverless インストールの唯一のイングレスとして統合する場合に役立ちます。
前提条件
- OpenShift Container Platform に対するクラスター管理者権限があるか、Red Hat OpenShift Service on AWS または OpenShift Dedicated に対するクラスターまたは専用管理者権限がある。
- アプリケーションおよび他のワークロードを作成するために、プロジェクトを作成しているか、適切なロールおよびパーミッションが割り当てられたプロジェクトにアクセスできる。
Red Hat OpenShift Service Mesh Operator をインストールし、
istio-systemnamespace にServiceMeshControlPlaneリソースを作成します。mTLS 機能を使用する場合は、ServiceMeshControlPlaneリソースのspec.security.dataPlane.mtlsフィールドもtrueに設定する必要があります。重要Service Mesh での OpenShift Serverless の使用は、Red Hat OpenShift Service Mesh バージョン 2.0.5 以降でのみサポートされます。
- OpenShift Serverless Operator をインストールしている。
-
OpenShift CLI (
oc) がインストールされている。
手順
サービスメッシュと統合する必要のある namespace をメンバーとして
ServiceMeshMemberRollオブジェクトに追加します。apiVersion: maistra.io/v1 kind: ServiceMeshMemberRoll metadata: name: default namespace: istio-system spec: members:1 - knative-serving - knative-eventing - <namespace>- 1
- サービスメッシュと統合する namespace の一覧。
重要この namespace のリストには、
knative-servingnamespace とknative-eventingnamespace が含まれている必要があります。ServiceMeshMemberRollリソースを適用します。$ oc apply -f <filename>サービスメッシュがトラフィックを受け入れることができるように、必要なゲートウェイを作成します。
HTTP を使用した
knative-local-gatewayオブジェクトの例apiVersion: networking.istio.io/v1alpha3 kind: Gateway metadata: name: knative-ingress-gateway namespace: knative-serving spec: selector: istio: ingressgateway servers: - port: number: 443 name: https protocol: HTTPS hosts: - "*" tls: mode: SIMPLE credentialName: <wildcard_certs>1 --- apiVersion: networking.istio.io/v1alpha3 kind: Gateway metadata: name: knative-local-gateway namespace: knative-serving spec: selector: istio: ingressgateway servers: - port: number: 8081 name: http protocol: HTTP2 hosts: - "*" --- apiVersion: v1 kind: Service metadata: name: knative-local-gateway namespace: istio-system labels: experimental.istio.io/disable-gateway-port-translation: "true" spec: type: ClusterIP selector: istio: ingressgateway ports: - name: http2 port: 80 targetPort: 8081HTTPS を使用した
knative-local-gatewayオブジェクトの例apiVersion: networking.istio.io/v1alpha3 kind: Gateway metadata: name: knative-local-gateway namespace: knative-serving spec: selector: istio: ingressgateway servers: - port: number: 443 name: https protocol: HTTPS hosts: - "*" tls: mode: SIMPLE credentialName: <wildcard_certs>Gatewayリソースを適用します。$ oc apply -f <filename>以下の
KnativeServingカスタムリソース定義 (CRD) を作成して Knative Serving をインストールします。これにより、Istio 統合も有効化されます。apiVersion: operator.knative.dev/v1beta1 kind: KnativeServing metadata: name: knative-serving namespace: knative-serving spec: ingress: istio: enabled: true1 deployments:2 - name: activator annotations: "sidecar.istio.io/inject": "true" "sidecar.istio.io/rewriteAppHTTPProbers": "true" - name: autoscaler annotations: "sidecar.istio.io/inject": "true" "sidecar.istio.io/rewriteAppHTTPProbers": "true"KnativeServingリソースを適用します。$ oc apply -f <filename>以下の
KnativeEventingカスタムリソース定義 (CRD) を作成して Knative Eventing をインストールします。これにより、Istio 統合も有効化されます。apiVersion: operator.knative.dev/v1beta1 kind: KnativeEventing metadata: name: knative-eventing namespace: knative-eventing spec: config: features: istio: enabled1 workloads: - name: pingsource-mt-adapter annotations: "sidecar.istio.io/inject": "true"2 "sidecar.istio.io/rewriteAppHTTPProbers": "true" - name: imc-dispatcher annotations: "sidecar.istio.io/inject": "true" "sidecar.istio.io/rewriteAppHTTPProbers": "true" - name: mt-broker-ingress annotations: "sidecar.istio.io/inject": "true" "sidecar.istio.io/rewriteAppHTTPProbers": "true" - name: mt-broker-filter annotations: "sidecar.istio.io/inject": "true" "sidecar.istio.io/rewriteAppHTTPProbers": "true"
Knative Eventing と Service Mesh の統合は、テクノロジープレビュー機能のみです。テクノロジープレビュー機能は、Red Hat 製品サービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビュー機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行いフィードバックを提供していただくことを目的としています。
Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。
KnativeEventingリソースを適用します。$ oc apply -f <filename>以下の
KnativeKafkaカスタムリソース定義 (CRD) を作成して Knative Kafka をインストールします。これにより、Istio 統合も有効化されます。apiVersion: operator.serverless.openshift.io/v1alpha1 kind: KnativeKafka metadata: name: knative-kafka namespace: knative-eventing spec: channel: enabled: true bootstrapServers: <bootstrap_servers>1 source: enabled: true broker: enabled: true defaultConfig: bootstrapServers: <bootstrap_servers>2 numPartitions: <num_partitions> replicationFactor: <replication_factor> sink: enabled: true workloads:3 - name: kafka-controller annotations: "sidecar.istio.io/inject": "true" "sidecar.istio.io/rewriteAppHTTPProbers": "true" - name: kafka-broker-receiver annotations: "sidecar.istio.io/inject": "true" "sidecar.istio.io/rewriteAppHTTPProbers": "true" - name: kafka-broker-dispatcher annotations: "sidecar.istio.io/inject": "true" "sidecar.istio.io/rewriteAppHTTPProbers": "true" - name: kafka-channel-receiver annotations: "sidecar.istio.io/inject": "true" "sidecar.istio.io/rewriteAppHTTPProbers": "true" - name: kafka-channel-dispatcher annotations: "sidecar.istio.io/inject": "true" "sidecar.istio.io/rewriteAppHTTPProbers": "true" - name: kafka-source-dispatcher annotations: "sidecar.istio.io/inject": "true" "sidecar.istio.io/rewriteAppHTTPProbers": "true" - name: kafka-sink-receiver annotations: "sidecar.istio.io/inject": "true" "sidecar.istio.io/rewriteAppHTTPProbers": "true"
Knative Eventing と Service Mesh の統合は、テクノロジープレビュー機能のみです。テクノロジープレビュー機能は、Red Hat 製品サービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビュー機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行いフィードバックを提供していただくことを目的としています。
Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。
KnativeKafkaリソースを適用します。$ oc apply -f <filename>ServiceEntryをインストールして、Red Hat OpenShift Service Mesh がKnativeKafkaコンポーネントと Apache Kafka クラスター間の通信を認識できるようにします。apiVersion: networking.istio.io/v1alpha3 kind: ServiceEntry metadata: name: kafka-cluster namespace: knative-eventing spec: hosts:1 - <bootstrap_servers_without_port> exportTo: - "." ports:2 - number: 9092 name: tcp-plain protocol: TCP - number: 9093 name: tcp-tls protocol: TCP - number: 9094 name: tcp-sasl-tls protocol: TCP - number: 9095 name: tcp-sasl-plain protocol: TCP - number: 9096 name: tcp-noauth protocol: TCP location: MESH_EXTERNAL resolution: NONE注記spec.portsにリストされているポートは TCP ポートの例であり、Apache Kafka クラスターの設定方法によって異なります。ServiceEntryリソースを適用します。$ oc apply -f <filename>重要ServiceEntry にアドレスが設定されていることを確認してください。アドレスが設定されていない場合は、ホストに関係なく、ServiceEntry で定義されたポート上のすべてのトラフィックが照合されます。
検証
サイドカー挿入が有効で、パススルールートを使用する Knative サービスを作成します。
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: <service_name> namespace: <namespace>1 annotations: serving.knative.openshift.io/enablePassthrough: "true"2 spec: template: metadata: annotations: sidecar.istio.io/inject: "true"3 sidecar.istio.io/rewriteAppHTTPProbers: "true" spec: containers: - image: <image_url>Serviceリソースを適用します。$ oc apply -f <filename>
検証
CA によって信頼されるようになった安全な接続を使用して、サーバーレスアプリケーションにアクセスします。
$ curl --cacert root.crt <service_url>コマンドの例
$ curl --cacert root.crt https://hello-default.apps.openshift.example.com出力例
Hello Openshift!