27.12. 常见问题解答
27.12.1. 与 Cluster Operator 相关的问题 复制链接链接已复制到粘贴板!
27.12.1.1. 为什么需要集群管理员特权才能安装 AMQ Streams? 复制链接链接已复制到粘贴板!
要安装 AMQ Streams,您需要创建以下集群范围资源:
-
自定义资源定义(CRD)来指示 OpenShift 关于特定于 AMQ Streams 的资源,如
Kafka和KafkaConnect -
clusterroles 和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 中的可用区。Node 是一个集群范围的资源,因此只能通过 ClusterRoleBinding 而非命名空间范围的 RoleBinding 授予它。
27.12.1.3. 标准 OpenShift 用户能否创建 Kafka 自定义资源? 复制链接链接已复制到粘贴板!
默认情况下,标准 OpenShift 用户没有管理 Cluster Operator 处理的自定义资源所需的权限。集群管理员可以使用 OpenShift RBAC 资源授予用户必要的特权。
如需更多信息,请参阅 第 4.6 节 “设计 AMQ Streams 管理员”。
27.12.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。
27.12.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", "");