Tanzu Observability + MetricsSecurityで実現するマルチテナント構成

Metrics Security PolicyでTanzu Observabilityでマルチテナントの構成ができます。

はじめに

Tanzu ObservabilityはSaaSプラットフォームなので、全てのメトリックスを一つのプラットフォームに集約されます。 そしてユーザーが増えるに伴って、見せたい情報、見せたくない情報をどうやって制限するかという問題がありました。 Tanzu Observabilityでは、従来はRoleの機能であったり、ダッシュボードのアクセス制限などの機能は提供はされていました。ただ、一度そのダッシュボードにアクセスを与えてしまうと、見えてはいけない情報が紛れ込むのを防ぐのは至難の技でした。

これに対し、新しい機能としてMetrics Security Policyという機能が紹介されました。これをすると同じダッシュボードでもユーザーによって、見えてくる情報が違うというものです。

これはなかなかにすごいことです。これが登場するまえは、ユーザーごとにDashboardをコピーして微調整をする。。。なんてことが必要でしたが、これだと一つDashboardでメトリクスのポリシーを設定するだけで、マルチテナントができてしまうようになりました。 ちなみにですが、この機能は特許申請済みの機能らしく、Tanzu Observability固有のものだそうです。

今回はこれを検証します。

前提

この機能を使うにはTrial Account以上が必要です。興味ある方は申し込んでください。

検証

さくっと検証します。

何もPolicyをしていない例

まず以下は、何もセキュリティポリシーを適用していない例。このテナントでは、今無造作にいろんな人が使っているため、100以上のKubernetesクラスターが出現しています。

Policyで何も見えなくする

これでまず何も見えなくしてみましょう、右のダイヤマークからMetricsSecurityPolicyを設定します。

そしてこんな風に設定します。

こうすることで以下のルールが適用されます。

  • machi@vmware.com さんは全てのメトリクスのアクセスを停止する
  • それ以外のユーザーは引き続き全てのメトリクスにアクセスできるようにする

この状態でもう一度Kubernetesのダッシュボードを開きます。 そうすると"All metrics in this chart are excluded due to metrics security policy rules.“と表示され、何も見えなくなります。

いまのところ期待どおりです。

自分のKubernetesクラスターだけみえるようにする

次にこんな風に設定します。

注目が最初のルールで、Source and Point Tagstenant=machiだった場合のみに、メトリクスを表示するという機能です。(このタグをメトリクスに追加する方法は後述) この状態でもう一度ダッシュボードを開きます。

すると、100以上みえていたクラスターが私のクラスターだけみえるようになりました。

すごい。同じダッシュボードでこのようにみえるものを制御できることが確認できました。

タグはどうやって追加するの?

さて、先のtenant=machiのタグはどうやって追加したかというと、wavefront proxyのpreprocessorルールというものを使っています。

これをすることにより、Proxyを経由する全てのメトリクスにあるタグをTanzu Observabiityに送信する前に付与するということができます。

今回の検証ではWavefront CollectorのHelmチャート を使って実現しています。

以下のようなhelm.yamlファイルを用意します。

 1clusterName: mhoshi-test
 2
 3wavefront:
 4  url: https://xxx.wavefront.com
 5  token: xxxxxxxxxxxxxxxxxx
 6proxy:
 7  preprocessor:
 8    rules.yaml: |
 9      '2878':
10       - rule    : tag-all-metrics
11         action  : addTag
12         tag     : tenant
13         value   : "machi"
14       - rule    : tag-all-metrics
15         action  : addTagIfNotExists
16         tag     : tenant
17         value   : "machi"

その後は以下のようなにしてhelmをKubernetes環境にデプロイすればOKです。

1kubectl create namespace wavefront
2helm install -f helm.yaml wavefront wavefront/wavefront --namespace wavefront

まとめ

Tanzu Observabilityでのマルチテナント構成の実現がMetrics Security Policyですごく簡単になりました。