通过CloudShell管理集群出现超时问题

更新时间:

问题描述

阿里云提供云命令行工具CloudShell,方便用户使用网页版命令行工具管理云资源。容器服务集成了CloudShell,所以用户可以通过此工具管理集群。在用户使用CloudShell管理集群时,可能会出现如下超时错误。

Unable to connect to the server: dial tcp XX.XX.XX.XX:6443: i/o timeout

问题原因

容器服务与CloudShell集成,在CloudShell环境中安装kubectl工具并配置kubeconfig文件。kubectl使用kubeconfig文件中定义的API Server公网连接端点与集群通信。如果在创建集群的时候,未开启API Server公网访问功能,则用户无法通过CloudShell管理集群。

解决方案

在未开启API Server公网访问功能的情况下,用户可以通过给集群内网SLB绑定EIP的方式赋予集群API Server公网访问能力。同时,因为API Server的证书使用内网SLB地址且无法更改,所以集群客户端只有在不检查API Server证书的情况下,使用kubeconfig访问集群。

  1. 在专有网络控制台申请弹性公网IP
  2. 登录容器服务控制台,在侧边栏选择 集群列表,单击集群名称进入集群管理页面。
  3. 记录API Server内网连接端点IP地址。
  4. 登录负载均衡控制台,使用内网连接端点IP地址,查找群内网SLB,并绑定第一步申请的弹性公网IP。
  5. 登录容器服务控制台,打开CloudShell界面,按照如下格式修改~/.kube/config配置文件。
    clusters:
    - cluster:
    server: https://[$Public_IP]:6443
    insecure-skip-tls-verify: true
    注:
    • [$Public_IP]为SLB绑定的EIP地址。
    • 开启insecure-skip-tls-verify选项。由于容器服务默认的证书中不包含用户自添加的SLB,需跳过TLS检验。
  6. 确认可正常使用CloudShell管理集群。

适用于

  • 容器服务Kubernetes标准版
  • 容器服务Kubernetes托管版
  • 容器服务Kubernetes Serverless版