如何通过 ssh 隧道使用 kubectl 通过我的 kubernetes API 访问我的内部 ELB?

Posted

技术标签:

【中文标题】如何通过 ssh 隧道使用 kubectl 通过我的 kubernetes API 访问我的内部 ELB?【英文标题】:How do I use kubectl via an ssh tunnel to access my internal ELB over my kubernetes API? 【发布时间】:2019-02-14 14:42:20 【问题描述】:

我想使用完全使用私有拓扑的 KOPS 创建一个 kubernetes 集群(所有主/工作节点都在私有子网上,API ELB 是内部的)。

创建集群后 - 如何配置 kubectl 以通过我的堡垒服务器使用 ssh 隧道?

【问题讨论】:

我也想设置这个配置,使用私有子网会更好。你最后有没有想通? 【参考方案1】:

我找到了一种方法让kubectl 通过 SSH 隧道运行,这并不理想,但在我找到更好的东西之前,我现在发布它。

首先创建隧道:

ssh -f user@XX.XX.XXX.XX -L 6443:localhost:6443 -N

然后在本地计算机上复制~/.kube/config 文件并更改集群server 以指向127.0.0.1 而不是服务器URL 或IP 地址。

由于证书是为创建主节点的服务器制作的,您将收到以下错误:

Unable to connect to the server: x509: certificate is valid for 10.96.0.1, 10.0.0.1, not 127.0.0.1

你必须通过--insecure-skip-tls-verify=true标志:

kubectl --insecure-skip-tls-verify=true version
Client Version: version.InfoMajor:"1", Minor:"14", GitVersion:"v1.14.3", GitCommit:"5e53fd6bc17c0dec8434817e69b04a25d8ae0ff0", GitTreeState:"clean", BuildDate:"2019-06-06T01:44:30Z", GoVersion:"go1.12.5", Compiler:"gc", Platform:"darwin/amd64"
Server Version: version.InfoMajor:"1", Minor:"15", GitVersion:"v1.15.1", GitCommit:"4485c6f18cee9a5d3c3b4e523bd27972b1b53892", GitTreeState:"clean", BuildDate:"2019-07-18T09:09:21Z", GoVersion:"go1.12.5", Compiler:"gc", Platform:"linux/amd64"

我希望这会有所帮助,并且我希望找到一种更好的方法来避免这个--insecure-skip-tls-verify=true 标志。


更新

自从我发表评论后,我从Gravitational 中找到了Teleport 项目,该项目最初是一个无需密码即可进行身份验证的SSH 工具(您登录一次,使用OTP 和有效期有限的证书您的用户已交付并用于向允许的服务器进行身份验证。),也与 Kubernetes 兼容。

基本上你必须:

    部署他们的二进制文件并进行配置(非常简单)。 使用tsh login --proxy https://yourserveripaddress:3080登录 使用kubectl 访问您的集群。

这里的神奇之处在于 Teleport 将更新您的 ~/.kube/config 文件以访问您的集群。

真的很好用,你应该考虑试一试。

如果您使用的是Chef,我已经创建了a cookbook for Teleport。

【讨论】:

可以在~/.kube/configcluster设置下指定insecure-skip-tls-verify: true选项【参考方案2】:

您可以通过 SSH 使用 ***,这对您的 kubectl 是透明的,示例工具:https://github.com/sshuttle/sshuttle 使用 SSH 和 iptables 创建 *** 隧道

要求堡垒主机上至少有 python 2.3。

【讨论】:

在盒子上添加另一个服务并不能回答问题。 但它是禁用证书验证的替代方案......不知道你为什么会反对 tbh

以上是关于如何通过 ssh 隧道使用 kubectl 通过我的 kubernetes API 访问我的内部 ELB?的主要内容,如果未能解决你的问题,请参考以下文章

如何配置系统通过 ssh 反向隧道/代理使用 git?

通过 ssh 迁移工作台 - 如何设置隧道

MySQL 通过 SSH 隧道连接 - 如何指定其他 MySQL 服务器?

如何在MacOS上创建ssh隧道? [关闭]

PyCharm SSH 隧道通过本地 ssh 配置 (~/.ssh/config)

如何使用 Fabric 通过 2 个网关将 SSH 隧道连接到远程主机?