在私有vpc和NAT中连接GCP Kubernetes

No1*_*ver 4 kubernetes google-kubernetes-engine kubectl

我创建了一个新的GCP Kubernetes集群。群集是使用NAT专用的-无法连接到Internet。我还部署了bastion允许我从互联网连接到我的专用网络(vpc)的计算机。这是我基于教程。SSH进入bastion-目前可以使用。

kubernetes主服务器没有暴露在外面。结果:

$ kubectl get pods
  The connection to the server 172.16.0.2 was refused - did you specify the right host or port?
Run Code Online (Sandbox Code Playgroud)

所以我安装了kubectl bastion并运行:

$ kubectl proxy --port 1111
  Starting to serve on 127.0.0.1:3128
Run Code Online (Sandbox Code Playgroud)

现在,我想将本地连接kubectl到远程代理服务器。我将安全隧道安装到bastion服务器,并将远程端口映射到本地端口。还尝试过使用CURL,它可以正常工作。

现在我正在寻找类似的东西

$ kubectl --use-proxy=1111 get pods
Run Code Online (Sandbox Code Playgroud)

(使我的本地kubectl通过tru成为我的远程代理)

怎么做?

Jan*_*art 5

kubectl proxy就像目标apiserver一样,充当apiserver一样,但是通过它的查询已经通过了身份验证。根据您的描述,“可以卷曲”,听起来好像您已经正确设置了,只需要将客户端kubectl定位到它:

kubectl --server=http://localhost:1111
Run Code Online (Sandbox Code Playgroud)

(本地计算机上的端口1111 kubectl proxy可用;在这种情况下,通过隧道)

如果您需要exec或附加槽kubectl proxy,则需要使用--disable-filter=true或来运行它--reject-paths='^$'。阅读这些选项的细则和后果。

更安全的方法

总而言之,这不是我通过堡垒访问群集的方式。上述方法的问题是,如果有人获得了对堡垒的访问权,则他们会立即拥有有效的Kubernetes凭据(因为kubectl代理需要那些凭据才能起作用)。如果在多个运营商之间共享堡垒,这也不是最安全的解决方案。堡垒的主要要点之一是它永远不会在其上拥有证书。我想做的是使用以下命令从工作站访问堡垒:

ssh -D 1080 bastion
Run Code Online (Sandbox Code Playgroud)

这使得ssh充当SOCKS代理。您需要GatewayPorts yes在sshd_config中使它起作用。之后,我可以从工作站使用

HTTPS_PROXY=socks5://127.0.0.1:1080 kubectl get pod
Run Code Online (Sandbox Code Playgroud)