从本地主机到GKE运行'kubectl'命令-但是通过堡垒主机上的隧道运行

时间:2020-07-22 08:40:46

标签: kubernetes google-cloud-platform google-kubernetes-engine kubectl bastion-host

当前...

我在GCP中有一个GKE / kubernetes / k8s集群。我在GCP中有一个堡垒主机(Compute Engine VM实例)。我已在GKE群集的主授权网络部分中列出了堡垒主机的IP。因此,为了对我的GKE运行kubectl命令,我首先需要通过运行gcloud beta compute ssh命令将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命令。


我想...

是否可以在堡垒主机中分配一个端口号,该端口号可用于安全地向远程GKE集群调用kubectl命令?然后,我可以从本地dev CLI使用kubectl命令(BTW使用Cloud IAM处理所有权限问题)在堡垒主机中建立到该特定端口号的ssh隧道。这样,对于GKE群集,它从堡垒主机(已经在其主授权网络中列出了它)接收gcloud compute start-iap-tunnel命令。但是在幕后,我正在使用本地dev CLI(使用glcoud auth credentails)向堡垒主机进行身份验证,并从那里安全地调用kubectl命令。


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

1 个答案:

答案 0 :(得分:0)

这将有助于从本地主机访问受保护的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
}