0

目前...

我在 GCP 中有一个 GKE/kubernetes/k8s 集群。我在 GCP 中有一个堡垒主机(Compute Engine VM 实例)。我已在 GKE 集群的主授权网络部分中将我的堡垒主机的 IP 列入白名单。因此,为了对kubectl我的 GKE 运行命令,我首先需要通过运行命令 SSH 到我的堡垒主机gcloud beta compute ssh;然后我运行gcloud container clusters get-credentials命令以通过 GKE 进行身份验证,然后从那里我可以kubectl像往常一样运行命令。


之后...

我希望能够直接从本地开发 CLI 对我的 GKE 集群运行 kubectl 命令。为了做到这一点,我可以将我的本地开发机器 IP 添加为我的 GKE 的主授权网络的许可条目,应该就是这样。然后我可以运行第gcloud container clusters get-credentials一个,然后kubectl像往常一样运行命令。


然而...

我正在寻找一种方法来避免将我的本地开发机器 IP 列入白名单。每次我将笔记本电脑带到新的地方时,我都必须从那里更新我的新 IP 的许可名单,然后才能gcloud container clusters get-credentials在运行命令之前运行kubectl命令。


我想知道...

有没有办法在 bastion-host 中分配一个端口号,该端口号可用于安全地向远程 GKE 集群调用 kubectl 命令?然后,我可以使用gcloud compute start-iap-tunnel本地开发 CLI 中的命令(顺便说一句,使用 Cloud IAM 处理所有权限问题)在堡垒主机中建立到该特定端口号的 ssh 隧道。这样,对于 GKE 集群,它正在接收kubectl来自堡垒主机(已在其主授权网络中列入白名单)的命令。但在幕后,我正在从我的本地开发 CLI(使用我的 glcoud auth credentails)对堡垒主机进行身份验证,并kubectl从那里安全地调用命令。


这可能吗?任何人的任何想法?

4

1 回答 1

0

这将有助于从 localhost 访问您的安全 GKE 集群

https://github.com/GoogleCloudPlatform/gke-private-cluster-demo

在上面的文档中使用 tinyproxy 设置堡垒主机后,我们可以使用以下 shell 函数快速启用/禁用堡垒主机访问

enable_secure_kubectl() {
  # Aliasing kubectl/helm commands to use local proxy
  alias kubectl="HTTPS_PROXY=localhost:8888 kubectl"
  alias helm="HTTPS_PROXY=localhost:8888 helm"
  # Open SSH tunnel for 1 hour
  gcloud compute ssh my-bastion-host -- -o ExitOnForwardFailure=yes -M -S /tmp/sslsock -L8888:127.0.0.1:8888 -f sleep 3600
  # Get kubernetes credentials with internal ip for kube-apiserver in kubeconfig
  gcloud container clusters get-credentials my-gke-cluster --region us-east1 --project myproject --internal-ip
}

disable_secure_kubectl() {
  unalias kubectl
  unalias helm
  ssh -S /tmp/sslsock -O exit my-bastion-host
}
于 2020-09-10T16:08:37.600 回答