限定公開クラスターとは
公式ドキュメントにもあるように、限定公開クラスター(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のワーカーノードのインスタンス名"
できた
べんり