第1章 Service Mesh の統合


1.1. Service Mesh 2.x と OpenShift Serverless の統合

OpenShift Serverless Operator は、Knative のデフォルト Ingress として Kourier を提供します。ただし、Kourier が有効であるかどうかにかかわらず、OpenShift Serverless でサービスメッシュを使用できます。Kourier を無効にして統合すると、mTLS 機能など、Kourier イングレスがサポートしない追加のネットワークおよびルーティングオプションを設定できます。

次の前提条件と制限事項に注意してください。

  • すべての Knative 内部コンポーネントと Knative Services は Service Mesh の一部であり、サイドカーインジェクションが有効になっています。これは、メッシュ全体で厳密な mTLS が適用されることを意味します。Knative Services へのすべてのリクエストには mTLS 接続が必要で、OpenShift Routing からの呼び出しを除き、クライアントは証明書を送信する必要があります。
  • OpenShift Serverless と Service Mesh の統合では、1 つ のサービスメッシュのみをターゲットにできます。クラスター内には複数のメッシュが存在できますが、OpenShift Serverless はそのうちの 1 つでのみ使用できます。
  • OpenShift Serverless が含まれているターゲット ServiceMeshMemberRoll の変更、つまり OpenShift Serverless を別のメッシュに移動することはサポートされていません。ターゲットの Service Mesh を変更する唯一の方法は、OpenShift Serverless をアンインストールして再インストールすることです。

1.1.1. 前提条件

  • クラスター管理者アクセス権を持つ Red Hat OpenShift Serverless アカウントにアクセスできる。
  • OpenShift CLI (oc) がインストールされている。
  • Serverless Operator がインストールされている。
  • Red Hat OpenShift Service Mesh 2.x Operator がインストールされている。
  • 以下の手順の例では、ドメイン example.com を使用します。このドメインの証明書のサンプルは、サブドメイン証明書に署名する認証局 (CA) として使用されます。

    お使いのデプロイメントでこの手順を完了し、検証するには、一般に信頼されているパブリック CA によって署名された証明書、または組織が提供する CA のいずれかが必要です。コマンドの例は、ドメイン、サブドメイン、および CA に合わせて調整する必要があります。

  • ワイルドカード証明書を OpenShift Container Platform クラスターのドメインに一致するように設定する必要があります。たとえば、OpenShift Container Platform コンソールアドレスが https://console-openshift-console.apps.openshift.example.com の場合は、ドメインが *.apps.openshift.example.com になるようにワイルドカード証明書を設定する必要があります。ワイルドカード証明書の設定に関する詳細は、着信外部トラフィックを暗号化する証明書の作成 のトピックを参照してください。
  • デフォルトの OpenShift Container Platform クラスタードメインのサブドメインではないものを含むドメイン名を使用する必要がある場合は、これらのドメインのドメインマッピングを設定する必要があります。詳細は、OpenShift Serverless ドキュメントの カスタムドメインマッピングの作成 を参照してください。
重要

OpenShift Serverless は、このドキュメントで明示的に文書化されている Red Hat OpenShift Service Mesh 機能の使用のみをサポートし、文書化されていない他の機能はサポートしません。

Service Mesh での Serverless 1.31 の使用は、Service Mesh バージョン 2.2 以降でのみサポートされます。1.31 以外のバージョンの詳細と情報は、「Red Hat OpenShift Serverless でサポートされる構成」ページを参照してください。

1.1.2. 着信外部トラフィックを暗号化する証明書の作成

デフォルトでは、サービスメッシュ mTLS 機能は、Ingress ゲートウェイとサイドカーを持つ個々の Pod 間で、サービスメッシュ自体内のトラフィックのみを保護します。OpenShift Container Platform クラスターに流入するトラフィックを暗号化するには、OpenShift Serverless とサービスメッシュの統合を有効にする前に証明書を生成する必要があります。

前提条件

  • OpenShift Container Platform に対するクラスター管理者権限があるか、Red Hat OpenShift Service on AWS または OpenShift Dedicated に対するクラスターまたは専用管理者権限がある。
  • OpenShift Serverless Operator および Knative Serving がインストールされている。
  • OpenShift CLI (oc) がインストールされている。
  • アプリケーションおよび他のワークロードを作成するために、プロジェクトを作成しているか、適切なロールおよびパーミッションが割り当てられたプロジェクトにアクセスできる。

手順

  1. Knative サービスの証明書に署名する root 証明書と秘密鍵を作成します。

    $ openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 \
        -subj '/O=Example Inc./CN=example.com' \
        -keyout root.key \
        -out root.crt
    Copy to Clipboard Toggle word wrap
  2. ワイルドカード証明書を作成します。

    $ openssl req -nodes -newkey rsa:2048 \
        -subj "/CN=*.apps.openshift.example.com/O=Example Inc." \
        -keyout wildcard.key \
        -out wildcard.csr
    Copy to Clipboard Toggle word wrap
  3. ワイルドカード証明書を署名します。

    $ openssl x509 -req -days 365 -set_serial 0 \
        -CA root.crt \
        -CAkey root.key \
        -in wildcard.csr \
        -out wildcard.crt
    Copy to Clipboard Toggle word wrap
  4. ワイルドカード証明書を使用してシークレットを作成します。

    $ oc create -n istio-system secret tls wildcard-certs \
        --key=wildcard.key \
        --cert=wildcard.crt
    Copy to Clipboard Toggle word wrap

    この証明書は、OpenShift Serverless をサービスメッシュと統合する際に作成されるゲートウェイによって取得され、Ingress ゲートウェイはこの証明書でトラフィックを提供します。

1.1.3. サービスメッシュと OpenShift Serverless の統合

Service Mesh 2.x を OpenShift Serverless と統合することで、サーバーレスアプリケーションに対して、高度なトラフィック管理、セキュリティー、およびオブザーバビリティーの機能を有効化できます。このセクションでは、前提条件を確認し、両方のコンポーネントをインストールして設定し、統合が期待どおりに機能していることを確認する手順を説明します。

1.1.3.1. インストールの前提条件の確認

Service Mesh と Serverless の統合をインストールして設定する前に、前提条件が満たされていることを確認してください。

手順

  1. 競合するゲートウェイを確認します。

    コマンドの例

    $ oc get gateway -A -o jsonpath='{range .items[*]}{@.metadata.namespace}{"/"}{@.metadata.name}{" "}{@.spec.servers}{"\n"}{end}' | column -t
    Copy to Clipboard Toggle word wrap

    出力例

    knative-serving/knative-ingress-gateway  [{"hosts":["*"],"port":{"name":"https","number":443,"protocol":"HTTPS"},"tls":{"credentialName":"wildcard-certs","mode":"SIMPLE"}}]
    knative-serving/knative-local-gateway    [{"hosts":["*"],"port":{"name":"http","number":8081,"protocol":"HTTP"}}]
    Copy to Clipboard Toggle word wrap

    このコマンドは、knative-serving 内の Gateways と別の Service Mesh インスタンスの一部である Gateways を除き、port: 443hosts: ["*"] をバインドする Gateway を返してはなりません。

    注記

    Serverless が属するメッシュは個別である必要があり、できれば Serverless ワークロード専用に予約されている必要があります。これは、Gateways などの追加設定が Serverless ゲートウェイ knative-local-gateway および knative-ingress-gateway に干渉する可能性があるためです。Red Hat OpenShift Service Mesh では、1 つのゲートウェイのみが同じポート (port: 443) 上でワイルドカードホストバインディング (hosts: ["*"]) を要求できます。別のゲートウェイがすでにこの設定をバインドしている場合は、Serverless ワークロード用に別のメッシュを作成する必要があります。

  2. Red Hat OpenShift Service Mesh の istio-ingressgateway がタイプ NodePort または LoadBalancer として公開されているかどうかを確認します。

    コマンドの例

    $ oc get svc -A | grep istio-ingressgateway
    Copy to Clipboard Toggle word wrap

    出力例

    istio-system   istio-ingressgateway  ClusterIP  172.30.46.146 none>   15021/TCP,80/TCP,443/TCP     9m50s
    Copy to Clipboard Toggle word wrap

    このコマンドは、タイプ NodePort または LoadBalancerService オブジェクトを返しません。

    注記

    クラスターの外部 Knative サービスは、OpenShift Route を使用して OpenShift Ingress 経由で呼び出されることが想定されています。NodePort または LoadBalancer タイプの Service オブジェクトを使用して istio-ingressgateway を公開するなど、Service Mesh に直接アクセスすることはサポートされていません。

1.1.3.2. Service Mesh のインストールと設定

Serverless を Service Mesh と統合するには、特定の設定で Service Mesh をインストールする必要があります。

手順

  1. 次の設定で istio-system namespace に ServiceMeshControlPlane リソースを作成します。

    重要

    既存の ServiceMeshControlPlane オブジェクトがある場合は、同じ設定が適用されていることを確認してください。

    apiVersion: maistra.io/v2
    kind: ServiceMeshControlPlane
    metadata:
      name: basic
      namespace: istio-system
    spec:
      profiles:
      - default
      security:
        dataPlane:
          mtls: true 
    1
    
      techPreview:
        meshConfig:
          defaultConfig:
            terminationDrainDuration: 35s 
    2
    
      gateways:
        ingress:
          service:
            metadata:
              labels:
                knative: ingressgateway 
    3
    
      proxy:
        networking:
          trafficControl:
            inbound:
              excludedPorts: 
    4
    
              - 8444 # metrics
              - 8022 # serving: wait-for-drain k8s pre-stop hook
    Copy to Clipboard Toggle word wrap
    1
    メッシュ内で厳密な mTLS を強制します。有効なクライアント証明書を使用した呼び出しのみが許可されます。
    2
    Serverless では、Knative サービスのグレースフルな終了は 30 秒です。istio-proxy は、リクエストが破棄されないように、より長い終了時間を設定する必要があります。
    3
    Knative ゲートウェイのみをターゲットとする Ingress ゲートウェイの特定のセレクターを定義します。
    4
    これらのポートは、Kubernetes およびクラスター監視によって呼び出されます。これらはメッシュの一部ではないため、mTLS を使用して呼び出すことはできません。したがって、これらのポートはメッシュから除外されます。
  2. サービスメッシュと統合する必要のある namespace をメンバーとして ServiceMeshMemberRoll オブジェクトに追加します。

    servicemesh-member-roll.yaml 設定ファイルの例

    apiVersion: maistra.io/v1
    kind: ServiceMeshMemberRoll
    metadata:
      name: default
      namespace: istio-system
    spec:
      members: 
    1
    
        - knative-serving
        - knative-eventing
        - your-OpenShift-projects
    Copy to Clipboard Toggle word wrap

    1
    サービスメッシュと統合する namespace の一覧。
    重要

    この namespace のリストには、knative-serving namespace と knative-eventing namespace が含まれている必要があります。

  3. ServiceMeshMemberRoll リソースを適用します。

    $ oc apply -f servicemesh-member-roll.yaml
    Copy to Clipboard Toggle word wrap
  4. サービスメッシュがトラフィックを受け入れることができるように、必要なゲートウェイを作成します。次の例では、ISTIO_MUTUAL モード (mTLS) で knative-local-gateway オブジェクトを使用します。

    istio-knative-gateways.yaml 設定ファイルの例

    apiVersion: networking.istio.io/v1alpha3
    kind: Gateway
    metadata:
      name: knative-ingress-gateway
      namespace: knative-serving
    spec:
      selector:
        knative: 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:
       knative: ingressgateway
     servers:
       - port:
           number: 8081
           name: https
           protocol: HTTPS 
    2
    
         tls:
           mode: ISTIO_MUTUAL 
    3
    
         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: 8081
    Copy to Clipboard Toggle word wrap

    1
    ワイルドカード証明書を含むシークレットの名前。
    2 3
    knative-local-gateway オブジェクトは HTTPS トラフィックを処理し、すべてのクライアントが mTLS を使用してリクエストを送信することを期待します。これは、Service Mesh 内からのトラフィックのみが可能であることを意味します。Service Mesh の外部からのワークロードは、OpenShift Routing 経由で外部ドメインを使用する必要があります。
  5. Gateway リソースを適用します。

    $ oc apply -f istio-knative-gateways.yaml
    Copy to Clipboard Toggle word wrap

1.1.3.3. Serverless のインストールと設定

Service Mesh をインストールした後、特定の設定で Serverless をインストールする必要があります。

手順

  1. 次の KnativeServing カスタムリソースを使用して Knative Serving をインストールします。これにより、Istio 統合が有効になります。

    knative-serving-config.yaml 設定ファイルの例

    apiVersion: operator.knative.dev/v1beta1
    kind: KnativeServing
    metadata:
      name: knative-serving
      namespace: knative-serving
    spec:
      ingress:
        istio:
          enabled: true 
    1
    
      deployments: 
    2
    
      - name: activator
        labels:
          "sidecar.istio.io/inject": "true"
        annotations:
          "sidecar.istio.io/rewriteAppHTTPProbers": "true"
      - name: autoscaler
        labels:
          "sidecar.istio.io/inject": "true"
        annotations:
          "sidecar.istio.io/rewriteAppHTTPProbers": "true"
      config:
        istio: 
    3
    
          gateway.knative-serving.knative-ingress-gateway: istio-ingressgateway.<your-istio-namespace>.svc.cluster.local
          local-gateway.knative-serving.knative-local-gateway: knative-local-gateway.<your-istio-namespace>.svc.cluster.local
    Copy to Clipboard Toggle word wrap

    1
    Istio 統合を有効にします。
    2
    Knative Serving データプレーン Pod のサイドカーの注入を有効にします。
    3
    istio が istio-system namespace で実行されていない場合は、これら 2 つのフラグを正しい namespace で設定する必要があります。
  2. KnativeServing リソースを適用します。

    $ oc apply -f knative-serving-config.yaml
    Copy to Clipboard Toggle word wrap
  3. 次の KnativeEventing オブジェクトを使用して Knative Eventing をインストールします。これにより、Istio 統合が有効になります。

    knative-eventing-config.yaml 設定ファイルの例

    apiVersion: operator.knative.dev/v1beta1
    kind: KnativeEventing
    metadata:
      name: knative-eventing
      namespace: knative-eventing
    spec:
      config:
        features:
          istio: enabled 
    1
    
      workloads: 
    2
    
      - name: pingsource-mt-adapter
        labels:
          "sidecar.istio.io/inject": "true"
        annotations:
          "sidecar.istio.io/rewriteAppHTTPProbers": "true"
      - name: imc-dispatcher
        labels:
          "sidecar.istio.io/inject": "true"
        annotations:
          "sidecar.istio.io/rewriteAppHTTPProbers": "true"
      - name: mt-broker-ingress
        labels:
          "sidecar.istio.io/inject": "true"
        annotations:
          "sidecar.istio.io/rewriteAppHTTPProbers": "true"
      - name: mt-broker-filter
        labels:
          "sidecar.istio.io/inject": "true"
        annotations:
          "sidecar.istio.io/rewriteAppHTTPProbers": "true"
    Copy to Clipboard Toggle word wrap

    1
    Eventing Istio コントローラーが各 InMemoryChannel または KafkaChannel サービスの DestinationRule を作成できるようにします。
    2
    Knative Eventing Pod のサイドカーインジェクションを有効にします。
  4. KnativeEventing リソースを適用します。

    $ oc apply -f knative-eventing-config.yaml
    Copy to Clipboard Toggle word wrap
  5. 次の KnativeKafka カスタムリソースを使用して Knative Kafka をインストールします。これにより、Istio 統合が有効になります。

    knative-kafka-config.yaml 設定ファイルの例

    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
        labels:
          "sidecar.istio.io/inject": "true"
        annotations:
          "sidecar.istio.io/rewriteAppHTTPProbers": "true"
      - name: kafka-broker-receiver
        labels:
          "sidecar.istio.io/inject": "true"
        annotations:
          "sidecar.istio.io/rewriteAppHTTPProbers": "true"
      - name: kafka-broker-dispatcher
        labels:
          "sidecar.istio.io/inject": "true"
        annotations:
          "sidecar.istio.io/rewriteAppHTTPProbers": "true"
      - name: kafka-channel-receiver
        labels:
          "sidecar.istio.io/inject": "true"
        annotations:
          "sidecar.istio.io/rewriteAppHTTPProbers": "true"
      - name: kafka-channel-dispatcher
        labels:
          "sidecar.istio.io/inject": "true"
        annotations:
          "sidecar.istio.io/rewriteAppHTTPProbers": "true"
      - name: kafka-source-dispatcher
        labels:
          "sidecar.istio.io/inject": "true"
        annotations:
          "sidecar.istio.io/rewriteAppHTTPProbers": "true"
      - name: kafka-sink-receiver
        labels:
          "sidecar.istio.io/inject": "true"
        annotations:
          "sidecar.istio.io/rewriteAppHTTPProbers": "true"
    Copy to Clipboard Toggle word wrap

    1 2
    Apache Kafka クラスター URL (例: my-cluster-kafka-bootstrap.kafka:9092)。
    3
    Knative Kafka Pod のサイドカーインジェクションを有効にします。
  6. KnativeEventing オブジェクトを適用します。

    $ oc apply -f knative-kafka-config.yaml
    Copy to Clipboard Toggle word wrap
  7. ServiceEntry をインストールして、KnativeKafka コンポーネントと Apache Kafka クラスターとの間の通信を Service Mesh に通知します。

    kafka-cluster-serviceentry.yaml 設定ファイルの例

    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-tls
          protocol: TCP
        - number: 9096
          name: tcp-tls
          protocol: TCP
      location: MESH_EXTERNAL
      resolution: NONE
    Copy to Clipboard Toggle word wrap

    1
    Apache Kafka クラスターホストのリスト (例: my-cluster-kafka-bootstrap.kafka)。
    2
    Apache Kafka クラスターリスナーポート。
    注記

    spec.ports にリストされているポートは、TPC ポートの例です。実際の値は、Apache Kafka クラスターの設定方法によって異なります。

  8. ServiceEntry リソースを適用します。

    $ oc apply -f kafka-cluster-serviceentry.yaml
    Copy to Clipboard Toggle word wrap

1.1.3.4. 統合の検証

Istio を有効にして Service Mesh と Serverless をインストールした後、統合が機能することを確認できます。

手順

  1. サイドカー注入が有効で、パススルールートを使用する Knative サービスを作成します。

    knative-service.yaml 設定ファイルの例

    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>
    Copy to Clipboard Toggle word wrap

    1
    サービスメッシュメンバーロールの一部である namespace。
    2
    生成した証明書が Ingress ゲートウェイ経由で直接提供されるように、パススルー対応ルートを生成するように Knative Serving に指示します。
    3
    Service Mesh サイドカーは Knative サービス Pod に挿入します。
    重要

    Service Mesh で動作するようにするには、この例のアノテーションをすべての Knative Service に必ず追加してください。

  2. Service リソースを適用します。

    $ oc apply -f knative-service.yaml
    Copy to Clipboard Toggle word wrap
  3. CA によって信頼されるようになったセキュアな接続を使用して、serverless アプリケーションにアクセスします。

    $ curl --cacert root.crt <service_url>
    Copy to Clipboard Toggle word wrap

    たとえば、以下を実行します。

    コマンドの例

    $ curl --cacert root.crt https://hello-default.apps.openshift.example.com
    Copy to Clipboard Toggle word wrap

    出力例

    Hello Openshift!
    Copy to Clipboard Toggle word wrap

Service Mesh が Mutual Transport Layer Security (mTLS) で有効になっている場合は、Prometheus によるメトリクスのスクレイピングが Service Mesh により防止されるため、Knative Serving と Knative Eventing のメトリクスはデフォルトで無効になります。Service Mesh と mTLS を使用する場合は、Knative Serving および Knative Eventing メトリクスを有効にできます。

前提条件

  • クラスターにアクセスするための次のいずれかの権限がある。

    • OpenShift Container Platform のクラスター管理者パーミッション
    • Red Hat OpenShift Service on AWS のクラスター管理者パーミッション
    • OpenShift Dedicated の専用管理者権限
  • OpenShift CLI (oc) がインストールされている。
  • アプリケーションやその他のワークロードを作成するための適切なロールと権限を持つプロジェクトにアクセスできます。
  • クラスターに OpenShift Serverless Operator、Knative Serving、および Knative Eventing をインストールしている。
  • mTLS 機能を有効にして Red Hat OpenShift Service Mesh をインストールしている。

手順

  1. prometheus を Knative Serving カスタムリソース (CR) の observability 仕様で metrics.backend-destination として指定します。

    apiVersion: operator.knative.dev/v1beta1
    kind: KnativeServing
    metadata:
      name: knative-serving
      namespace: knative-serving
    spec:
      config:
        observability:
          metrics.backend-destination: "prometheus"
    ...
    Copy to Clipboard Toggle word wrap

    この手順により、メトリクスがデフォルトで無効になることを防ぎます。

    注記

    ServiceMeshControlPlanemanageNetworkPolicy: false で設定する場合は、適切なイベント配信を確実に行うために、KnativeEventing のアノテーションを使用する必要があります。

    Knative Eventing でも同じメカニズムが使用されます。Knative Eventing のメトリクスを有効にするには、次のように、Knative Eventing カスタムリソース (CR) の observability 仕様で metrics.backend-destination として prometheus を指定する必要があります。

    apiVersion: operator.knative.dev/v1beta1
    kind: KnativeEventing
    metadata:
      name: knative-eventing
      namespace: knative-eventing
    spec:
      config:
        observability:
          metrics.backend-destination: "prometheus"
    ...
    Copy to Clipboard Toggle word wrap
  2. istio-system namespace のデフォルトのサービスメッシュコントロールプレーンを変更して再適用し、以下の仕様が含まれるようにします。

    ...
    spec:
      proxy:
        networking:
          trafficControl:
            inbound:
              excludedPorts:
              - 8444
    ...
    Copy to Clipboard Toggle word wrap

1.1.5. デフォルトのネットワークポリシーを無効にする

OpenShift Serverless Operator はデフォルトでネットワークポリシーを生成します。デフォルトのネットワークポリシー生成を無効にするには、KnativeEventing および KnativeServing カスタムリソース (CR) に serverless.openshift.io/disable-istio-net-policies-generation アノテーションを追加します。

前提条件

  • クラスターにアクセスするための次のいずれかの権限がある。

    • OpenShift Container Platform のクラスター管理者パーミッション
    • Red Hat OpenShift Service on AWS のクラスター管理者パーミッション
    • OpenShift Dedicated の専用管理者権限
  • OpenShift CLI (oc) がインストールされている。
  • アプリケーションやその他のワークロードを作成するための適切なロールと権限を持つプロジェクトにアクセスできます。
  • クラスターに OpenShift Serverless Operator、Knative Serving、および Knative Eventing をインストールしている。
  • mTLS 機能を有効にして Red Hat OpenShift Service Mesh をインストールしている。

手順

  • Knative カスタムリソースに serverless.openshift.io/disable-istio-net-policies-generation: "true" アノテーションを追加します。

    注記

    OpenShift Serverless Operator は、必要なネットワークポリシーをデフォルトで生成します。ServiceMeshControlPlanemanageNetworkPolicy: false で設定する場合は、適切なイベント配信を確保するために、デフォルトのネットワークポリシー生成を無効にする必要があります。デフォルトのネットワークポリシー生成を無効にするには、KnativeEventing および KnativeServing カスタムリソース (CR) に serverless.openshift.io/disable-istio-net-policies-generation アノテーションを追加します。

    1. 次のコマンドを実行して、KnativeEventing CR にアノテーションを付けます。

      $ oc edit KnativeEventing -n knative-eventing
      Copy to Clipboard Toggle word wrap

      KnativeEventing CR の例

      apiVersion: operator.knative.dev/v1beta1
      kind: KnativeEventing
      metadata:
        name: knative-eventing
        namespace: knative-eventing
        annotations:
          serverless.openshift.io/disable-istio-net-policies-generation: "true"
      Copy to Clipboard Toggle word wrap

    2. 次のコマンドを実行して、KnativeServing CR にアノテーションを付けます。

      $ oc edit KnativeServing -n knative-serving
      Copy to Clipboard Toggle word wrap

      KnativeServing CR の例

      apiVersion: operator.knative.dev/v1beta1
      kind: KnativeServing
      metadata:
        name: knative-serving
        namespace: knative-serving
        annotations:
          serverless.openshift.io/disable-istio-net-policies-generation: "true"
      Copy to Clipboard Toggle word wrap

1.1.6. Service Mesh のシークレットフィルタリングを使用した net-istio のメモリー使用量の改善

デフォルトでは、Kubernetes client-go ライブラリーの informers の実装は、特定のタイプのすべてのリソースをフェッチします。これにより、多くのリソースが使用可能な場合にかなりのオーバーヘッドが発生する可能性があり、メモリーリークが原因で大規模なクラスターで Knative net-istio イングレスコントローラーが失敗する可能性があります。ただし、Knative net-istio Ingress コントローラーではフィルタリングメカニズムを使用できます。これにより、コントローラーは Knative 関連のシークレットのみを取得できます。

シークレットのフィルタリングは、OpenShift Serverless Operator 側でデフォルトで有効化されています。環境変数 ENABLE_SECRET_INFORMER_FILTERING_BY_CERT_UID=true は、デフォルトで net-istio コントローラー Pod に追加されます。

重要

シークレットフィルタリングを有効にする場合は、すべてのシークレットに networking.internal.knative.dev/certificate-uid: "<id>" というラベルを付ける必要があります。そうしないと、Knative Serving がシークレットを検出しないため、障害が発生します。新規および既存のシークレットの両方にラベルを付ける必要があります。

前提条件

  • OpenShift Container Platform に対するクラスター管理者権限があるか、Red Hat OpenShift Service on AWS または OpenShift Dedicated に対するクラスターまたは専用管理者権限がある。
  • アプリケーションおよび他のワークロードを作成するために、プロジェクトを作成しているか、適切なロールおよびパーミッションが割り当てられたプロジェクトにアクセスできる。
  • Red Hat OpenShift Service Mesh をインストールしている。OpenShift Serverless with Service Mesh は、Red Hat OpenShift Service Mesh バージョン 2.0.5 以降での使用でのみサポートされます。
  • OpenShift Serverless Operator および Knative Serving をインストールしている。
  • OpenShift CLI (oc) がインストールされている。

KnativeServing カスタムリソース (CR) の workloads フィールドを使用して、ENABLE_SECRET_INFORMER_FILTERING_BY_CERT_UID 変数を false に設定することで、シークレットフィルターを無効化できます。

KnativeServing CR の例

apiVersion: operator.knative.dev/v1beta1
kind: KnativeServing
metadata:
  name: knative-serving
  namespace: knative-serving
spec:
...
  workloads:
    - env:
        - container: controller
          envVars:
            - name: ENABLE_SECRET_INFORMER_FILTERING_BY_CERT_UID
              value: 'false'
      name: net-istio-controller
Copy to Clipboard Toggle word wrap

トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat