在私有vpc和NAT中连接GCP Kubernetes

时间:2019-01-30 08:12:39

标签: kubernetes kubectl google-kubernetes-engine

我创建了一个新的GCP Kubernetes集群。群集是使用NAT专用的-无法连接到Internet。我还部署了bastion机器,该机器使我可以从Internet连接到专用网络(vpc)。这是tutorial I based on。 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?

因此,我在bastion上安装了kubectl并运行:

$ kubectl proxy --port 1111
  Starting to serve on 127.0.0.1:3128

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

现在我正在寻找类似

$ kubectl --use-proxy=1111 get pods

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

如何做到?

1 个答案:

答案 0 :(得分:4)

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

kubectl --server=http://localhost:1111

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

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

更安全的方式

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

ssh -D 1080 bastion

这使ssh充当SOCKS代理。您需要在sshd_config中使用GatewayPorts yes才能使其正常工作。之后,我可以在工作站上使用

HTTPS_PROXY=socks5://127.0.0.1:1080 kubectl get pod