1.2. Service Mesh 2.x を使用して OpenShift Serverless でネットワークトラフィックを分離する
Service Mesh 2.x を OpenShift Serverless と併用して、サービス間のネットワークトラフィックを制御および分離できます。この統合により、きめ細かな通信ポリシーの定義、相互 TLS によるセキュリティーの強化、サーバーレス環境内のトラフィックフローの管理が可能になります。
Service Mesh を使用して OpenShift Serverless でネットワークトラフィックを分離することは、テクノロジープレビューのみの機能です。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビュー機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行い、フィードバックを提供していただくことを目的としています。
Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。
Service Mesh を使用すると、Service Mesh AuthorizationPolicy リソースを使用して、共有 Red Hat OpenShift Serverless クラスター上のテナント間のネットワークトラフィックを分離できます。Serverless では、いくつかの Service Mesh リソースを使用して、これを活用することもできます。テナントは、共有クラスター上のネットワークを介して相互にアクセスできる 1 つまたは複数のプロジェクトのグループです。
1.2.1. 前提条件 リンクのコピーリンクがクリップボードにコピーされました!
- クラスター管理者アクセス権を持つ Red Hat OpenShift Serverless アカウントにアクセスできる。
- Service Mesh 2.x と Serverless の統合がセットアップされている。
- 各テナントに対して 1 つ以上の OpenShift プロジェクトを作成している。
1.2.2. 高レベルのアーキテクチャー リンクのコピーリンクがクリップボードにコピーされました!
Service Mesh によって提供される Serverless トラフィック分離の高レベルアーキテクチャーは、knative-serving、knative-eventing、およびテナントの namespace 内の AuthorizationPolicy オブジェクトで構成され、すべてのコンポーネントは Service Mesh の一部です。注入された Service Mesh サイドカーは、これらのルールを強制して、テナント間のネットワークトラフィックを分離します。
1.2.3. Service Mesh の保護 リンクのコピーリンクがクリップボードにコピーされました!
認可ポリシーと mTLS により、Service Mesh を保護できます。
手順
テナントのすべての Red Hat OpenShift Serverless プロジェクトがメンバーとして同じ
ServiceMeshMemberRollオブジェクトの一部であることを確認します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow メッシュの一部であるすべてのプロジェクトは、mTLS を厳密モードで強制する必要があります。これにより、Istio はクライアント証明書が存在する接続のみを受け入れるようになり、Service Mesh サイドカーが
AuthorizationPolicyオブジェクトを使用して接続元を検証できるようになります。knative-servingおよびknative-eventingnamespace にAuthorizationPolicyオブジェクトを使用して設定を作成します。knative-default-authz-policies.yaml設定ファイルの例Copy to Clipboard Copied! Toggle word wrap Toggle overflow これらのポリシーは、Serverless システムコンポーネント間のネットワーク通信のアクセスルールを制限します。具体的には、次のルールが適用されます。
-
knative-servingおよびknative-eventingnamespace で明示的に許可されていないすべてのトラフィックを拒否します。 -
istio-systemおよびknative-servingnamespace からアクティベーターへのトラフィックを許可する -
knative-servingnamespace からオートスケーラーへのトラフィックを許可する -
knative-eventingnamespace で Apache Kafka コンポーネントの正常性プローブを許可する -
knative-eventingnamespace でチャネルベースのブローカーの内部トラフィックを許可する
-
認可ポリシー設定を適用します。
oc apply -f knative-default-authz-policies.yaml
$ oc apply -f knative-default-authz-policies.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow どの OpenShift プロジェクトが相互に通信できるかを定義します。この通信のために、テナントのすべての OpenShift プロジェクトには以下が必要です。
-
テナントのプロジェクトへの直接受信トラフィックを制限する 1 つの
AuthorizationPolicyオブジェクト -
knative-servingプロジェクトで実行する Serverless のアクティベータコンポーネントを使用して受信トラフィックを制限する 1 つのAuthorizationPolicyオブジェクト -
Kubernetes が Knative Services で
PreStopHooksを呼び出すことを許可する 1 つのAuthorizationPolicyオブジェクト
これらのポリシーを手動で作成する代わりに、
helmユーティリティーをインストールし、各テナントに必要なリソースを作成します。helmユーティリティーのインストールhelm repo add openshift-helm-charts https://charts.openshift.io/
$ helm repo add openshift-helm-charts https://charts.openshift.io/Copy to Clipboard Copied! Toggle word wrap Toggle overflow team alpha用のサンプル設定の作成helm template openshift-helm-charts/redhat-knative-istio-authz --version 1.36.0 --set "name=team-alpha" --set "namespaces={team-alpha-1,team-alpha-2}" > team-alpha.yaml$ helm template openshift-helm-charts/redhat-knative-istio-authz --version 1.36.0 --set "name=team-alpha" --set "namespaces={team-alpha-1,team-alpha-2}" > team-alpha.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow team bravoの設定例の作成helm template openshift-helm-charts/redhat-knative-istio-authz --version 1.31.0 --set "name=team-bravo" --set "namespaces={team-bravo-1,team-bravo-2}" > team-bravo.yaml$ helm template openshift-helm-charts/redhat-knative-istio-authz --version 1.31.0 --set "name=team-bravo" --set "namespaces={team-bravo-1,team-bravo-2}" > team-bravo.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
テナントのプロジェクトへの直接受信トラフィックを制限する 1 つの
認可ポリシー設定を適用します。
oc apply -f team-alpha.yaml team-bravo.yaml
$ oc apply -f team-alpha.yaml team-bravo.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
1.2.4. 設定の確認 リンクのコピーリンクがクリップボードにコピーされました!
curl コマンドを使用して、ネットワークトラフィック分離の設定を確認できます。
次の例では、2 つのテナントがあり、それぞれが 1 つの namespace を持ち、ServiceMeshMemberRoll オブジェクトのすべての部分が、team-alpha.yaml ファイルおよび team-bravo.yaml ファイル内のリソースで設定されていると想定しています。
手順
両方のテナントの namespace に Knative Services をデプロイします。
team-alphaのコマンド例kn service create test-webapp -n team-alpha-1 \ --annotation-service serving.knative.openshift.io/enablePassthrough=true \ --annotation-revision sidecar.istio.io/inject=true \ --env RESPONSE="Hello Serverless" \ --image docker.io/openshift/hello-openshift$ kn service create test-webapp -n team-alpha-1 \ --annotation-service serving.knative.openshift.io/enablePassthrough=true \ --annotation-revision sidecar.istio.io/inject=true \ --env RESPONSE="Hello Serverless" \ --image docker.io/openshift/hello-openshiftCopy to Clipboard Copied! Toggle word wrap Toggle overflow team-bravoのコマンド例kn service create test-webapp -n team-bravo-1 \ --annotation-service serving.knative.openshift.io/enablePassthrough=true \ --annotation-revision sidecar.istio.io/inject=true \ --env RESPONSE="Hello Serverless" \ --image docker.io/openshift/hello-openshift$ kn service create test-webapp -n team-bravo-1 \ --annotation-service serving.knative.openshift.io/enablePassthrough=true \ --annotation-revision sidecar.istio.io/inject=true \ --env RESPONSE="Hello Serverless" \ --image docker.io/openshift/hello-openshiftCopy to Clipboard Copied! Toggle word wrap Toggle overflow あるいは、次の YAML 設定を使用します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 接続をテストするために
curlPod をデプロイします。Copy to Clipboard Copied! Toggle word wrap Toggle overflow curlコマンドを使用して設定を確認します。許可されているクラスターのローカルドメインを介して
team-alpha-1をテストします。team-alpha-1 コマンドの例
oc exec deployment/curl -n team-alpha-1 -it -- curl -v http://test-webapp.team-alpha-1:80
$ oc exec deployment/curl -n team-alpha-1 -it -- curl -v http://test-webapp.team-alpha-1:80Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 許可されている外部ドメインを介して
team-alpha-1からteam-alpha-1への接続をテストします。コマンドの例
EXTERNAL_URL=$(oc get ksvc -n team-alpha-1 test-webapp -o custom-columns=:.status.url --no-headers) && \ oc exec deployment/curl -n team-alpha-1 -it -- curl -ik $EXTERNAL_URL
$ EXTERNAL_URL=$(oc get ksvc -n team-alpha-1 test-webapp -o custom-columns=:.status.url --no-headers) && \ oc exec deployment/curl -n team-alpha-1 -it -- curl -ik $EXTERNAL_URLCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow クラスターのローカルドメインを介して
team-alpha-1からteam-bravo-1への接続をテストしますが、これは許可されていません。コマンドの例
oc exec deployment/curl -n team-alpha-1 -it -- curl -v http://test-webapp.team-bravo-1:80
$ oc exec deployment/curl -n team-alpha-1 -it -- curl -v http://test-webapp.team-bravo-1:80Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 許可されている外部ドメインを介して、
team-alpha-1からteam-bravo-1への接続をテストします。コマンドの例
EXTERNAL_URL=$(oc get ksvc -n team-bravo-1 test-webapp -o custom-columns=:.status.url --no-headers) && \ oc exec deployment/curl -n team-alpha-1 -it -- curl -ik $EXTERNAL_URL
$ EXTERNAL_URL=$(oc get ksvc -n team-bravo-1 test-webapp -o custom-columns=:.status.url --no-headers) && \ oc exec deployment/curl -n team-alpha-1 -it -- curl -ik $EXTERNAL_URLCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 検証用に作成されたリソースを削除します。
oc delete deployment/curl -n team-alpha-1 && \ oc delete ksvc/test-webapp -n team-alpha-1 && \ oc delete ksvc/test-webapp -n team-bravo-1
$ oc delete deployment/curl -n team-alpha-1 && \ oc delete ksvc/test-webapp -n team-alpha-1 && \ oc delete ksvc/test-webapp -n team-bravo-1Copy to Clipboard Copied! Toggle word wrap Toggle overflow