GKEで限定公開クラスタを作成する

はじめに

 Google Cloud Platform(GCP)においてGoogle Kubernetes Engine(GKE)のクラスタを作成する場合、通常の方法では「一般公開クラスタ」が作成されます。このクラスタは以下の記事で紹介した限定公開なサブネットに作成してもグローバルIPアドレスを持ってしまいます。
 グローバルIPアドレスを持つことで攻撃を受ける可能性が高くなります。詳しくは以下の記事をご覧ください。

GCPに限定公開なサブネットを作成する

 GKEのクラスタを作成する際、「一般公開クラスタ」ではなく「限定公開クラスタ」として構成することで、作成されたクラスタはプライベートIPアドレスしか持たなくなります。これにより、グローバルIPアドレスを不用意に持たなくなるため、例えばインターネットからの接続が不要な場合には積極的に「限定公開クラスタ」で構成することをおすすめします。
 今回はこの限定公開クラスタを作成する方法をご紹介します。

限定公開クラスタを作成する方法

 GKEのクラスタにはKubernetesを操作するためのkubectlコマンドを受け付けるマスターが別途存在します。一般公開クラスタの場合、このマスターを特に意識しません。しかし、限定公開クラスタの場合、このマスターに付与するプライベートIPアドレスや、このマスターへの接続を許可するプライベートIPアドレスも、あらかじめ決めておく必要があります。

 後から限定公開クラスタに変更することはできません。GKEのクラスタを作成する際、次のように設定する必要があります。

  1. GKEのクラスタを作成する際、クラスタのネットワーキングにおいて、限定公開クラスタを選択します。
    表示された『外部IPアドレスを使用したマスターへのアクセス』と『マスターグローバルアクセス』のチェックは外します。
    あらかじめ決めておいたマスターに付与するプライベートIPアドレスをマスターIP範囲に入力します。


  2. 続けて同じ画面の下部にある『承認済みネットワークを追加』をクリックします。


  3. マスターへの接続を許可するプライベートIPアドレスをネットワークに入力します。
    名前は省略できます。

拠点でkubectlコマンドを実行する方法

 専用線やVPNで結ばれた拠点からGKEの限定公開クラスタにkubectlコマンドを実行したい場合、いくつか設定を追加する必要があります。

VPCネットワークピアリングの修正

  1. 名前が「gke-」で始まり「-peer」で終わるVPCネットワークピアリングを編集します。
    これはGKEのクラスタを作成すると自動的に作成されます。


  2. 『カスタムルートをエクスポートする』にチェックを入れて保存します。

クラウドルーターの修正

  1. クラウドルーターを編集します。


  2. 『カスタムルートの作成』を選択します。


  3. 続けて同じ画面の下部にある『カスタムルートを追加』をクリックします。


  4. GKEのマスターに付与したプライベートIPアドレスを入力して保存します。

限定公開クラスタの修正

  1. GKEの限定公開クラスタを編集します。


  2. 『承認済みネットワークを追加』をクリックします。


  3. 拠点のプライベートIPアドレスを入力して保存します。

限定公開クラスタに接続する際の注意点

 限定公開クラスタにはCloud Shellから接続できません。インターネットからGKEのマスターには接続できず、承認済みネットワークにも含まれていないためです。

 承認済みネットワークから接続してください。

 以下のようにCloud Consoleから「gcloud container clusters get-credentials ~」をコピーして、そのまま実行するとインターネットを経由して接続しようとして、限定公開クラスタへの接続に失敗してしまいます。

 以下のように「–internal-ip」を加え、インターネットを経由しないよう設定してください。

gcloud container clusters get-credentials クラスタ --region リージョン --project プロジェクト --internal-ip