我如何在仍然留在机器上的同时通过SSH隧道连接到远程服务器?

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

我有一个Kubernetes集群来管理,它在AWS自己的私有子网中。为了允许我们对其进行管理,我们在公共子网中有一个堡垒服务器。直接通过隧道连接到我们的集群很容易。但是,我们需要让部署机器建立一个隧道并执行到Kubernetes服务器的命令,例如运行Helm和kubectl。有谁知道如何做到这一点?

非常感谢,

约翰

amazon-web-services kubernetes ssh ssh-tunnel
2个回答
0
投票

在AWS中

场景1

默认情况下,此API服务器终端节点是Internet公用的,并且通过结合使用AWS Identity and Access Management(IAM)和本机Kubernetes基于角色的访问控制(RBAC)来保护对API服务器的访问。

如果是这种情况,您可以使用提供的kubeconfig文件使用可访问Internet的Concourse服务器中的kubectl命令,如果您没有kubeconfig文件,请遵循以下steps

场景2

当您启用了专用群集终结点时(这似乎是您的情况)

[当您为集群启用终端节点私有访问时,Amazon EKS代表您创建一个Route 53私有托管区域,并将其与集群的VPC相关联。此私有托管区域由Amazon EKS管理,并且不会出现在您帐户的Route 53资源中。为了使私有托管区域正确地将流量路由到您的API服务器,您的VPC必须将enableDnsHostnames和enableDnsSupport设置为true,并且为VPC设置的DHCP选项必须在其域名服务器列表中包括AmazonProvidedDNS。有关更多信息,请参阅Amazon VPC用户指南中的为您的VPC更新DNS支持。

您可以修改私有端点的步骤here或遵循以下Steps


0
投票

可能有更多简单的方法可以完成它,但是我想到的第一个解决方案是设置简单的ssh端口转发。

假设您具有对两台计算机的ssh访问权限,即Concourse具有对Bastion的SSH访问权限,并且Bastion具有对Cluster的ssh访问权限,则可以执行以下操作:

首先在Bastion上进行所谓的本地ssh端口转发(相当详细地描述了here):

ssh -L <kube-api-server-port>:localhost:<kube-api-server-port> ssh-user@<kubernetes-cluster-ip-address-or-hostname>

现在您可以通过以下方式从Bastion访问您的kubernetes api:

curl localhost:<kube-api-server-port>

但是仍然不是您所需要的。现在,您需要将其转发到您的Concourse机器。在Concource上运行:

ssh -L <kube-api-server-port>:localhost:<kube-api-server-port> ssh-user@<bastion-server-ip-address-or-hostname>

[从现在开始,您的Concourse机器的本地主机上将提供kubernetes API,因此您可以例如使用curl访问它:

curl localhost:<kube-api-server-port>

或将其合并到您的.kube/cofig中。

让我知道是否有帮助。

您还可以使这种隧道更加持久。有关更多信息,您可以找到here

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