本文讨论当无法通过 Kubernetes 群集命令行工具(kubectl)或任何其他工具(例如通过编程语言使用 REST API)访问群集的 API 服务器时,与 Azure Kubernetes 服务 (AKS) 群集的连接问题。
先决条件
根本原因和解决方案
API 服务器的连接问题可能有多种原因,但根本原因通常与以下项之一的错误相关:
- 网络
- 身份验证
- 授权
可以执行以下常见故障排除步骤来检查与 AKS 群集 API 服务器的连接:
在 Azure CLI 中输入以下 az aks show 命令。 此命令获取 AKS 群集的完全限定域名(FQDN)。
首先,将资源名称导出到环境变量,并将随机后缀添加到资源组和群集名称,以便进行唯一测试。
export RANDOM_SUFFIX=$(head -c 3 /dev/urandom | xxd -p) export RESOURCE_GROUP="my-aks-rg$RANDOM_SUFFIX" export AKS_CLUSTER="myakscluster$RANDOM_SUFFIX" az aks show --resource-group $RESOURCE_GROUP --name $AKS_CLUSTER --query fqdn结果:
"xxxxxx-xxxxxxxx.hcp.eastus2.azmk8s.io"使用 FQDN 时,使用名称服务器查找(nslookup)、客户端 URL(curl)和 telnet 命令检查 API 服务器是否可从客户端计算机访问:
请将
<cluster-fqdn>替换为上一步返回的实际 FQDN。 对于演示,我们使用变量。export CLUSTER_FQDN=$(az aks show --resource-group $RESOURCE_GROUP --name $AKS_CLUSTER --query fqdn -o tsv) # Check if the DNS Resolution is working: nslookup $CLUSTER_FQDN # Then check if the API Server is reachable: curl -k -Iv https://$CLUSTER_FQDN # Test raw TCP connectivity (output will vary depending on environment) timeout 5 telnet $CLUSTER_FQDN 443 || echo "Connection test completed"如果 AKS 群集是专用的,请确保从可以访问 AKS 群集的 Azure 虚拟网络的虚拟机(VM)运行命令。 请参阅 用于连接到专用群集的选项。
如有必要,请按照故障排除文章 中的步骤操作,客户端 IP 地址无法访问 API 服务器,因此 API 服务器会将客户端 IP 地址添加到它授权的 IP 范围。
请确保客户端计算机上的 kubectl 版本不是 AKS 群集版本的该工具后面的两个或更多次要版本。 若要安装最新版本的 kubectl,请在 Azure CLI 中运行 az aks install-cli 命令。 然后,可以运行 kubectl 版本 命令来检查新安装的版本号。
例如,在 Linux 上,将运行以下命令:
sudo az aks install-cli kubectl version --client对于其他客户端操作系统,请使用这些 kubectl 安装说明。
如有必要,请按照故障排除文章 Config 文件中的步骤进行连接时不可用,因此 Kubernetes 配置文件(config)有效,可以在连接时找到。
如有必要,请按照故障排除文章 中的步骤操作,用户无法获取群集资源,因此可以列出群集节点的详细信息。
如果使用防火墙来控制来自 AKS 工作节点的出口流量,请确保防火墙允许 AKS 的最低出口规则。
确保 与 AKS 节点 关联的网络安全组允许在 AKS 节点内的 TCP 端口 10250 上进行通信。
有关其他常见故障排除步骤,请参阅 kubectl 或其他第三方工具连接到 API 服务器时 TCP 超时。
联系我们寻求帮助
如果你有任何疑问或需要帮助,请创建支持请求或联系 Azure 社区支持。 你还可以将产品反馈提交到 Azure 反馈社区。