Запускать команды 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
}
Другие вопросы по тегам