3.5. reporting-operator の設定

reporting-operator は、Prometheus からデータを収集し、メトリクスを Presto に保存して、Presto に対してレポートクエリーを実行し、それらの結果を HTTP API 経由で公開します。Operator の設定は主に MeteringConfig ファイルを使用して行われます。

3.5.1. Prometheus 接続

メータリングを OpenShift Container Platform にインストールする場合、Prometheus は https://prometheus-k8s.openshift-monitoring.svc:9091/ で利用できます。

Prometheus への接続のセキュリティーを保護するために、デフォルトのメータリングのインストールでは OpenShift Container Platform の認証局を使用します。Prometheus インスタンスが別の CA を使用する場合、CA は ConfigMap を使用して挿入できます。以下の例を参照してください。

spec:
  reporting-operator:
    spec:
      config:
        prometheus:
          certificateAuthority:
            useServiceAccountCA: false
            configMap:
              enabled: true
              create: true
              name: reporting-operator-certificate-authority-config
              filename: "internal-ca.crt"
              value: |
                -----BEGIN CERTIFICATE-----
                (snip)
                -----END CERTIFICATE-----

または、一般に有効な証明書のシステム認証局を使用するには、 useServiceAccountCA および configMap.enabled の両方を false に設定します。

reporting-operator は、指定されたベアラートークンを使用して Prometheus で認証するように設定することもできます。以下の例を参照してください。

spec:
  reporting-operator:
    spec:
      config:
        prometheus:
          metricsImporter:
            auth:
              useServiceAccountToken: false
              tokenSecret:
                enabled: true
                create: true
                value: "abc-123"

3.5.2. レポート API の公開

OpenShift Container Platform では、デフォルトのメータリングインストールはルートを自動的に公開し、レポート API を利用可能にします。これにより、以下の機能が提供されます。

  • 自動 DNS
  • クラスター CA に基づく自動 TLS

また、デフォルトのインストールでは、OpenShift サービスを使用して証明書を提供し、レポート API を TLS で保護することができます。OpenShift OAuth プロキシーは reporting-operator のサイドカーコンテナーとしてデプロイされ、レポート API を認証で保護します。

3.5.2.1. OpenShift 認証の使用

デフォルトで、レポート API のセキュリティーは TLS および認証で保護されます。これは、reporting-operator を、reporting-operator のコンテナーおよび OpenShift 認証プロキシー (auth-proxy) を実行するサイドカーコンテナーの両方を含む Pod をデプロイするように設定して実行されます。

レポート API にアクセスするために、メータリング Operator はルートを公開します。ルートがインストールされたら、以下のコマンドを実行してルートのホスト名を取得できます。

METERING_ROUTE_HOSTNAME=$(oc -n openshift-metering get routes metering -o json | jq -r '.status.ingress[].host')

次に、サービスアカウントトークンまたはユーザー名/パスワードによる基本認証のいずれかを使用して認証を設定します。

3.5.2.1.1. サービスアカウントトークンを使用した認証

この方法では、以下のコマンドを使用してトークンをレポート Operator のサービスアカウントで使用し、そのベアラートークンを Authorization ヘッダーに渡します。

TOKEN=$(oc -n openshift-metering serviceaccounts get-token reporting-operator)
curl -H "Authorization: Bearer $TOKEN" -k "https://$METERING_ROUTE_HOSTNAME/api/v1/reports/get?name=[Report Name]&namespace=openshift-metering&format=[Format]"

上記の URL の name=[Report Name] および format=[Format] パラメーターを置き換えます。format パラメーターは、json、csv、または tabular にすることができます。

3.5.2.1.2. ユーザー名とパスワードを使用した認証

htpasswd ファイルに指定されるユーザー名とパスワードの組み合わせを使用して基本認証を実行できます。デフォルトで、空の htpasswd データを含むシークレットを作成します。ただし、reporting-operator.spec.authProxy.htpasswd.data および reporting-operator.spec.authProxy.htpasswd.createSecret キーを、この方法を使用するように設定できます。

上記の設定を MeteringConfig に指定した後は、以下のコマンドを実行できます。

curl -u testuser:password123 -k "https://$METERING_ROUTE_HOSTNAME/api/v1/reports/get?name=[Report Name]&namespace=openshift-metering&format=[Format]"

testuser:password123 を有効なユーザー名とパスワードの組み合わせに置き換えます。

3.5.2.2. 認証の手動設定

reporting-operator で OAuth を手動で設定するか、または無効にするには、MeteringConfig で spec.tls.enabled: false を設定する必要があります。

警告

これは、reporting-operator、presto、および hive 間のすべての TLS/認証も無効にします。これらのリソースは手動で設定する必要があります。

認証を有効にするには、以下のオプションを設定します。認証を有効にすると、reporting-operator Pod が OpenShift 認証プロキシーを Pod のサイドカーコンテナーとして実行するように設定されます。これによりポートが調整され、reporting-operator API が直接公開されず、代わりに認証プロキシーサイドカーコンテナーにプロキシーされます。

  • reporting-operator.spec.authProxy.enabled
  • reporting-operator.spec.authProxy.cookie.createSecret
  • reporting-operator.spec.authProxy.cookie.seed

reporting-operator.spec.authProxy.enabled および reporting-operator.spec.authProxy.cookie.createSecrettrue に設定し、reporting-operator.spec.authProxy.cookie.seed を 32 文字のランダムな文字列に設定する必要があります。

以下のコマンドを使用して、32 文字のランダムな文字列を生成できます。

$ openssl rand -base64 32 | head -c32; echo.
3.5.2.2.1. トークン認証

以下のオプションが true に設定されている場合、ベアラートークンを使用する認証がレポート REST API に対して有効になります。ベアラートークンは serviceAccount またはユーザーから送られる場合があります。

  • reporting-operator.spec.authProxy.subjectAccessReview.enabled
  • reporting-operator.spec.authProxy.delegateURLs.enabled

認証が有効にされると、ユーザーまたは serviceAccount のレポート API をクエリーするために使用されるベアラートークンに、以下のロールのいずれかを使用するアクセスが付与される必要があります。

  • report-exporter
  • reporting-admin
  • reporting-viewer
  • metering-admin
  • metering-viewer

metering-operator は、spec.permissions セクションにサブジェクトの一覧を指定して、RoleBindings を作成し、これらのパーミッションを付与できます。たとえば、以下の advanced-auth.yaml の設定例を参照してください。

apiVersion: metering.openshift.io/v1
kind: MeteringConfig
metadata:
  name: "operator-metering"
spec:
  permissions:
    # anyone in the "metering-admins" group can create, update, delete, etc any
    # metering.openshift.io resources in the namespace.
    # This also grants permissions to get query report results from the reporting REST API.
    meteringAdmins:
    - kind: Group
      name: metering-admins
    # Same as above except read only access and for the metering-viewers group.
    meteringViewers:
    - kind: Group
      name: metering-viewers
    # the default serviceaccount in the namespace "my-custom-ns" can:
    # create, update, delete, etc reports.
    # This also gives permissions query the results from the reporting REST API.
    reportingAdmins:
    - kind: ServiceAccount
      name: default
      namespace: my-custom-ns
    # anyone in the group reporting-readers can get, list, watch reports, and
    # query report results from the reporting REST API.
    reportingViewers:
    - kind: Group
      name: reporting-readers
    # anyone in the group cluster-admins can query report results
    # from the reporting REST API. So can the user bob-from-accounting.
    reportExporters:
    - kind: Group
      name: cluster-admins
    - kind: User
      name: bob-from-accounting

  reporting-operator:
    spec:
      authProxy:
        # htpasswd.data can contain htpasswd file contents for allowing auth
        # using a static list of usernames and their password hashes.
        #
        # username is 'testuser' password is 'password123'
        # generated htpasswdData using: `htpasswd -nb -s testuser password123`
        # htpasswd:
        #   data: |
        #     testuser:{SHA}y/2sYAj5yrQIN4TL0YdPdmGNKpc=
        #
        # change REPLACEME to the output of your htpasswd command
        htpasswd:
          data: |
            REPLACEME

または、get パーミッションを reports/export に付与するルールを持つすべてのロールを使用できます。これは、reporting-operator の namespace の Report リソースの export サブリソースに対する get アクセスです。例: admin および cluster-admin

デフォルトで、reporting-operator および metering-operator serviceAccounts にはどちらにもこれらのパーミッションがあり、それらのトークンを認証に使用することができます。

3.5.2.2.2. 基本認証 (ユーザー名/パスワード)

基本認証では、reporting-operator.spec.authproxy.htpasswd.data にユーザー名とパスワードを指定することができます。ユーザー名とパスワードは htpasswd ファイルにあるものと同じ形式である必要があります。設定されている場合、htpasswdData のコンテンツに対応するエントリーのあるユーザー名とパスワードを指定するために HTTP 基本認証を使用できます。