我有一个Kubernetes集群来管理,它在AWS自己的私有子网中。为了允许我们对其进行管理,我们在公共子网中有一个堡垒服务器。直接通过隧道连接到我们的集群很容易。但是,我们需要让部署机器建立一个隧道并执行到Kubernetes服务器的命令,例如运行Helm和kubectl。有谁知道如何做到这一点?
非常感谢,
约翰
在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支持。
可能有更多简单的方法可以完成它,但是我想到的第一个解决方案是设置简单的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。