You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过kubectl从本地访问AWS上自建的Kubernetes集群?

解决kubeadm搭建K8s集群本地kubectl访问证书验证失败问题

问题背景

在AWS EC2公有子网用kubeadm搭建自建K8s集群,主节点/工作节点均有公网IP。集群内kubectl操作正常,但本地Linux机器复制kubeconfig后执行kubectl get nodes报错:

E0929 12:04:43.319775   26908 memcache.go:265] couldn't get current server API group list: Get "https://10.0.1.227:6443/api?timeout=32s": dial tcp 10.0.1.227:6443: connectex: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.

替换kubeconfig中的server地址为主节点公网IP后,出现证书验证错误:

E0929 11:26:50.902035   25572 memcache.go:265] couldn't get current server API group list: Get "https://3.110.130.136:6443/api?timeout=32s": tls: failed to verify certificate: x509: certificate is valid for 10.96.0.1, 10.0.1.227, not 3.110.130.136

安全组已开放6443端口,问题根源是kubeadm生成的apiserver证书未包含主节点公网IP作为SAN(Subject Alternative Name)。


解决方案

方法一:重新生成apiserver证书(推荐生产环境使用)

  • 登录主节点,备份原有证书
    mkdir -p /etc/kubernetes/pki/backup
    cp /etc/kubernetes/pki/apiserver.{crt,key} /etc/kubernetes/pki/backup/
    
  • 创建kubeadm配置文件,添加公网IP到SAN列表
    创建kubeadm-config.yaml文件,填入以下内容(替换公网/私网IP为实际值):
    apiVersion: kubeadm.k8s.io/v1beta3
    kind: ClusterConfiguration
    kubernetesVersion: stable
    apiServer:
      certSANs:
      - "10.0.1.227" # 主节点私网IP
      - "3.110.130.136" # 主节点公网IP
      - "localhost"
      - "127.0.0.1"
      - "kubernetes"
      - "kubernetes.default"
      - "kubernetes.default.svc"
      - "kubernetes.default.svc.cluster.local"
    
  • 重新生成apiserver证书
    kubeadm init phase certs apiserver --config=kubeadm-config.yaml
    
  • 重启kube-apiserver Pod
    kubectl delete pod -n kube-system -l component=kube-apiserver
    
  • 更新本地kubeconfig
    从主节点复制~/.kube/config到本地~/.kube/config,并将其中的server字段修改为https://<主节点公网IP>:6443。

方法二:临时跳过证书验证(仅测试环境使用)

  • 编辑本地~/.kube/config文件,找到集群配置部分,添加insecure-skip-tls-verify: true:
    clusters:
    - cluster:
        certificate-authority-data: <原有证书数据>
        server: https://<主节点公网IP>:6443
        insecure-skip-tls-verify: true # 新增此行跳过验证
      name: kubernetes
    
  • 保存文件后执行kubectl get nodes即可正常访问,但此方法关闭TLS证书验证,存在安全风险,不建议生产环境使用。

内容的提问来源于stack exchange,提问作者Aman Deep

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 15:58:08