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.createSecret
を true
に設定し、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 基本認証を使用できます。