VPC ネイティブ クラスタを作成する


このページでは、Google Kubernetes Engine(GKE)で VPC ネイティブ クラスタを構成する方法について説明します。

VPC ネイティブ クラスタの利点と要件の詳細については、VPC ネイティブ クラスタの概要をご覧ください。

GKE Autopilot クラスタの場合、VPC ネイティブのネットワークはデフォルトで有効になっており、オーバーライドできません。

始める前に

作業を始める前に、次のことを確認してください。

  • Google Kubernetes Engine API を有効にする。
  • Google Kubernetes Engine API の有効化
  • このタスクに Google Cloud CLI を使用する場合は、gcloud CLI をインストールして初期化する。すでに gcloud CLI をインストールしている場合は、gcloud components update を実行して最新のバージョンを取得する。

制限事項

  • VPC ネイティブ クラスタをルートベース クラスタに変換することはできません。また、ルートベース クラスタを VPC ネイティブ クラスタに変換することもできません。
  • GKE クラスタの場合と同様に、Service(ClusterIP)のアドレスはクラスタ内部にのみ公開されています。クラスタの内部には存在せず、クラスタと同じ VPC ネットワークとリージョン内に存在する VM インスタンスから Kubernetes Service にアクセスする必要がある場合は、内部パススルー ネットワーク ロードバランサを作成します。
  • サブネット内のすべての Pod IP アドレスを使用する場合、クラスタを不安定な状態にすることなくサブネットのセカンダリ IP アドレス範囲を置き換えることはできません。ただし、連続していないマルチ Pod CIDR を使用すると、追加の Pod IP アドレス範囲を作成できます。

クラスタを作成する

このセクションでは、クラスタの作成時に次のタスクを行う方法について説明します。

  • クラスタとサブネットを同時に作成する。
  • 既存のサブネットにクラスタを作成する。
  • クラスタを作成してコントロール プレーンの IP アドレス範囲を選択する。
  • 新しいサブネットにデュアルスタック ネットワーキングを使用したクラスタを作成する(Autopilot クラスタ バージョン 1.25 以降と Standard クラスタ バージョン 1.24 以降で利用可能)。
  • デュアルスタック クラスタとデュアル スタック サブネットを同時に作成する(Autopilot クラスタ バージョン 1.25 以降と Standard クラスタ バージョン 1.24 以降で使用可能)。

クラスタを作成したら、クラスタのコントロール プレーンへのアクセスを変更できます。詳細については、GKE でネットワーク分離をカスタマイズするをご覧ください。

クラスタとサブネットを同時に作成する

VPC ネイティブ GKE クラスタとサブネットを同時に作成する方法を次に示します。1 つのコマンドでこれらの 2 つのステップを実行すると、セカンダリ範囲割り当て方式は GKE によって管理されます。

共有 VPC を使用する場合、クラスタとサブネットを同時に作成することはできません。代わりに、共有 VPC ホスト プロジェクトのネットワーク管理者がサブネットを最初に作成する必要があります。その後、セカンダリ範囲割り当て方式がユーザーによって管理される既存のサブネットにクラスタを作成できます。

gcloud

VPC ネイティブ クラスタとサブネットを同時に作成するには、次のコマンドを実行します。

gcloud container clusters create CLUSTER_NAME \
    --location=COMPUTE_LOCATION \
    --enable-ip-alias \
    --create-subnetwork name=SUBNET_NAME,range=NODE_IP_RANGE \
    --cluster-ipv4-cidr=POD_IP_RANGE \
    --services-ipv4-cidr=SERVICES_IP_RANGE

次のように置き換えます。

  • CLUSTER_NAME: GKE クラスタの名前。
  • COMPUTE_LOCATION: クラスタの Compute Engine のロケーション
  • SUBNET_NAME: 作成するサブネットの名前。サブネットのリージョンは、クラスタと同じリージョンです(つまり、ゾーンクラスタが含まれているリージョン)。GKE によって自動的に名前を生成する場合は、空のストリング(name="")を使用します。
  • NODE_IP_RANGE: CIDR 表記の IP アドレス範囲(10.5.0.0/20 など)、または CIDR ブロックのサブネット マスクのサイズ(/20 など)。これは、ノードのサブネットのプライマリ IP アドレス範囲を作成するために使用されます。省略した場合、GKE は /20 のサイズで VPC 内で使用可能な IP 範囲を選択します。
  • POD_IP_RANGE: CIDR 表記の IP アドレス範囲(10.0.0.0/14 など)、または CIDR ブロックのサブネット マスクのサイズ(/14 など)。これは、Pod 用のサブネット セカンダリ IP アドレス範囲を作成するために使用されます。省略した場合、GKE は 218 のアドレスを含むランダムに選択された /14 範囲を使用します。自動選択範囲が 10.0.0.0/8(範囲 224 のアドレス)からランダムに選択されます。この範囲には、VM、既存のルート、他のクラスタに割り振られた IP アドレス範囲は含まれません。自動選択範囲は、予約済み IP アドレス動的ルート、またはこのクラスタとピアリングする VPC 内のルートと競合する可能性があります。これらの範囲を使用する場合は、競合を避けるため --cluster-ipv4-cidr を指定する必要があります。
  • SERVICES_IP_RANGE: CIDR 表記の IP アドレス範囲(10.4.0.0/19 など)、または CIDR ブロックのサブネット マスクのサイズ(/19 など)。これは、Service 用のサブネット セカンダリ IP アドレス範囲を作成するために使用されます。省略した場合、GKE はデフォルトの Service IP アドレス範囲のサイズである /20 を使用します。

Console

Google Cloud コンソールを使用して、クラスタとサブネットを同時に作成することはできません。最初にサブネットを作成して、次に既存のサブネットにクラスタを作成します。

API

VPC ネイティブ クラスタを作成するには、クラスタ リソースに IPAllocationPolicy オブジェクトを定義します。

{
  "name": CLUSTER_NAME,
  "description": DESCRIPTION,
  ...
  "ipAllocationPolicy": {
    "useIpAliases": true,
    "createSubnetwork": true,
    "subnetworkName": SUBNET_NAME
  },
  ...
}

createSubnetwork フィールドによって、クラスタのサブネットワークが自動的に作成され、プロビジョニングされます。subnetworkName フィールドはオプションです。空のままにすると、サブネットワークの名前が自動的に選択されます。

クラスタを作成したら、クラスタのコントロール プレーンへのアクセスを変更できます。詳細については、GKE でネットワーク分離をカスタマイズするをご覧ください。

既存のサブネットにクラスタを作成する

セカンダリ範囲割り当て方式を選択して、既存のサブネットで VPC ネイティブ GKE クラスタを作成する方法を次の手順で示します。

gcloud

  • GKE によって管理されているセカンダリ範囲割り当て方式を使用するには、次のコマンドを実行します。

    gcloud container clusters create CLUSTER_NAME \
        --location=COMPUTE_LOCATION \
        --enable-ip-alias \
        --subnetwork=SUBNET_NAME \
        --cluster-ipv4-cidr=POD_IP_RANGE \
        --services-ipv4-cidr=SERVICES_IP_RANGE
    
  • ユーザーによって管理されているセカンダリ範囲割り当て方式を使用するには、次のコマンドを実行します。

    gcloud container clusters create CLUSTER_NAME \
        --location=COMPUTE_LOCATION \
        --enable-ip-alias \
        --subnetwork=SUBNET_NAME \
        --cluster-secondary-range-name=SECONDARY_RANGE_PODS \
        --services-secondary-range-name=SECONDARY_RANGE_SERVICES
    

次のように置き換えます。

  • CLUSTER_NAME: GKE クラスタの名前。
  • COMPUTE_LOCATION: クラスタの Compute Engine のロケーション
  • SUBNET_NAME: 既存のサブネットの名前。ノードにはサブネットのプライマリ IP アドレス範囲が使用されます。サブネットは、クラスタによって使用されるリージョンと同じリージョンに存在する必要があります。省略した場合、GKE はクラスタのリージョンにある default VPC ネットワーク内のサブネットの使用を試みます。
  • セカンダリ範囲の割り当て方式が GKE によって管理されている場合:
    • POD_IP_RANGE: CIDR 表記の IP アドレス範囲(10.0.0.0/14 など)、または CIDR ブロックのサブネット マスクのサイズ(/14 など)。これは、Pod 用のサブネット セカンダリ IP アドレス範囲を作成するために使用されます。--cluster-ipv4-cidr オプションを省略すると、GKE は自動的に /14 範囲(218 のアドレス)を選択します。自動選択範囲が 10.0.0.0/8(範囲 224 のアドレス)からランダムに選択されます。この範囲には、VM、既存のルート、他のクラスタに割り振られた IP アドレス範囲は含まれません。自動選択範囲は、予約済み IP アドレス動的ルート、またはこのクラスタとピアリングする VPC 内のルートと競合する可能性があります。これらの範囲を使用する場合は、競合を避けるため --cluster-ipv4-cidr を指定する必要があります。
    • SERVICES_IP_RANGEservices-ip-range は、CIDR 表記の IP アドレス範囲(10.4.0.0/19 など)、または CIDR ブロックのサブネット マスクのサイズ(/19 など)です。これは、Service 用のサブネット セカンダリ IP アドレス範囲を作成するために使用されます。
  • セカンダリ範囲の割り当て方式がユーザーによって管理されている場合:
    • SECONDARY_RANGE_PODS: 指定された SUBNET_NAME 内の既存のセカンダリ IP アドレス範囲の名前です。GKE は、クラスタの Pod にサブネット セカンダリ IP アドレス範囲全体を使用します。
    • SECONDARY_RANGE_SERVICES: SUBNET_NAME 内の既存のセカンダリ IP アドレス範囲の名前。

Console

  1. Google Cloud コンソールで [Google Kubernetes Engine] ページに移動します。

    Google Kubernetes Engine に移動

  2. [作成] をクリックし、[Standard] セクションまたは [Autopilot] セクションで [構成] をクリックします。

  3. ナビゲーション パネルの [クラスタ] の下の [ネットワーキング] をクリックします。

  4. [コントロール プレーン アクセス] で、コントロール プレーン エンドポイントへのアクセスを構成します。

  5. [クラスタ ネットワーキング] セクションの [ネットワーク] プルダウン リストで、VPC を選択します。

  6. [ノードのサブネット] プルダウン リストで、クラスタのサブネットを選択します。

  7. [VPC ネイティブのトラフィック ルーティングを有効にする(エイリアス IP を使用)] チェックボックスが選択されていることを確認します。

  8. セカンダリ範囲割り当て方式を GKE によって管理する場合は、[セカンダリ範囲を自動的に作成する] チェックボックスを選択します。選択したサブネットのセカンダリ範囲をすでに作成していて、セカンダリ範囲割り当て方式をユーザーによって管理する場合は、このチェックボックスをオフにします。

  9. [Pod のアドレス範囲] フィールドに、10.0.0.0/14 などの Pod 範囲を入力します。

  10. [サービス アドレスの範囲] フィールドに、サービスの範囲(10.4.0.0/19 など)を入力します。

  11. クラスタを構成します。

  12. [作成] をクリックします。

Terraform

Terraform モジュールを使用すると、Terraform を介して VPC ネイティブ クラスタを作成できます。

たとえば、Terraform 構成に次のブロックを追加できます。

module "gke" {
  source  = "terraform-google-modules/kubernetes-engine/google"
  version = "~> 12.0"

  project_id        = "PROJECT_ID"
  name              = "CLUSTER_NAME"
  region            = "COMPUTE_LOCATION"
  network           = "NETWORK_NAME"
  subnetwork        = "SUBNET_NAME"
  ip_range_pods     = "SECONDARY_RANGE_PODS"
  ip_range_services = "SECONDARY_RANGE_SERVICES"
}

以下を置き換えます。

  • PROJECT_ID: プロジェクト ID。
  • CLUSTER_NAME: GKE クラスタの名前。
  • COMPUTE_LOCATION: クラスタの Compute Engine のロケーション。Terraform の場合は、Compute Engine のリージョン。
  • NETWORK_NAME: 既存のネットワークの名前。
  • SUBNET_NAME: 既存のサブネットの名前。ノードにはサブネットのプライマリ IP アドレス範囲が使用されます。サブネットは、クラスタによって使用されるリージョンと同じリージョンに存在する必要があります。
  • SECONDARY_RANGE_PODS: SUBNET_NAME 内の既存のセカンダリ IP アドレス範囲の名前。
  • SECONDARY_RANGE_SERVICES: SUBNET_NAME 内の既存のセカンダリ IP アドレス範囲の名前。

API

VPC ネイティブ クラスタを作成する場合、IPAllocationPolicy オブジェクトを定義します。既存のサブネット セカンダリ IP アドレス範囲を参照することも、CIDR ブロックを指定することもできます。既存のサブネット セカンダリ IP アドレス範囲を参照して、セカンダリ範囲の割り当てがユーザーによって管理されるクラスタを作成します。この範囲の割り当てを GKE によって管理する場合は、CIDR ブロックを指定します。

{
  "name": CLUSTER_NAME,
  "description": DESCRIPTION,
  ...
  "ipAllocationPolicy": {
    "useIpAliases": true,
    "clusterIpv4CidrBlock"      : string,
    "servicesIpv4CidrBlock"     : string,
    "clusterSecondaryRangeName" : string,
    "servicesSecondaryRangeName": string,

  },
  ...
}

このコマンドには次の値が含まれます。

  • "clusterIpv4CidrBlock": Pod の CIDR 範囲。これにより、Pod のセカンダリ範囲のサイズが決まります。これは CIDR 表記(10.0.0.0/14 など)で指定できます。指定されたサイズの空きスペースが、VPC 内の使用可能なスペースから選択されます。空白にしておくと、有効な範囲が検出され、デフォルトのサイズで作成されます。
  • "servicesIpv4CidrBlock": Service の CIDR 範囲。"clusterIpv4CidrBlock" の説明をご覧ください。
  • "clusterSecondaryRangeName": Pod のセカンダリ範囲の名前。セカンダリ範囲がすでに存在し、クラスタに関連付けられたサブネットワークに属している必要があります。
  • "serviceSecondaryRangeName": Service のセカンダリ範囲の名前。セカンダリ範囲がすでに存在し、クラスタに関連付けられたサブネットワークに属している必要があります。

クラスタを作成したら、クラスタのコントロール プレーンへのアクセスを変更できます。詳細については、GKE でネットワーク分離をカスタマイズするをご覧ください。

クラスタを作成してコントロール プレーンの IP アドレス範囲を選択する

デフォルトでは、バージョン 1.29 以降のクラスタは、プライマリ サブネット範囲を使用して、コントロール プレーン エンドポイントに割り当てられた内部 IP アドレスをプロビジョニングします。このデフォルト設定をオーバーライドするには、クラスタの作成時に別のサブネット範囲を選択します。

以降のセクションでは、クラスタを作成してサブネット範囲をオーバーライドする方法について説明します。

gcloud

gcloud container clusters create CLUSTER_NAME \
    --enable-private-nodes \
    --private-endpoint-subnetwork=SUBNET_NAME \
    --location=COMPUTE_LOCATION

ここで

  • enable-private-nodes フラグは省略可能です。プライベート ノードを使用してクラスタを作成するよう GKE に指示します。
  • private-endpoint-subnetwork フラグは、コントロール プレーンの内部エンドポイントの IP アドレス範囲を定義します。コントロール プレーンの内部 IP アドレスをプロビジョニングするには、private-endpoint-subnetwork フラグの代わりに master-ipv4-cidr フラグを使用できます。使用するフラグを選択するには、次の構成を検討してください。
    • enable-private-nodes フラグを使用してクラスタを作成する場合、master-ipv4-cidr フラグと private-endpoint-subnetwork フラグは省略可能です。
    • private-endpoint-subnetwork フラグを使用すると、GKE は、定義した範囲の IP アドレスを使用してコントロール プレーンの内部エンドポイントをプロビジョニングします。
    • master-ipv4-cidr フラグを使用すると、GKE は指定した値から新しいサブネットを作成します。GKE は、この新しい範囲の IP アドレスを使用してコントロール プレーンの内部エンドポイントをプロビジョニングします。
    • private-endpoint-subnetwork フラグと master-ipv4-cidr フラグを省略すると、GKE はセカンダリ クラスタのサブネットワークの IP アドレスを使用してコントロール プレーンの内部エンドポイントをプロビジョニングします。

次のように置き換えます。

  • CLUSTER_NAME: GKE クラスタの名前。
  • SUBNET_NAME: 内部 IP アドレスをプロビジョニングする既存のサブネットの名前。
  • COMPUTE_LOCATION: クラスタの Compute Engine のロケーション

GKE は、Private Service Connect を使用するクラスタを作成します。クラスタを作成したら、クラスタのコントロール プレーンへのアクセスを変更できます。詳細については、GKE でネットワーク分離をカスタマイズするをご覧ください。

Console

新しいクラスタのコントロール プレーンにサブネットを割り当てるには、まずサブネットを追加する必要があります。手順は次のとおりです。

  1. Google Cloud コンソールで Google Kubernetes Engine のページに移動します。

    Google Kubernetes Engine に移動

  2. [ 作成] をクリックします。

  3. [Standard] セクションまたは [Autopilot] セクションで、[構成] をクリックします。

  4. [名前] にクラスタ名を入力します。

  5. ナビゲーション パネルの [クラスタ] の下の [ネットワーキング] をクリックします。

  6. [コントロール プレーン アクセス] で、コントロール プレーン エンドポイントへのアクセスを構成します。

  7. [クラスタ ネットワーキング] セクションで、[コントロール プレーンのデフォルトのプライベート エンドポイント サブネットをオーバーライドする] チェックボックスをオンにします。

  8. [プライベート エンドポイント サブネット] リストで、作成したサブネットを選択します。

  9. [完了] をクリックします。必要に応じて、承認済みネットワークを追加します。

デュアルスタック ネットワーキングを使用するクラスタを作成する

新規または既存のデュアルスタック サブネットに IPv4/IPv6 デュアルスタック ネットワークを使用するクラスタを作成できます。デュアルスタック サブネットは、Autopilot クラスタ バージョン 1.25 以降と Standard クラスタ バージョン 1.24 以降で使用できます。 デュアルスタック サブネットは、Windows Server ノードプールではサポートされていません。

デュアルスタック クラスタを設定する前に、次の操作を行うことをおすすめします。

このセクションでは、まずデュアルスタック サブネットを作成し、このサブネットを使用してクラスタを作成します。

  1. デュアルスタック サブネットを作成するには、次のコマンドを実行します。

    gcloud compute networks subnets create SUBNET_NAME \
        --stack-type=ipv4-ipv6 \
        --ipv6-access-type=ACCESS_TYPE \
        --network=NETWORK_NAME \
        --range=PRIMARY_RANGE \
        --region=COMPUTE_REGION
    

    以下を置き換えます。

    • SUBNET_NAME: 選択したサブネットの名前。
    • ACCESS_TYPE: 公共のインターネットへのルーティングの可否。内部 IPv6 アドレスの場合は INTERNAL、外部 IPv6 アドレスの場合は EXTERNAL を使用します。--ipv6-access-type が指定されていない場合、デフォルトのアクセスタイプは EXTERNAL です。
    • NETWORK_NAME: 新しいサブネットが追加されるネットワークの名前。このネットワークは、次の条件を満たしている必要があります。
    • PRIMARY_RANGE: 新しいサブネットのプライマリ IPv4 IP アドレス範囲(CIDR 表記)。詳細については、サブネットの範囲をご覧ください。
    • COMPUTE_REGION: クラスタの Compute Engine のリージョン
  2. デュアルスタック サブネットを含むクラスタを作成するには、gcloud CLI または Google Cloud コンソールを使用します。

gcloud

  • Autopilot クラスタの場合は、次のコマンドを実行します。

      gcloud container clusters create-auto CLUSTER_NAME \
          --location=COMPUTE_LOCATION \
          --network=NETWORK_NAME \
          --subnetwork=SUBNET_NAME
    

    次のように置き換えます。

    • CLUSTER_NAME: 新しい Autopilot クラスタの名前。
    • COMPUTE_LOCATION: クラスタの Compute Engine のロケーション
    • NETWORK_NAME: サブネットを含む VPC ネットワークの名前。この VPC ネットワークは、カスタムモードの VPC ネットワークである必要があります。詳細については、VPC ネットワークを自動モードからカスタムモードに切り替える方法をご覧ください。
    • SUBNET_NAME: デュアルスタック サブネットの名前。

      デュアルスタックのサブネットを使用する場合、GKE Autopilot クラスタはデフォルトでデュアルスタック クラスタになります。クラスタの作成後、Autopilot クラスタを IPv4 のみにアップデートできます。

コンソール

  1. Google Cloud コンソールで [Google Kubernetes Engine] ページに移動します。

    Google Kubernetes Engine に移動

  2. [ 作成] をクリックします。

  3. [Standard] セクションまたは [Autopilot] セクションで、[構成] をクリックします。

  4. 必要に応じてクラスタを構成します。

  5. ナビゲーション パネルの [クラスタ] の下の [ネットワーキング] をクリックします。

  6. [コントロール プレーン アクセス] で、コントロール プレーン エンドポイントへのアクセスを構成します。

  7. [クラスタ ネットワーキング] セクションの [ネットワーク] リストで、ネットワークの名前を選択します。

  8. [ノードのサブネット] リストで、デュアルスタック サブネットの名前を選択します。

  9. Standard クラスタの場合は、[IPv4 と IPv6(デュアル スタック)] ラジオボタンを選択します。このオプションは、デュアルスタック サブネットを選択した場合にのみ使用できます。

    デュアルスタックのサブネットを使用する場合、Autopilot クラスタはデフォルトでデュアルスタック クラスタになります。

  10. [作成] をクリックします。

デュアルスタック クラスタとサブネットを同時に作成する

サブネットとデュアル スタック クラスタは同時に作成できます。GKE は IPv6 サブネットを作成し、そのサブネットに外部 IPv6 プライマリ範囲を割り当てます。

共有 VPC を使用する場合、クラスタとサブネットを同時に作成することはできません。代わりに、共有 VPC ホスト プロジェクトのネットワーク管理者がデュアルスタック サブネットを最初に作成する必要があります。

  • Autopilot クラスタの場合は、次のコマンドを実行します。

    gcloud container clusters create-auto CLUSTER_NAME \
        --location=COMPUTE_LOCATION \
        --network=NETWORK_NAME \
        --create-subnetwork name=SUBNET_NAME
    

    次のように置き換えます。

    • CLUSTER_NAME: 新しい Autopilot クラスタの名前。
    • COMPUTE_LOCATION: クラスタの Compute Engine のロケーション
    • NETWORK_NAME: サブネットを含む VPC ネットワークの名前。この VPC ネットワークは、一意のローカル IPv6 ユニキャスト アドレス(ULA)を使用するカスタムモードの VPC ネットワークである必要があります。詳細については、VPC ネットワークを自動モードからカスタムモードに切り替える方法をご覧ください。
    • SUBNET_NAME: 新しいサブネットの名前。GKE は、組織のポリシーに基づいてサブネットを作成できます。
      • 組織のポリシーでデュアルスタックが許可され、ネットワークがカスタムモードの場合、GKE はデュアルスタック サブネットを作成し、そのサブネットに外部 IPv6 プライマリ範囲を割り当てます。
      • 組織のポリシーでデュアルスタックが許可されていないか、ネットワークが自動モードの場合、GKE はシングルスタック(IPv4)サブネットを作成します。
  • Standard クラスタの場合は、次のコマンドを実行します。

    gcloud container clusters create CLUSTER_NAME \
        --enable-ip-alias \
        --stack-type=ipv4-ipv6 \
        --ipv6-access-type=ACCESS_TYPE \
        --network=NETWORK_NAME \
        --create-subnetwork name=SUBNET_NAME,range=PRIMARY_RANGE \
        --location=COMPUTE_LOCATION
    

    次のように置き換えます。

    • CLUSTER_NAME: 選択した新しいクラスタの名前。
    • ACCESS_TYPE: 公共のインターネットへのルーティングの可否。内部 IPv6 アドレスの場合は INTERNAL、外部 IPv6 アドレスの場合は EXTERNAL を使用します。--ipv6-access-type が指定されていない場合、デフォルトのアクセスタイプは EXTERNAL です。
    • NETWORK_NAME: 新しいサブネットが追加されるネットワークの名前。このネットワークは、次の条件を満たしている必要があります。
    • SUBNET_NAME: 選択した新しいサブネットの名前。
    • PRIMARY_RANGE: 新しいサブネットのプライマリ IPv4 アドレス範囲(CIDR 表記)。詳細については、サブネットの範囲をご覧ください。
    • COMPUTE_LOCATION: クラスタの Compute Engine のロケーション

スタックタイプを更新する

既存のクラスタのスタックタイプを変更するか、既存のサブネットをデュアルスタック サブネットに更新できます。

既存のクラスタのスタックタイプを更新する

既存のクラスタのスタックタイプを変更する前に、次の制限事項を考慮してください。

  • スタックタイプの変更は、バージョン 1.25 以降を実行している新しい GKE クラスタでサポートされています。バージョン 1.24 からバージョン 1.25 または 1.26 にアップグレードされた GKE クラスタでは、デュアルスタック ネットワークを有効にすると検証エラーが発生することがあります。 エラーが発生した場合は、Google Cloud のサポートチームにお問い合わせください。

  • GKE はコントロール プレーンとノードの両方でコンポーネントを再起動させるため、スタックタイプの変更は中断を伴うオペレーションとなります。

  • GKE は、ノードを再作成するときに、構成済みのメンテナンスの時間枠を考慮します。つまり、次のメンテナンスの時間枠になるまで、クラスタ スタックタイプはクラスタで動作しません。この待機を回避するには、すでにコントロール プレーンが動作している GKE バージョンを --cluster-version フラグに設定して、ノードプールを手動でアップグレードします。この回避策を行う場合は、gcloud CLI を使用する必要があります。詳細については、メンテナンス時間枠の注意点をご覧ください。

  • スタックタイプを変更しても、既存の Service の IP ファミリーは自動的に変更されません。次の条件が適用されます。

    • シングル スタックをデュアルスタックに変更しても、既存の Service はシングル スタックのままです。
    • デュアルスタックをシングル スタックに変更すると、IPv6 アドレスを持つ既存の Service がエラー状態になります。この Service を削除し、正しい ipFamilies を持つ Service を作成します。詳細については、Deployment の設定方法の例をご覧ください。

既存の VPC ネイティブ クラスタを更新するには、gcloud CLI または Google Cloud コンソールを使用します。

gcloud

次のコマンドを実行します。

  gcloud container clusters update CLUSTER_NAME \
      --stack-type=STACK_TYPE \
      --location=COMPUTE_LOCATION

次のように置き換えます。

  • CLUSTER_NAME: 更新するクラスタの名前。
  • STACK_TYPE: スタックタイプ。次のいずれかの値に置き換えます。
    • ipv4: デュアルスタック クラスタを IPv4 のみのクラスタに更新します。GKE は、クラスタのサブネットのプライマリ IPv4 アドレス範囲を使用します。
    • ipv4-ipv6: 既存の IPv4 クラスタをデュアルスタックに更新します。クラスタをデュアル スタックに変更できるのは、基盤となるサブネットがデュアル スタックをサポートしている場合のみです。詳細については、既存のサブネットをデュアルスタックのサブネットに更新するをご覧ください。
  • COMPUTE_LOCATION: クラスタの Compute Engine のロケーション

コンソール

  1. Google Cloud コンソールで [Google Kubernetes Engine] ページに移動します。

    Google Kubernetes Engine に移動

  2. 編集するクラスタの横にある [アクション] をクリックし、[ 編集] をクリックします。

  3. [ネットワーキング] セクションで、[スタックタイプ] の横にある [編集] をクリックします。

  4. [スタックタイプの編集] ダイアログで、必要なクラスタ スタックタイプのチェックボックスを選択します。

  5. [変更を保存] をクリックします。

既存のサブネットをデュアルスタックのサブネットに更新します(Autopilot クラスタ バージョン 1.25 以降と Standard クラスタ バージョン 1.24 以降で利用可能)。

既存のサブネットをデュアルスタック サブネットに更新する

既存のサブネットをデュアルスタックのサブネットに更新するには、次のコマンドを実行します。サブネットを更新しても、サブネット内の既存の IPv4 クラスタには影響しません。

gcloud compute networks subnets update SUBNET_NAME \
    --stack-type=ipv4-ipv6 \
    --ipv6-access-type=ACCESS_TYPE \
    --region=COMPUTE_REGION

以下を置き換えます。

  • SUBNET_NAME: サブネットの名前。
  • ACCESS_TYPE: 公共のインターネットへのルーティングの可否。内部 IPv6 アドレスの場合は INTERNAL、外部 IPv6 アドレスの場合は EXTERNAL を使用します。--ipv6-access-type が指定されていない場合、デフォルトのアクセスタイプは EXTERNAL です。
  • COMPUTE_REGION: クラスタの Compute Engine のリージョン

スタックタイプ、Pod、Service の IP アドレス範囲を確認する

VPC ネイティブ クラスタを作成すると、その Pod と Service の範囲を確認できます。

gcloud

クラスタを確認するには、次のコマンドを実行します。

gcloud container clusters describe CLUSTER_NAME

出力には ipAllocationPolicy ブロックが含まれます。stackType フィールドは、ネットワーク定義のタイプを表します。タイプごとに、次のネットワーク情報を確認できます。

  • IPv4 ネットワーク情報:

    • clusterIpv4Cidr が、Pod のセカンダリ範囲です。
    • servicesIpv4Cidr が、Service のセカンダリ範囲です。
  • IPv6 ネットワーク情報(クラスタにデュアルスタック ネットワークがある場合)

    • ipv6AccessType: 公共のインターネットへのルーティングの可否。内部 IPv6 アドレスの場合は INTERNAL、外部 IPv6 アドレスの場合は EXTERNAL
    • subnetIpv6CidrBlock: 新しいサブネットのセカンダリ IPv6 アドレス範囲です。
    • servicesIpv6CidrBlock: デュアルスタック クラスタの IPv6 Service に割り当てられたアドレス範囲。

コンソール

クラスタを確認するには、次の手順を行います。

  1. Google Cloud コンソールで [Google Kubernetes Engine] ページに移動します。

    Google Kubernetes Engine に移動

  2. クラスタリストで、検査するクラスタの名前をクリックします。

セカンダリ範囲は [ネットワーキング] セクションに表示されます。

  • [Pod のアドレス範囲] は、Pod のセカンダリ範囲です。
  • [Service のアドレスの範囲] は、Service のセカンダリ範囲です。

クラスタの削除

クラスタを削除するには、クラスタの削除の手順に沿って操作します。

クラスタが削除されると、GKE は作成されたサブネットワークのクリーンアップを試行します。ただし、他のリソースによってサブネットワークが使用されている場合、GKE はそのサブネットワークを削除しないため、サブネットワークの削除はユーザー自身で管理する必要があります。

内部 IP アドレスの詳細構成

以降のセクションでは、RFC 1918 以外のプライベート IP アドレス範囲を使用する方法と、プライベートで使用されるパブリック IP アドレス範囲を有効にする方法について説明します。

RFC 1918 以外の IP アドレス範囲を使用する

GKE クラスタでは、ノード、Pod、Service に RFC 1918 以外の IP アドレス範囲を使用できます。サブネット範囲の内部 IP アドレスとして使用できる RFC 1918 以外のプライベート範囲については、VPC ネットワークのドキュメントで有効範囲をご覧ください。

この機能は、Windows Server ノードプールではサポートされていません。

RFC 1918 以外のプライベート範囲はサブネット範囲です。この範囲のみを使用するか、RFC 1918 サブネット範囲と組み合わせて使用できます。VPC ネイティブ クラスタの IP 範囲で説明しているように、ノード、Pod、Service は引き続きサブネット範囲を使用します。RFC 1918 以外の範囲を使用する場合、次の点に注意してください。

  • サブネット範囲(RFC 1918 以外の範囲を使用するサブネット範囲を含む)は、クラスタのノードを作成する前に手動で割り当てるか、GKE によって割り当てる必要があります。クラスタを置き換えない限り、RFC 1918 以外のサブネット範囲の使用に切り替えることも、使用を停止することもできません。

  • 内部パススルー ネットワーク ロードバランサは、サブネットのプライマリ IP アドレス範囲の IP アドレスのみを使用します。RFC 1918 以外のアドレスを持つ内部パススルー ネットワーク ロードバランサを作成するには、サブネットのプライマリ IP アドレス範囲を RFC 1918 以外のアドレスにする必要があります。

クラスタ外の宛先で、RFC 1918 以外のプライベート範囲からのトラフィックを受信できない可能性があります。たとえば、RFC 1112(クラス E)のプライベート範囲は通常、マルチキャスト アドレスとして使用されます。クラスタ外の宛先で、送信元が RFC 1918 以外のプライベート IP アドレスのパケットを処理できない場合、次を実行できます。

  • サブネットのプライマリ IP アドレス範囲に RFC 1918 範囲を使用します。これにより、クラスタ内のノードは RFC 1918 アドレスを使用します。
  • クラスタで IP マスカレード エージェントが実行され、宛先が nonMasqueradeCIDRs リストに含まれていないことを確認します。これにより、Pod から送信したパケットの送信元が SNAT によりノードアドレス(RFC 1918)に変換されます。

プライベートで使用された外部 IP アドレス範囲を有効にする

GKE クラスタは、特定の外部 IP アドレス範囲を内部のサブネット IP アドレス範囲としてプライベートに使用できます。外部 IP アドレスは、VPC ネットワークのドキュメントに記載されている特定の制限付きの範囲を除いてすべてプライベートに使用できます。 この機能は Windows Server ノードプールでサポートされていません。

プライベートで使用される外部 IP アドレス範囲を利用するには、クラスタが VPC ネイティブ クラスタである必要があります。ルートベース クラスタはサポートされていません。

プライベートで使用される外部範囲はサブネット範囲です。これらを排他的に使用することも、プライベート アドレスを使用する他のサブネット範囲と組み合わせて使用することもできます。VPC ネイティブ クラスタの IP 範囲で説明しているように、ノード、Pod、Service は引き続きサブネット範囲を使用します。外部 IP アドレスをプライベートで再利用するときは、次の点に注意してください。

  • 外部 IP アドレス範囲をサブネット範囲として使用すると、クラスタはその外部範囲を使用するインターネット上のシステムと通信できなくなります。範囲は、クラスタの VPC ネットワークの内部 IP アドレス範囲になります。

  • サブネット範囲(外部 IP アドレス範囲をプライベートで使用する範囲も含む)は、クラスタのノードを作成する前に、手動で割り当てるか、GKE によって割り当てる必要があります。クラスタを置き換えない限り、プライベートで使用された外部 IP 範囲の使用への切り替えや使用の停止はできません。

GKE のデフォルトでは、ノードに外部 IP の宛先への SNAT が実装されます。外部 IP アドレスを使用するように Pod CIDR を構成している場合、SNAT ルールは Pod 間トラフィックに適用されます。これを回避するには、2 つの方法があります。

Standard クラスタの場合、クラスタ バージョンが 1.14 以降であれば、どちらのオプションでも機能します。クラスタのバージョンが 1.14 より前の場合は、2 番目のオプション(ip-masq-agent の構成)のみを使用できます。

次のステップ