トラフィックポリシー

トラフィックポリシーモード

アプリケーションが起動して実行されると、 permissive traffic policy modeまたは SMI traffic policy modeを使用して相互にやり取りできる。許容なトラフィックポリシーモードでは、アプリケーションサービス間のトラフィックは osm-controller によって自動的に設定され、SMI トラフィックターゲットによって定義されたアクセス制御ポリシーは適用されていない。SMI ポリシーモードでは、SMI アクセス ポリシーとルーティングポリシーの組み合わせを使用して明示的に許可しない限り、すべてのトラフィックがデフォルトで拒否される。

トラフィックの暗号化

アクセス制御ポリシーを使用しているか、permissive トラフィック ポリシー モードを有効にしているかに関係なく、すべてのトラフィックは mTLS 経由で暗号化される。

トラフィック ポリシー モードを確認する方法

osm-mesh-config MeshConfigリソースの enablePermissiveTrafficPolicyMode キーの値を取得して、許容なトラフィックポリシーモードが有効になっているかどうかを確認する。

# Replace osm-system with osm-controller's namespace if using a non default namespace
kubectl get meshconfig osm-mesh-config -n osm-system -o jsonpath='{.spec.traffic.enablePermissiveTrafficPolicyMode}{"\n"}'
# Output:
# false: permissive traffic policy mode is disabled, SMI policy mode is enabled
# true: permissive traffic policy mode is enabled, SMI policy mode is disabled

次のセクションでは、 permissive traffic policy modeSMI Traffic Policy Modeで osm-edge を使用する方法を示す。

許容トラフィック ポリシー モード

許容トラフィックポリシーモードでは、メッシュ内のアプリケーション接続は osm-controller によって自動的に設定される。以下の方法で有効化できる。

  1. osm` CLIを使ったインストール時。
osm install --set=osm.enablePermissiveTrafficPolicy=true
  1. コントロールプレーンの名前空間(デフォルトではosm-system)のosm-mesh-configカスタムリソースにパッチを当ててインストール後
kubectl patch meshconfig osm-mesh-config -n osm-system -p '{"spec":{"traffic":{"enablePermissiveTrafficPolicyMode":true}}}'  --type=merge

osm-edge が許容なトラフィックポリシー モードであることを確認する

続行する前に、verify the traffic policy mode、osm-mesh-config MeshConfig リソースで enablePermissiveTrafficPolicyMode キーが true に設定されていることを確認する。許容なトラフィックポリシーモードを有効にするには、上記のセクションを参照してください。

Deploy the Bookstore Applicationの手順では、許容なトラフィックポリシーモードでトラフィックフローを確認するために必要なアプリケーションを既に展開している。 以前デプロイしたブックストアサービスは、 Deployment’s manifest で確認できるように、デモ用に bookstore-v1 というIDでエンコードされている。IDは、bookbuyerとbookthiefのUIでどのカウンターをインクリメントするか、bookstoreのUIで表示されるIDを反映している。

bookbuyer, bookthiefのUIで、bookstore v1から買った本と盗んだ本のカウンターがそれぞれインクリメントされるようになった。

UI の bookstore にある販売された本のカウンターもインクリメントされるはずだ。

許容トラフィックポリシーモードが有効であるため、bookbuyerとbookthiefのアプリケーションは、新しく展開されたbookstoreアプリケーションからそれぞれ本を買ったり盗んだりすることができ、それによってSMIトラフィックアクセスポリシーの必要なしにアプリケーション間の接続を可能にする。

このことは、許容なトラフィックポリシーモードを無効にして、書店で購入した本のカウンターがもう増加しないことを確認することで、さらに実証することができる。

kubectl patch meshconfig osm-mesh-config -n osm-system -p '{"spec":{"traffic":{"enablePermissiveTrafficPolicyMode":false}}}'  --type=merge

注意: 許容トラフィックポリシーモードを無効にすると、SMI トラフィックアクセスモードが暗黙的に有効になる。本のカウンターが増加している場合、そのようなトラフィックを許可するSMIトラフィックアクセスポリシーが以前に適用されたことが原因である可能性がある。

SMIトラフィックポリシーモード

SMI トラフィック ポリシーは、次の目的で使用できる。

  1. サービスID間のトラフィックアクセスを認可するためのSMIアクセス制御ポリシー
  2. アクセス制御ポリシーと関連付けるルーティングルールを定義するSMIトラフィックの仕様ポリシー
  3. ウエイトに基づいてクライアント トラフィックを複数のバックエンドに転送する SMI トラフィックスプリットポリシー

次のセクションでは、これらの各ポリシーを活用して、サービス メッシュ内を流れるトラフィックをきめ細かく制御する方法について説明する。続行する前に、verify the traffic policy mode、osm-mesh-config MeshConfig リソースで enablePermissiveTrafficPolicyMode キーが false に設定されていることを確認する。

許容トラフィックポリシーモードを無効にすることで、SMIトラフィックポリシーモードを有効にできる。

kubectl patch meshconfig osm-mesh-config -n osm-system -p '{"spec":{"traffic":{"enablePermissiveTrafficPolicyMode":false}}}'  --type=merge

SMIアクセスコントロールポリシーをデプロイする

この時点では、アクセス制御ポリシーが適用されていないため、アプリケーションは相互にアクセスできない。bookbuyer、bookthief、bookstore、bookstore-v2のUIにあるカウンターのどれもがインクリメントしていないことを確認してください。

[SMI Traffic Target][https://github.com/servicemeshinterface/smi-spec/blob/v0.6.0/apis/traffic-access/v1alpha2/traffic-access.md)とSMI Traffic Specs リソースを適用して、通信するアプリケーションのアクセス制御とルーティングのポリシーを定義する。

SMI TrafficTarget および HTTPRouteGroup ポリシーをデプロイする。

kubectl apply -f https://raw.githubusercontent.com/openservicemesh/osm-docs/release-v1.1/manifests/access/traffic-access-v1.yaml

bookbuyer および bookstore アプリケーションのカウンタが増加するはずだ。

「bookthief」アプリケーションの場合、カウンターは増加しないことに注意してください。

これは、デプロイされた SMI トラフィック ターゲット SMI HTTPRouteGroup リソースが、bookbuyer と bookstore との通信のみを許可するためだ。

Bookthief アプリケーションがメッシュにアクセスできるようにする

現在、Bookthief アプリケーションは、サービスメッシュ通信への参加を承認されていない。 ここで、TrafficTarget を更新して、「bookthief」が「bookstore」と通信できるようにする。

「spec.sources」に「bookthief」がリストされていない現在のトラフィックターゲット仕様:

kind: TrafficTarget
apiVersion: access.smi-spec.io/v1alpha3
metadata:
  name: bookstore-v1
  namespace: bookstore
spec:
  destination:
    kind: ServiceAccount
    name: bookstore
    namespace: bookstore
  rules:
  - kind: HTTPRouteGroup
    name: bookstore-service-routes
    matches:
    - buy-a-book
    - books-bought
  sources:
  - kind: ServiceAccount
    name: bookbuyer
    namespace: bookbuyer

spec.sourcesbook thief を使用して Traffic Target 仕様を更新:

kind: TrafficTarget
apiVersion: access.smi-spec.io/v1alpha3
metadata:
 name: bookstore-v1
 namespace: bookstore
spec:
 destination:
   kind: ServiceAccount
   name: bookstore
   namespace: bookstore
 rules:
 - kind: HTTPRouteGroup
   name: bookstore-service-routes
   matches:
   - buy-a-book
   - books-bought
 sources:
 - kind: ServiceAccount
   name: bookbuyer
   namespace: bookbuyer
 - kind: ServiceAccount
   name: bookthief
   namespace: bookthief

更新された TrafficTarget を適用する。

kubectl apply -f https://raw.githubusercontent.com/openservicemesh/osm-docs/release-v1.1/manifests/access/traffic-access-v1-allow-bookthief.yaml

「bookthief」ウィンドウのカウンターが増え始める。

bookthiefを許可されたソースとしてリストせずに、元のトラフィックターゲットオブジェクトを適用する。

kubectl apply -f https://raw.githubusercontent.com/openservicemesh/osm-docs/release-v1.1/manifests/access/traffic-access-v1.yaml

「bookthief」ウィンドウのカウンターが増加しなくなる。

次のステップ

configuring traffic splitで、サービス間のトラフィックのバランスを取る方法を学ぶ。