当前...
我在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
命令。
这可能吗?任何人有任何想法吗?
答案 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
}