我们使用 kubeadm 方法创建了一个自管理的 kubernetes 集群。这是一个托管在 AWS EC2 实例上的 3 节点集群(1 个主节点和 2 个从节点)。
我们创建了一个单独的 NGINX 服务器来路由部署在 K8S 集群上的不同应用程序的请求。
此 NGINX 服务器与 openssl 自签名证书一起链接到 AWS ALB,以便只能通过 HTTPS 侦听器端口(即 443)访问集群。
此外,我们已将一个单独的 ALB 与 K8S Master 链接起来,以访问 K8S Dashboard / K8S Api Server。
我们正在使用 Jenkins 创建作业以在 K8S 集群中自动部署。但是,当我们间歇性地运行该作业时,我们会收到 TLS 握手超时。
例如:- 如果我们运行以下命令:
kubectl get pods --insecure-skip-tls-verify=true
我们收到一个错误:
无法连接到服务器:net/http:TLS 握手超时
多次重新运行时,该命令均成功运行。
我们使用的是最新版本的 Kubernetes,即 1.15 版本
我们一直在努力寻找这一问题的永久解决方案。
我该如何修复它?
答案1
我们的架构大致如下:-
EndUser <- ALB1 <- NGINX 服务器(其中已设置访问托管在 K8S 集群上的应用程序的路由规则)
EndUser <- ALB2 <- K8S Master(用于访问 K8S Dashboard 或向 Kube API Server 发送请求)
看起来每当 Jenkins 服务器向 ALB2 发出连接 K8S 集群的请求时,数据包就会丢失,因此我们会遇到间歇性超时问题。
我们已用 Classic ELB 替换了 AWS ALB,这解决了间歇性超时问题。
希望这可以帮助。