1.4. サービスメッシュと OpenShift Serverless の統合
1.4.1. インストールの前提条件の確認 リンクのコピーリンクがクリップボードにコピーされました!
Service Mesh と Serverless の統合をインストールして設定する前に、前提条件が満たされていることを確認してください。
手順
競合するゲートウェイを確認します。
コマンドの例
oc get gateway -A -o jsonpath='{range .items[*]}{@.metadata.namespace}{"/"}{@.metadata.name}{" "}{@.spec.servers}{"\n"}{end}' | column -t
$ oc get gateway -A -o jsonpath='{range .items[*]}{@.metadata.namespace}{"/"}{@.metadata.name}{" "}{@.spec.servers}{"\n"}{end}' | column -t
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
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"}}]
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 Copied! Toggle word wrap Toggle overflow このコマンドは、
knative-serving
内のGateways
と別の Service Mesh インスタンスの一部であるGateways
を除き、port: 443
とhosts: ["*"]
をバインドするGateway
を返してはなりません。注記Serverless が属するメッシュは個別である必要があり、できれば Serverless ワークロード専用に予約されている必要があります。これは、
Gateways
などの追加設定が Serverless ゲートウェイknative-local-gateway
およびknative-ingress-gateway
に干渉する可能性があるためです。Red Hat OpenShift Service Mesh では、1 つのゲートウェイのみが同じポート (port: 443
) 上でワイルドカードホストバインディング (hosts: ["*"]
) を要求できます。別のゲートウェイがすでにこの設定をバインドしている場合は、Serverless ワークロード用に別のメッシュを作成する必要があります。Red Hat OpenShift Service Mesh の
istio-ingressgateway
がタイプNodePort
またはLoadBalancer
として公開されているかどうかを確認します。コマンドの例
oc get svc -A | grep istio-ingressgateway
$ oc get svc -A | grep istio-ingressgateway
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
istio-system istio-ingressgateway ClusterIP 172.30.46.146 none> 15021/TCP,80/TCP,443/TCP 9m50s
istio-system istio-ingressgateway ClusterIP 172.30.46.146 none> 15021/TCP,80/TCP,443/TCP 9m50s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドは、タイプ
NodePort
またはLoadBalancer
のService
オブジェクトを返しません。注記クラスターの外部 Knative サービスは、OpenShift Route を使用して OpenShift Ingress 経由で呼び出されることが想定されています。
NodePort
またはLoadBalancer
タイプのService
オブジェクトを使用してistio-ingressgateway
を公開するなど、Service Mesh に直接アクセスすることはサポートされていません。
1.4.2. Service Mesh のインストールと設定 リンクのコピーリンクがクリップボードにコピーされました!
Serverless を Service Mesh と統合するには、特定の設定で Service Mesh をインストールする必要があります。
手順
次の設定で
istio-system
namespace にServiceMeshControlPlane
リソースを作成します。重要既存の
ServiceMeshControlPlane
オブジェクトがある場合は、同じ設定が適用されていることを確認してください。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- メッシュ内で厳密な mTLS を強制します。有効なクライアント証明書を使用した呼び出しのみが許可されます。
- 2
- Serverless では、Knative サービスの正常な終了は 30 秒です。
istio-proxy
は、リクエストが破棄されないように、より長い終了時間を設定する必要があります。 - 3
- Knative ゲートウェイのみをターゲットとする Ingress ゲートウェイの特定のセレクターを定義します。
- 4
- これらのポートは、Kubernetes およびクラスター監視によって呼び出されます。これらはメッシュの一部ではないため、mTLS を使用して呼び出すことはできません。したがって、これらのポートはメッシュから除外されます。
サービスメッシュと統合する必要のある namespace をメンバーとして
ServiceMeshMemberRoll
オブジェクトに追加します。servicemesh-member-roll.yaml
設定ファイルの例Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- サービスメッシュと統合する namespace の一覧。
重要この namespace のリストには、
knative-serving
namespace とknative-eventing
namespace が含まれている必要があります。ServiceMeshMemberRoll
リソースを適用します。oc apply -f servicemesh-member-roll.yaml
$ oc apply -f servicemesh-member-roll.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow サービスメッシュがトラフィックを受け入れることができるように、必要なゲートウェイを作成します。次の例では、
ISTIO_MUTUAL
モード (mTLS) でknative-local-gateway
オブジェクトを使用します。istio-knative-gateways.yaml
設定ファイルの例Copy to Clipboard Copied! Toggle word wrap Toggle overflow Gateway
リソースを適用します。oc apply -f istio-knative-gateways.yaml
$ oc apply -f istio-knative-gateways.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
1.4.3. Serverless のインストールと設定 リンクのコピーリンクがクリップボードにコピーされました!
Service Mesh をインストールした後、特定の設定で Serverless をインストールする必要があります。
手順
次の
KnativeServing
カスタムリソースを使用して Knative Serving をインストールします。これにより、Istio 統合が有効になります。knative-serving-config.yaml
設定ファイルの例Copy to Clipboard Copied! Toggle word wrap Toggle overflow KnativeServing
リソースを適用します。oc apply -f knative-serving-config.yaml
$ oc apply -f knative-serving-config.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次の
KnativeEventing
オブジェクトを使用して Knative Eventing をインストールします。これにより、Istio 統合が有効になります。knative-eventing-config.yaml
設定ファイルの例Copy to Clipboard Copied! Toggle word wrap Toggle overflow KnativeEventing
リソースを適用します。oc apply -f knative-eventing-config.yaml
$ oc apply -f knative-eventing-config.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次の
KnativeKafka
カスタムリソースを使用して Knative Kafka をインストールします。これにより、Istio 統合が有効になります。knative-kafka-config.yaml
設定ファイルの例Copy to Clipboard Copied! Toggle word wrap Toggle overflow KnativeEventing
オブジェクトを適用します。oc apply -f knative-kafka-config.yaml
$ oc apply -f knative-kafka-config.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ServiceEntry
をインストールして、KnativeKafka
コンポーネントと Apache Kafka クラスターとの間の通信を Service Mesh に通知します。kafka-cluster-serviceentry.yaml
設定ファイルの例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記spec.ports
にリストされているポートは、TPC ポートの例です。実際の値は、Apache Kafka クラスターの設定方法によって異なります。ServiceEntry
リソースを適用します。oc apply -f kafka-cluster-serviceentry.yaml
$ oc apply -f kafka-cluster-serviceentry.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
1.4.4. 統合の検証 リンクのコピーリンクがクリップボードにコピーされました!
Istio を有効にして Service Mesh と Serverless をインストールした後、統合が機能することを確認できます。
手順
サイドカー挿入が有効で、パススルールートを使用する Knative サービスを作成します。
knative-service.yaml
設定ファイルの例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要Service Mesh で動作するようにするには、この例のアノテーションをすべての Knative Service に必ず追加してください。
Service
リソースを適用します。oc apply -f knative-service.yaml
$ oc apply -f knative-service.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow CA によって信頼されるようになった安全な接続を使用して、Serverless アプリケーションにアクセスします。
curl --cacert root.crt <service_url>
$ curl --cacert root.crt <service_url>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow たとえば、以下を実行します。
コマンドの例
curl --cacert root.crt https://hello-default.apps.openshift.example.com
$ curl --cacert root.crt https://hello-default.apps.openshift.example.com
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Hello Openshift!
Hello Openshift!
Copy to Clipboard Copied! Toggle word wrap Toggle overflow