【问题标题】:Connecting GCP Kubernetes in private vpc and NAT在私有 vpc 和 NAT 中连接 GCP Kubernetes
【发布时间】:2019-01-30 08:12:39
【问题描述】:

我创建了一个新的 GCP Kubernetes 集群。集群是私有的,带有 NAT - 没有连接到互联网。我还部署了bastion 机器,它允许我从互联网连接到我的专用网络(vpc)。这是tutorial I based on。 SSH 到 bastion - 目前正在工作。

kubernetes master 没有暴露在外面。结果:

$ 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 通过我的远程代理)

怎么做?

【问题讨论】:

    标签: kubernetes kubectl google-kubernetes-engine


    【解决方案1】:

    kubectl proxy 完全充当 apiserver,与目标 apiserver 完全相同 - 但通过它的查询已经过身份验证。根据您的描述,“与 curl 一起工作”,听起来您已正确设置它,您只需要将客户端 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
    

    【讨论】:

    • 它工作正常。部分。 kubectl 无法将 SSH 连接到 pod。但是,这超出了这个问题的范围。
    猜你喜欢
    • 1970-01-01
    • 2020-09-07
    • 2022-12-23
    • 1970-01-01
    • 1970-01-01
    • 2020-11-21
    • 1970-01-01
    • 2021-12-20
    • 1970-01-01
    相关资源
    最近更新 更多