📌  相关文章
📜  Kubernetes 集群不可达:获取 "https: 192.168.56.10:6443 version?timeout=32s": net http: TLS 握手超时 - Shell-Bash (1)

📅  最后修改于: 2023-12-03 15:32:31.940000             🧑  作者: Mango

Kubernetes 集群不可达:获取 "https: 192.168.56.10:6443 version?timeout=32s": net http: TLS 握手超时 - Shell-Bash

简介

当运行 kubectl 命令时,如果遇到以下错误信息,说明 Kubernetes 集群不可达:

获取 "https: 192.168.56.10:6443/version?timeout=32s": net/http: TLS 握手超时

这意味着 kubectl 无法与 Kubernetes API 服务器建立安全连接。TLS 握手超时可能是由于 Kubernetes API 服务器的证书或配置错误,或者是 Kubernetes 集群网络配置问题。

本文将介绍如何诊断和解决这种情况。

诊断步骤
  1. 检查 Kubernetes API 服务器的证书是否正确。
  2. 检查 Kubernetes API 服务器的配置是否正确。
  3. 检查 Kubernetes 集群网络配置是否正确。
检查 Kubernetes API 服务器的证书是否正确

在默认情况下,kubectl~/.kube/config 文件中读取 Kubernetes 集群配置。该文件包含 certificate-authority-data 字段,其中包含 Kubernetes API 服务器的 CA 证书。

您可以使用以下命令检查 certificate-authority-data 字段是否正确:

$ kubectl config view --raw

您可以使用以下命令将 certificate-authority-data 字段解码为可读形式:

$ kubectl config view --raw | jq -r '.clusters[].cluster."certificate-authority-data"' | base64 --decode

确保证书没有过期、是由信任的 CA 签名的,并且与 Kubernetes API 服务器的主机名匹配。如果证书无效,您需要请求正确的证书并将其更新到 ~/.kube/config 文件中。

检查 Kubernetes API 服务器的配置是否正确

如果证书正确,您可以使用以下命令检查 Kubernetes API 服务器的配置是否正确:

$ kubectl config view --raw

检查以下字段:

  • server 字段指定 Kubernetes API 服务器的地址和端口。确保地址和端口是正确的。
  • clusters 字段包含指向 Kubernetes 集群的指针。确保指针指向正确的集群。

如果配置正确,您可以尝试与 Kubernetes API 服务器建立非安全连接:

$ kubectl config set-cluster CLUSTER_NAME --server=http://192.168.56.10:6443 --insecure-skip-tls-verify=true
$ kubectl config set-context CONTEXT_NAME --cluster=CLUSTER_NAME --user=USER_NAME
$ kubectl config use-context CONTEXT_NAME
$ kubectl version

如果 kubectl version 命令能够成功执行,这意味着 Kubernetes API 服务器有问题。

检查 Kubernetes 集群网络配置是否正确

如果 Kubernetes API 服务器配置正确并且证书也正确,那么就可能是 Kubernetes 集群网络配置有问题。

可以通过以下命令检查 Kubernetes 集群的网络配置:

$ kubectl get nodes

确保所有节点的状态都是 Ready,并且它们都连接到 Kubernetes API 服务器。

如果网络配置正确,请检查 Kubernetes 集群的网络性能。您可以使用 pingtraceroute 等命令检查网络延迟和丢包率。

结论

当出现 获取 "https: 192.168.56.10:6443/version?timeout=32s": net/http: TLS 握手超时 错误时,应优先检查 Kubernetes API 服务器的证书和配置。如果这两种情况都没有问题,则可能需要检查 Kubernetes 集群的网络配置。