我正在 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 开放。
我该如何进行这项工作?
使用
kubeadmin
初始化 Kubernetes 集群时,您将选项 --apiserver-advertise-address
指定为私有 IP,因此 ~/.kube/config
文件中的证书仅针对该 IP 进行身份验证。
为了能够通过公共 IP 从本地使用 kubectl
命令,您可以执行以下操作:
将
master node
中的K8S配置文件复制到本地并放在路径~/.kube/config
中
打开
~/.kube/config
文件并将server
中的私有IP更改为公共IP
使用
kubectl
命令时,您需要添加 --insecure-skip-tls-verify
选项。示例:
kubectl --insecure-skip-tls-verify get pods
这是一种简单快捷的方法,或者更好的解决方案是将
Public IP
添加到 kubernetes 配置文件中,以便能够使用多个 IP。您可以按照以下说明操作: