29.4. よくある質問
29.4.1. Cluster Operator に関する質問
29.4.1.1. Streams for Apache Kafka をインストールするのにクラスター管理者権限が必要なのはなぜですか?
Streams for Apache Kafka をインストールするには、次のクラスタースコープのリソースを作成できる必要があります。
-
Streams for Apache Kafka 固有のリソース (
Kafka
やKafkaConnect
など) について OpenShift に指示するためのカスタムリソース定義 (CRD) -
ClusterRoles
およびClusterRoleBindings
特定の OpenShift namespace にスコープ指定されていないクラスタースコープのリソースをインストールするには、通常は クラスター管理者 の権限が必要です。
クラスター管理者として、(/install/
ディレクトリーに) インストールされているすべてのリソースを検査し、ClusterRole
が不要な権限を付与しないようにします。
インストール後に、Cluster Operator は通常の Deployment
として実行されるため、Deployment
へのアクセス権限を持つ OpenShift の標準ユーザー (管理者以外) であれば誰でもこれを設定できます。クラスター管理者は、Kafka
カスタムリソースの管理に必要な権限を標準ユーザーに付与できます。
以下も参照してください。
29.4.1.2. Cluster Operator が ClusterRoleBindings
を作成する必要があるのはなぜですか ?
OpenShift には組み込みの 権限昇格防止機能 があります。これは、Cluster Operator は付与されていない権限を付与できず、特にアクセスできない namespace にこのような権限を付与できないことを意味します。そのため、Cluster Operator は、オーケストレーションする すべて のコンポーネントに必要な権限を持つ必要があります。
Cluster Operator によるアクセス権の付与は、以下を行うために必要です。
-
Operator が実行される namespace に
Roles
とRoleBindings
を作成することで、Topic Operator がKafkaTopics
を管理できるようにする。 -
Operator が実行される namespace に
Roles
とRoleBindings
を作成することで、User Operator がKafkaUsers
を管理できるようにする。 -
ClusterRoleBinding
を作成することで、Node
の障害ドメインを Streams for Apache Kafka によって検出する。
ラック認識のパーティション割り当てを使用する場合、ブローカー Pod は、Amazon AWS のアベイラビリティーゾーンなどの実行中の Node
についての情報を取得できなければなりません。Node
はクラスタースコープのリソースであるため、アクセスは namespace スコープの RoleBinding
ではなく、ClusterRoleBinding
を介してのみ許可できます。
29.4.1.3. OpenShift の標準ユーザーは Kafka カスタムリソースを作成できますか ?
デフォルトでは、OpenShift の標準ユーザーには、Cluster Operator で処理されるカスタムリソースの管理に必要な権限がありません。クラスター管理者は、OpenShift RBAC リソースを使用してユーザーに必要な権限を付与できます。
詳細は、「Streams for Apache Kafka 管理者の指定」 を参照してください。
29.4.1.4. ログの Failed to acquire lock 警告の意味
Cluster Operator は各クラスターに対して一度に単一の操作のみを実行します。Cluster Operator はロックを使用して、同じクラスターに対して並列操作が実行されないようにします。その他の操作は、ロックがリリースされる前に現在の操作が完了するまで待機する必要があります。
- INFO
- クラスター操作の例には、クラスターの作成、ローリング更新、スケールダウン、スケールアップ が含まれます。
ロックの待機時間が長すぎると、操作はタイムアウトになり、以下の警告メッセージがログに出力されます。
2018-03-04 17:09:24 WARNING AbstractClusterOperations:290 - Failed to acquire lock for kafka cluster lock::kafka::myproject::my-cluster
STRIMZI_FULL_RECONCILIATION_INTERVAL_MS
と STRIMZI_OPERATION_TIMEOUT_MS
の正確な設定によっては、根本的な問題を示すことなく、この警告メッセージが時々表示される場合があります。タイムアウトする操作が次の定期的な調整で検出され、これにより操作がロックを取得し、再度実行することができます。
指定のクラスターに他の操作が実行されていないはずの状況においても、このメッセージが定期的に表示される場合は、エラーが原因でロックが適切にリリースされなかったことを示している可能性があります。この場合、Cluster Operator の再起動を試行します。
29.4.1.5. TLS を使用して NodePort に接続するとホスト名の検証に失敗するのはなぜですか ?
現時点では、TLS 暗号化が有効になっている NodePorts を使用したクラスター外のアクセスは、TLS ホスト名の検証をサポートしていません。その結果、ホスト名を確認するクライアントが接続に失敗します。たとえば、Java クライアントは以下の例外によって失敗します。
Caused by: java.security.cert.CertificateException: No subject alternative names matching IP address 168.72.15.231 found at sun.security.util.HostnameChecker.matchIP(HostnameChecker.java:168) at sun.security.util.HostnameChecker.match(HostnameChecker.java:94) at sun.security.ssl.X509TrustManagerImpl.checkIdentity(X509TrustManagerImpl.java:455) at sun.security.ssl.X509TrustManagerImpl.checkIdentity(X509TrustManagerImpl.java:436) at sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:252) at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:136) at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1501) ... 17 more
接続するには、ホスト名の検証を無効にする必要があります。Java クライアントでは、設定オプション ssl.endpoint.identification.algorithm
を空の文字列に設定することでこれを実行できます。
プロパティーファイルを使用してクライアントを設定する場合は、以下のように実行できます。
ssl.endpoint.identification.algorithm=
Java でクライアントを直接設定する場合は、設定オプションを空の文字列に設定します。
props.put("ssl.endpoint.identification.algorithm", "");