我之前的设置是 Kubernetes 上的一个控制节点(非 HA)和几个工作节点。我正在构建一个包含三个控制节点(HA)和 9 个工作节点的新集群。通过安全的 websocket(wss)从浏览器进行连接。
非 HA 设置可以毫无问题地使用外部地址 wss://api.xxxx.com。现在,当设置 HA 集群时,我无法再连接到地址 wss://api.xxxx.com,只能向浏览器发送消息NS_ERROR_GENERATE_FAILURE(NS_ERROR_MODULE_SECURITY,SSL_ERROR_RX_RECORD_TOO_LONG)
。Kubernetes 集群证书适用于域 api.xxxx.com。
答案1
该错误消息表明您的 Kubernetes 集群使用的安全证书和服务端存在问题。以下是一些可能的原因和解决方案:
检查防火墙规则、防病毒软件、负载平衡器和网络策略是否到位。
确保证书有效、由受信任的证书颁发机构 (CA) 签名,并包含正确的域名 (api.xxxx.com)。
检查 DNS 配置以确认主机名api.xxxx.com解析为 HA 集群的正确 IP 地址。确保 DNS 记录正确
确保端口 443 用于您网站上的安全连接,并正确配置并打开您的服务器。
确认没有多个 SSL 证书使用相同的 IP 地址。请确保每个 SSL 证书都有不同的 IP 地址。检查 SSL 证书是否有效(检查证书的到期日期并在必要时进行续订)。另请参阅此 open github问题。
在极少数情况下,可以通过清理或避免缓存来解决此问题。尝试使用不同的浏览器使用隐身或私人窗口查看网站而不使用 cookie 或缓存是测试此问题的最简单方法。
考虑升级 TLS 版本支持和浏览器版本也有助于修复此错误
参考此博客通过 Kinsta 了解更多信息
编辑:1
检查集群中的所有主机是否都可以访问相同的共享存储。无论发生什么故障,一台主机上的虚拟机 (VM) 都可以故障转移到另一台主机,而无需停机。
将非 HA 控制平面“升级”到 HA 控制平面的最佳方法是构建新的 HA 控制平面并迁移所有工作负载。
要解决您的问题,您可能需要更新证书,以便 SAN 列表包含用于访问 API 服务器更新控制平面组件的任何和所有 IP 地址或主机名。
根据此博客通过 Scott 的博客,您可能还需要更新控制平面组件。
“就像您更新 Kubelet 使用的 Kubeconfig 文件(通过修改正在修改的集群的服务器:行以指向负载均衡器)一样,您还需要更新控制器管理器和调度程序用于连接 API 服务器的 Kubeconfig 文件。
需要修改的文件有:
/etc/kubernetes/controller-manager.conf /etc/kubernetes/scheduler.conf
这些文件是标准的 Kubeconfig 文件。唯一需要更改的行是 server: 行,该行指定 API 端点(当前可能指向单个控制平面节点的 IP 地址或主机名)。编辑每个文件以指向负载均衡器的 IP 地址或 DNS 名称(并且 API 服务器证书上存在 SAN)。为了让这些组件生效,您需要重新启动它们。”
另请参阅文档Micro 重点介绍常见的高可用性配置错误
答案2
我找到了解决方案,或者说实际上是我的配置错误。haproxy/ingress 证书 yaml 文件中的名称拼写错误。所以与 kubernetes 无关。我可以接受 Sai 的回答,我是如何找到它的