Запускать команды kubectl с моего локального хоста на GKE - но через туннелирование через хост-бастион
В данный момент...
У меня есть кластер GKE/kubernetes/k8s в GCP. У меня есть бастионный хост (экземпляр виртуальной машины Compute Engine) в GCP. Я разрешил IP-адрес моего хоста-бастиона в разделе авторизованных сетей кластера GKE. Следовательно, чтобы запуститьkubectl
команд для моего GKE, мне сначала нужно подключиться к моему хосту-бастиону по SSH, запустив gcloud beta compute ssh
команда; затем я запускаюgcloud container clusters get-credentials
команда для аутентификации с GKE, затем оттуда я могу запустить kubectl
команды как обычно.
Позже...
Я хочу иметь возможность запускать команды kubectl в моем кластере GKE непосредственно из моего локального интерфейса командной строки разработки. Для этого я могу добавить IP-адрес моей локальной машины разработки в качестве разрешенного входа в мои авторизованные сети GKE Master, и это должно быть все. Тогда я могу запуститьgcloud container clusters get-credentials
сначала, а затем запустить kubectl
команды как обычно.
Однако...
Я ищу способ избежать необходимости разрешать IP-адрес моей локальной машины разработки. Каждый раз, когда я беру свой ноутбук в новое место, мне нужно обновить список разрешений для моего нового IP-адреса, прежде чем я смогу запуститьgcloud container clusters get-credentials
команда перед запуском kubectl
команды.
Я думаю...
Есть ли способ назначить номер порта на хосте-бастионе, который можно использовать для безопасного вызова команд kubectl в удаленном кластере GKE? И тогда я могу просто использоватьgcloud compute start-iap-tunnel
команда (которая, кстати, решает все проблемы с разрешениями с использованием Cloud IAM) из моего локального интерфейса командной строки разработчика, чтобы установить ssh-туннель к этому конкретному номеру порта на хосте-бастионе. Таким образом, для кластера GKE он получаетkubectl
команды от хоста-бастиона (который уже включен в список авторизованных сетей Мастера). Но за кулисами я аутентифицируюсь с помощью хоста-бастиона из моего локального интерфейса командной строки разработчика (используя мои учетные данные glcoud auth) и вызываюkubectl
команды оттуда безопасно.
Это возможно? Есть идеи от кого-нибудь?
0 ответов
Это поможет получить доступ к вашему защищенному кластеру GKE с localhost.
https://github.com/GoogleCloudPlatform/gke-private-cluster-demo
После того, как хост-бастион настроен с помощью tinyproxy, как в приведенном выше документе, мы можем использовать следующие функции оболочки для быстрого включения / отключения доступа к хосту-бастиону.
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
}