GKE:从集群外部安全访问服务

MrE*_*MrE 5 kubernetes google-kubernetes-engine

有没有办法从外部以安全的方式访问集群的“内部”服务(那些未暴露在外部的服务)。

目标很简单:我需要调试这些服务的客户端并需要访问它们,但不想将它们暴露在外面。

在普通的单个主机上,我通常会使用 SSH 隧道连接到主机并将端口映射到本地主机;我尝试使用 SSHD 容器,但这并没有让我走得很远:服务并不直接在该容器上,所以我不确定如何到达网络上的下一跳,因为这些服务正在动态管理 IP。

理想情况下,VPN 会方便得多,但 GKE 似乎不支持用于公路战士情况的 VPN。

这个用例有什么解决方案吗?

感谢您的输入。

编辑:

我在这里看到:https : //github.com/kubernetes/kubernetes/blob/master/docs/user-guide/accessing-the-cluster.md#ways-to-connect

目前支持的唯一连接方式是 HTTP/HTTPS,这意味着我可以代理 HTTP 调用,但不能代理任何端口

Rob*_*ley 5

您可以通过在开发计算机上运行kubectl proxy并使用主服务器内置的代理功能(这是大量代理,但请耐心等待)来实现此目的。

第一次运行kubectl proxy。记下本地绑定的端口(默认情况下应为 8001)。这将导致 kubectl 创建一条通往主实例的隧道,您可以在本地访问该实例,而无需通过任何身份验证(从技术上讲,您可以通过直接访问主实例来执行以下所有步骤,而无需先执行此操作,但这对于调试来说更简单)。

接下来,将客户端(Web 浏览器、curl 等)指向http://localhost:8001/api/v1/proxy/namespaces/<ns>/services/<svc>/,替换<ns>为配置服务的命名空间和<svc>服务名称。您还可以将特定的请求路径附加到 URL 的末尾,因此,如果服务后面的 pod 托管着一个名为 的文件,data.json您可以将其附加到请求路径的末尾。

这就是更新演示教程的工作原理,因此,如果您遇到困难,我建议您仔细阅读该示例并仔细查看javascript的作用(它并不太复杂)。