Help us understand the problem. What is going on with this article?

限定公開クラスターのGKEノードにサクッとSSHする方法

限定公開クラスターとは

公式ドキュメントにもあるように、限定公開クラスター(Private cluster)は、KubernetesのワーカーノードにパブリックIPを割り当てずにGKEクラスターを作成できる機能です。

限定公開クラスターを使うことで外部公開される箇所が減りAttack surfaceを狭めることができるほか、Google Cloudの他の機能との連携を内部NW経由で行うことができるようになります。

限定公開クラスターの面倒なところ

たまにワーカーノードにSSHしたくなるのですが、限定公開クラスターではワーカーノードにPublic IPが割り当てられないので、@sonots氏のこちらの記事のような対応が必要でした。

これもこれで便利なのですが、Podを展開しないといけないのは面倒です。

Cloud IAPを使ったTCPトンネリング

Cloud IAPはGCPにおける認証認可の仕組みで、いわゆるGoogleログイン機能を使ってGoogle Cloud上に展開したアプリケーションへのアクセス制御を行ったり、VMへのログインなどを制御できる仕組みです。これは原理的にはProxyの役割を果たすので、外の世界と中の世界を繋ぐ役割も果たしています。

Cloud IAPを使ったTCPトンネリングを使うと、Cloud IAPによって認証されたユーザーに対して任意の VPC内リソースのTCPポートをトンネルすることができます。これを応用し、プライベートIPを持つVMにSSHすることも可能です。

GKEのワーカーノードの実態はGCEなので、同様のことが実現できます。

まず↓ここでCloud IAPを有効化しておきます。
https://console.cloud.google.com/apis/library/iap.googleapis.com/

# プロジェクト名のセットをする
gcloud config set core/project プロジェクト名

# Cloud IAPのグローバルIPアドレス範囲からのSSHを許可するFWルール
gcloud compute firewall-rules create allow-iap-forwarding-ssh \
  --network=vpc-network \
  --allow=tcp:22 \
  --source-ranges=35.235.240.0/20

# 該当のノードに、Cloud IAPのトンネル経由でSSHする。Firewall ruleがある場合はフラグを指定しなくてもデフォルトでIAPを使ってくれるらしい
gcloud beta compute ssh --zone "該当ノードのゾーン" "GKEのワーカーノードのインスタンス名"

できた

べんり

inductor
8割くらい正しい情報を噛み砕いて3秒で出すのが得意
https://inductor.me
infra-workshop
インフラ技術を勉強したい人たちのためのオンライン勉強会です
https://wp.infra-workshop.tech/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away