如何在具有私有拓扑和内部负载均衡器的 aws 上连接到我的集群?

How to connect to my cluster on aws which has private topology and internal loadbalacer?

我正在使用以下命令创建集群:

kops create cluster --zones us-west-1c --master-size=m4.large --node-size=m5.large ${NAME} --associate-public-ip=false --topology private --api-loadbalancer-type internal --networking calico --vpc vpc-xxxxxxxx --cloud-labels="Creator=revor,Description=YM k8 cluster,ENV=int,Name=SMV_INT_YMK8,Requestor=Rey Reymond,code=5483"

集群在 aws 中创建。到目前为止,一切都很好。但问题是,当我 运行 kops validate cluster 我得到:

Validating cluster xxx.xxx.xx unexpected error during validation: error listing nodes: Get https://api. xxx.xxx.xx/api/v1/nodes: dial tcp 172.30.xx.xx:443: getsockopt: connection refused

当我 运行 kubectl get nodes 我得到:

Unable to connect to the server: dial tcp 172.30.xx.xx:443: i/o timeout

另外当我 运行 ssh -i ~/.ssh/id_rsa admin@api.xxx.xxx.xx 我得到:

sh: connect to host api. xxx.xxx.xx port 22: Connection refused

我的问题是为什么我无法连接到我的集群以及为什么我会收到上述错误?

如上面的命令所示,我的集群被定义为具有私有拓扑,没有 public IP 地址和内部负载均衡器。我想知道这是否意味着我不应该能够连接到我的集群并且会出现上述错误?

如果您的所有实例都是私有的,那是意料之中的。我敢打赌你的 xxx.xxx.xx 是在像 172.x.x.x 这样的私人 IP 范围内。通常的方法是在 public 网络中创建一个具有 public IP 地址的 EC2 实例,连接到该实例,然后从该 public 实例连接到您的私有实例。这种实例通常被称为堡垒主机。当然,您必须修改 VPC 安全组以允许从您的 public 子网访问您的私有子网。

查看 https://docs.aws.amazon.com/quickstart/latest/linux-bastion/welcome.html 以获取 AWS 提供的指南。

除了@Sergey Kovalev 提到的内容之外,请确保您的 kubeconfig 配置正确(在您的堡垒主机中)以使您的 "kubectl" 连接到您的 kube master api