20.10. 常见问题解答
20.10.1. 与 Cluster Operator 相关的问题 复制链接链接已复制到粘贴板!
20.10.1.1. 为什么需要集群管理员特权来安装 AMQ Streams? 复制链接链接已复制到粘贴板!
要安装 AMQ Streams,您需要创建以下集群范围资源:
-
自定义资源定义(CRD)指示 OpenShift 关于特定于 AMQ Streams 的资源,如
Kafka
和KafkaConnect
-
ClusterRole
和ClusterRoleBindings
集群范围的资源(不限定于特定 OpenShift 命名空间)通常需要安装 集群管理员特权。
作为集群管理员,您可以检查正在安装的所有资源(在 /install/
目录中),以确保 ClusterRole
不授予不必要的特权。
安装后,Cluster Operator 以常规部署
的形式运行,因此具有访问 Deployment
的任何标准(非 admin)OpenShift 用户都可以进行配置。集群管理员可以为标准用户授予管理 Kafka
自定义资源所需的权限。
另请参阅:
OpenShift 有内置 特权升级阻止,这意味着 Cluster Operator 无法授予它本身没有的权限,特别是无法在它无法访问的命名空间中授予此类权限。因此,Cluster Operator 必须具有它编排的所有组件所需的权限。
Cluster Operator 需要能够授予访问权限,以便:
-
主题 Operator 可以在 Operator 运行的命名空间中创建
Role
和RoleBindings
来管理KafkaTopics
-
User Operator 可以在 Operator 运行的命名空间中创建
Role
和RoleBindings
来管理KafkaUsers
-
AMQ Streams
通过创建一个
ClusterRoleBinding
发现节点的故障域
在使用机架感知分区分配时,代理 pod 需要能够获取有关它 正在运行的节点
的信息,例如 Amazon AWS 中的 Availability Zone。Node
是一个集群范围的资源,因此只能通过 ClusterRoleBinding
授予权限,而不通过命名空间范围的 RoleBinding
授予权限。
20.10.1.3. 标准 OpenShift 用户能否创建 Kafka 自定义资源? 复制链接链接已复制到粘贴板!
默认情况下,标准 OpenShift 用户没有管理 Cluster Operator 处理的自定义资源所需的权限。集群管理员可以使用 OpenShift RBAC 资源授予用户必要的特权。
如需更多信息,请参阅 第 4.6 节 “设计 AMQ Streams 管理员”。
20.10.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。
20.10.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", "");