付録A よくある質問
A.1. Cluster Operator に関する質問
A.1.1. AMQ Streams のインストールに、クラスター管理者の権限が必要なのはなぜですか?
AMQ Streams をインストールするには、以下のクラスタースコープのリソースの作成が可能でなければなりません。
-
Kafka
やKafkaConnect
などの AMQ Streams 固有のリソースについて OpenShift に指示するカスタムリソース定義 (CRD) -
ClusterRoles
およびClusterRoleBindings
特定の OpenShift namespace にスコープ指定されていないクラスタースコープのリソースをインストールするには、通常は クラスター管理者 の権限が必要です。
クラスター管理者として、(/install/
ディレクトリーに) インストールされているすべてのリソースを検査し、ClusterRoles
が不要な権限を付与しないようにします。
インストール後に、Cluster Operator は通常の Deployment
として実行されるため、Deployment
へのアクセス権限を持つ OpenShift の標準ユーザー (管理者以外) であれば誰でもこれを設定できます。クラスター管理者は、Kafka
カスタムリソースの管理に必要な権限を標準ユーザーに付与できます。
以下も参照してください。
A.1.2. Cluster Operator が ClusterRoleBindings
を作成する必要があるのはなぜですか?
OpenShift には組み込みの 権限昇格防止機能 があります。これは、Cluster Operator は付与されていない権限を付与できず、特にアクセスできない namespace にこのような権限を付与できないことを意味します。そのため、Cluster Operator は、オーケストレーションする すべて のコンポーネントに必要な権限を持つ必要があります。
以下を実行するため、Cluster Operator によるアクセス権の付与が必要です。
-
Topic Operator は、operator が実行される namespace に
Roles
およびRoleBindings
を作成することで、KafkaTopics
を管理できます。 -
User Operator は、operator が実行される namespace に
Roles
およびRoleBindings
を作成することで、KafkaUsers
を管理できます。 -
Node
の障害ドメインは、ClusterRoleBinding
を作成することで、AMQ Streams によって検出されます。
ラックアウェアネス (Rack Awareness) のパーティション割り当てを使用する場合、ブローカー Pod は、Amazon AWS のアベイラビリティーゾーンなどの実行中の Node
についての情報を取得できなければなりません。Node
はクラスタースコープのリソースであるため、アクセスは namespace スコープの RoleBinding
ではなく、ClusterRoleBinding
を介してのみ許可できます。
A.1.3. OpenShift の標準ユーザーは Kafka カスタムリソースを作成できますか?
デフォルトでは、OpenShift の標準ユーザーには、Cluster Operator で処理されるカスタムリソースの管理に必要な権限がありません。クラスター管理者は、OpenShift RBAC リソースを使用してユーザーに必要な権限を付与できます。
詳細は、「Strimzi 管理者」 を参照してください。
A.1.4. 警告ログの ロックの取得に失敗 とはどういうことですか?
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 の再起動を試行します。
A.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", "");