我创建了一个新的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通过我的远程代理)
如何做到?
答案 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