11.8. 常见问题解答
11.8.1. 与 Cluster Operator 相关的问题 复制链接链接已复制到粘贴板!
11.8.1.1. 为什么我需要集群管理员特权才能安装 AMQ Streams? 复制链接链接已复制到粘贴板!
要安装 AMQ Streams,您需要创建以下集群范围资源:
- 
								自定义资源定义(CRD)指示 OpenShift 特定于 AMQ Streams 的资源,如 
Kafka和KafkaConnect - 
								
ClusterRole和ClusterRoleBindings 
集群范围内的资源(不特定于特定 OpenShift 命名空间)的资源通常 需要集群管理员特权 才能安装。
						作为集群管理员,您可以检查正在安装的所有资源(在 /install/ 目录中),以确保 ClusterRole 没有授予不必要的权限。
					
						安装后,Cluster Operator 会作为常规 Deployment 运行,因此具有访问 Deployment 的任何标准(非管理员)OpenShift 用户都可以进行配置。集群管理员可向标准用户授予管理 Kafka 自定义资源所需的权限。
					
另请参阅:
11.8.1.2. Cluster Operator 为何需要创建 ClusterRoleBindings? 复制链接链接已复制到粘贴板!
OpenShift 具有内置 特权升级会阻止,这意味着 Cluster Operator 无法授予其本身的权限,特别是,它无法在它无法访问的命名空间中授予此类权限。因此,Cluster Operator 必须具有它编排的所有组件所需的权限。
Cluster Operator 需要能够授予访问权限,以便:
- 
								Topic Operator 可以管理 
KafkaTopics,方法是在 Operator 中运行的命名空间中创建一个Role和RoleBindings - 
								User Operator 可以管理 
KafkaUsers,方法是在 Operator 中运行的命名空间中创建一个Role和RoleBindings - 
								AMQ Streams 发现了 
节点的故障域,方法是创建一个ClusterRoleBinding 
						在使用机架感知分区分配时,代理 pod 需要能够获取有关其运行 的节点的信息,例如:Amazon AWS 中的 Availability Zone。节点是 集群范围的资源,因此只能通过 ClusterRoleBinding 而非全命名空间范围的 RoleBinding 授予访问权限。
					
11.8.1.3. 标准 OpenShift 用户能否创建 Kafka 自定义资源? 复制链接链接已复制到粘贴板!
默认情况下,标准 OpenShift 用户没有管理 Cluster Operator 处理的自定义资源所需的权限。集群管理员可以使用 OpenShift RBAC 资源授予用户必要的特权。
如需更多信息,请参阅在 OpenShift 中部署和升级 AMQ Streams 指南中的设计 AMQ Streams 管理员。
11.8.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
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。
11.8.1.5. 在使用 TLS 连接到 NodePort 时,为什么主机名验证失败? 复制链接链接已复制到粘贴板!
目前,使用启用了 TLS 加密的 NodePort 进行非集群访问不支持 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
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=
ssl.endpoint.identification.algorithm=
在 Java 中直接配置客户端时,将配置选项设置为空字符串:
props.put("ssl.endpoint.identification.algorithm", "");
props.put("ssl.endpoint.identification.algorithm", "");