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

Dor*_*ron 5 ssh-tunnel kubernetes kubectl kops

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

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

Zed*_*TuX 7

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

首先创建隧道:

ssh -f user@XX.XX.XXX.XX -L 6443:localhost:6443 -N
Run Code Online (Sandbox Code Playgroud)

然后复制~/.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
Run Code Online (Sandbox Code Playgroud)

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

kubectl --insecure-skip-tls-verify=true version
Client Version: version.Info{Major:"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.Info{Major:"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"}
Run Code Online (Sandbox Code Playgroud)

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


更新

自从我发表评论以来,我发现了来自GravitationalTeleport项目,它最初是一个无需密码即可进行身份验证的 SSH 工具(您使用OTP登录一次,并且提供了一个对您的用户而言有效期有限的证书,并用于验证允许的服务器。),也与 Kubernetes 兼容。

基本上你必须:

  1. 部署他们的二进制文件并配置它(很容易)。
  2. 登录使用 tsh login --proxy https://yourserveripaddress:3080
  3. 用于kubectl访问您的集群。

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

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

如果您使用的是Chef,我已经为 Teleport制作了一本食谱

  • 您可以在“~/.kube/config”中的“cluster”设置下指定“insecure-skip-tls-verify: true”选项 (2认同)
  • 创建集群时(例如使用 kubeadm),您可以在 api 服务器 SAN 中包含“127.0.0.1”。然后,在将 kubectl 客户端请求通过隧道传输到集群时,您将不需要提供“insecure-skip-tls-verify: true”。还有一些方法可以在正在运行的集群上更新 api 服务器的 SAN,但它需要一些额外的工作,具体取决于集群的初始创建方式。 (2认同)

Jak*_*jny 5

您可以只使用基于 SSH 的 VPN,这对您的 kubectl 来说是透明的,示例工具: https: //github.com/sshuttle/sshuttle,它使用 SSH 和 iptables 创建 VPN 隧道

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