外部ロード バランシング用のグローバル サブネットを作成する

このページでは、Google Distributed Cloud(GDC)エアギャップでグローバル サブネットを作成し、そのサブネットを外部ロードバランサ(ELB)に使用する方法について説明します。

グローバル サブネットを使用すると、GDC 組織内の複数のゾーンで外部ロード バランシング オペレーションを使用できるサブネットを構成できます。ロード バランシングは、ネットワーク トラフィックを複数のサーバーに分散することで、アプリケーションとサービスのパフォーマンス、信頼性、可用性を向上させるというメリットをもたらします。ロード バランシングのグローバル サブネットの詳細については、ロード バランシングのサブネットについてをご覧ください。

このページは、組織のロード バランシングの管理を検討しているアプリケーション オペレータ グループ内のデベロッパーを対象としています。詳細については、GDC エアギャップのオーディエンスに関するドキュメントをご覧ください。

始める前に

グローバル サブネットを作成して ELB 用に構成するには、次のものが必要です。

  • ロードバランサを構成するプロジェクトを所有している。詳細については、プロジェクトを作成するをご覧ください。
  • 必要な ID とアクセスロール:

    • 組織の IAM 管理者に、ロードバランサ管理者(load-balancer-admin)ロールを付与するよう依頼します。
    • 組織 IAM 管理者に、グローバル ロードバランサ管理者(global-load-balancer-admin)ロールを付与するよう依頼します。
    • 組織 IAM 管理者に、サブネット組織管理者(subnet-org-admin)ロールを付与するよう依頼します。
    • 組織の IAM 管理者に、サブネット プロジェクト管理者(subnet-project-admin)ロールを付与するよう依頼します。

    詳細については、事前定義ロールの説明をご覧ください。

親グローバル サブネットを作成する

このセクションで作成する親グローバル サブネットは、ELB IP アドレスの取得元となる IP アドレス プールとして機能します。サブネットには ipam.gdc.goog/network-segment: data ラベルが含まれている必要があります。spec.parentReference.name フィールドを使用して、サブネットの親を指定できます。この親サブネットの CIDR を構成するには、次の 2 つの方法があります。

静的 CIDR 構成と動的 CIDR 構成の違いについては、静的 CIDR 構成と動的 CIDR 構成をご覧ください。

静的 CIDR 構成を使用してサブネットを作成する

IP アドレス空間を正確に制御する必要がある場合は、静的 CIDR 構成を使用します。このサブネットのタイプは Branch です。ルート、ブランチ、リーフのサブネット タイプの詳細については、サブネット階層をご覧ください。

静的 CIDR 構成でグローバル親サブネットを作成するには、選択した CIDR ブロックを spec.ipv4Request.cidr フィールドに追加します。

kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF
apiVersion: ipam.global.gdc.goog/v1
kind: Subnet
metadata:
  labels:
    ipam.gdc.goog/network-segment: data
  name: ELB_PARENT_SUBNET_NAME
  namespace: platform
spec:
  ipv4Request:
    cidr: STATIC_CIDR
  parentReference:
    name: PARENT_NAME
    namespace: platform
  propagationStrategy: None
  type: Branch
EOF

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

  • GLOBAL_API_SERVER: グローバル管理 API サーバーの kubeconfig パス。詳細については、グローバル API サーバーとゾーン API サーバーをご覧ください。API サーバーの kubeconfig ファイルをまだ生成していない場合は、ログインをご覧ください。
  • ELB_PARENT_SUBNET_NAME: ELB のグローバル親サブネットに選択した名前。
  • STATIC_CIDR: この親サブネットに割り当てる特定の CIDR ブロック(10.0.10.0/27 など)。
  • PARENT_NAME: この新しいサブネットの作成元となる既存の親サブネットの名前。

このサブネットが ELB と連携するように構成するには、ELB のリーフ サブネットを作成する必要があります。

動的 CIDR 構成を使用してサブネットを作成する

動的 CIDR 構成では、指定されたサイズの使用可能な CIDR ブロックが親サブネットから自動的に割り当てられます。これにより、特に大規模な環境で IP アドレスの管理が簡素化されます。このサブネットのタイプは Branch です。ルート、ブランチ、リーフのサブネット タイプの詳細については、サブネット階層をご覧ください。動的 CIDR を使用してグローバル親サブネットを作成するには、選択したプレフィックスの長さで spec.ipv4Request.prefixLength フィールドを構成します。

kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF
piVersion: ipam.global.gdc.goog/v1
kind: Subnet
metadata:
  labels:
  ipam.gdc.goog/network-segment: data
  name: ELB_PARENT_SUBNET_NAME
  namespace: platform
spec:
  ipv4Request:
    prefixLength: PREFIX_LENGTH
  parentReference:
    name: PARENT_NAME
    namespace: platform
  propagationStrategy: None
  type: Branch
EOF

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

  • ELB_PARENT_SUBNET_NAME: ELB 親サブネットに選択した名前(lb-global-lancer-elb-subnet など)。
  • STATIC_CIDR: 使用する特定の CIDR ブロック(10.0.10.0/27 など)。この変数は、静的 CIDR 構成にのみ適用されます。
  • PARENT_NAME: この新しいサブネットの作成元となる既存の親サブネットの名前(default-vpc-workload-cidr など)。
  • PREFIX_LENGTH: 動的に割り当てられた CIDR の選択されたプレフィックスの長さ(27 など)。この変数は、動的 CIDR 構成にのみ適用されます。

このサブネットが ELB と連携するように構成するには、ELB のリーフ サブネットを作成する必要があります。

ELB のリーフ サブネットを作成する

グローバル親サブネットを設定したら、リーフ サブネットを作成して、グローバル ELB サービスに単一の IP アドレスを割り当てる必要があります。このリーフ サブネットの type フィールドの値は Leaf で、ロードバランサ リソース(ForwardingRuleBackendServiceBackend など)と同じプロジェクト Namespace に存在する必要があります。

リーフ サブネットを作成して ELB にリンクする手順は次のとおりです。

  1. 単一の IP アドレスを割り当てるため、prefixLength 値が 32 のリーフ サブネットを作成します。parentReference 値は、以前に作成した親グローバル サブネットを参照します。

    kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF
    apiVersion: ipam.global.gdc.goog/v1
    kind: Subnet
    metadata:
      labels:
        ipam.gdc.goog/allocation-preference: default
        ipam.gdc.goog/network-segment: data
      name: ELB_IP_SUBNET_NAME
      namespace: PROJECT_NAMESPACE
    spec:
      ipv4Request:
        prefixLength: 32
      parentReference:
        name: PARENT_REF
        namespace: platform
      type: Leaf
    EOF
    

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

    • ELB_IP_SUBNET_NAME: 選択したリーフ サブネットの名前(lb-project-elb-ip など)。
    • PROJECT_NAMESPACE: ELB オブジェクトが配置されているプロジェクトに対応する Kubernetes Namespace(例: lb-project)。
    • PARENT_REF: このリーフ サブネットが IP アドレスを取得する親サブネットの名前(以前に作成した親グローバル サブネットなど)。
  2. 割り当てられた IP アドレスを保持する新しく作成したリーフ サブネットを、ELB の ForwardingRuleExternal リソースに接続します。ForwardingRuleExternal リソースで、spec.cidrRef.name フィールドを更新して、前の手順で作成したリーフ サブネットの名前を参照します。

    kubectl --kubeconfig GLOBAL_API_SERVER apply -f - <<EOF
    apiVersion: networking.global.gdc.goog/v1
    kind: ForwardingRuleExternal
    metadata:
      name: FRI_NAME
      namespace: PROJECT_NAMESPACE
    spec:
      ports:
        - port: PORT
          protocol: PROTOCOL
      backendServiceRef:
        name: BES_NAME
      cidrRef:
        name: LEAF_SUBNET_NAME
    EOF
    

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

    • FRI_NAME: 選択した ForwardingRuleExternal オブジェクトの名前(nginx-elb-static-fr など)。
    • PORT: ELB が受信トラフィックをリッスンするポート番号(80 など)。
    • PROTOCOL: ELB が使用するネットワーク プロトコル(TCPUDP など)。
    • BES_NAME: この ForwardingRuleExternal リソースに関連付けられている BackendService の名前(nginx-bes など)。
    • LEAF_SUBNET_NAME: 前の手順で作成したリーフ サブネットの名前(lb-project-elb-ip など)。