如何使用 kubectl 从本地访问自我管理的 kubernetes 集群?

问题描述 投票:0回答:1

我正在 AWS EC2 实例(不是 EKS)上运行自我管理的 kubernetes 集群。我使用 kubeadm 进行设置 主节点和工作节点位于公共子网中并具有公共 IP。 我已经在工作节点和主节点中设置了 kube 配置,并且我能够从节点运行 kubectl 命令,但我希望能够从本地 Linux 机器运行它。

我在本地安装了 kubectl,并将 kube 配置复制到本地的 ./kube/config。

但是当我运行 kubectl 命令时出现错误 $ kubectl 获取节点

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.

现在我知道这个 - 10.0.1.227 是我的主节点的私有 IP,我无法从本地连接到它。

我尝试用我的主节点的公共IP替换私有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

猜测 kube 配置中的证书不是为公共 IP 生成的

仅供参考,端口 6443 对安全组中的所有 IP 开放。

我该如何进行这项工作?

amazon-web-services kubernetes kubectl
1个回答
0
投票

使用

kubeadmin
初始化 Kubernetes 集群时,您将选项
--apiserver-advertise-address
指定为私有 IP,因此
~/.kube/config
文件中的证书仅针对该 IP 进行身份验证。 为了能够通过公共 IP 从本地使用
kubectl
命令,您可以执行以下操作:

  1. master node
    中的K8S配置文件复制到本地并放在路径
    ~/.kube/config

  2. 打开

    ~/.kube/config
    文件并将
    server
    中的私有IP更改为公共IP

  3. 使用

    kubectl
    命令时,您需要添加
    --insecure-skip-tls-verify
    选项。示例:

    kubectl --insecure-skip-tls-verify get pods
    

这是一种简单快捷的方法,或者更好的解决方案是将

Public IP
添加到 kubernetes 配置文件中,以便能够使用多个 IP。您可以按照以下说明操作:
https://devops.stackexchange.com/a/9506/31538

© www.soinside.com 2019 - 2024. All rights reserved.