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

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

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

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

始める前に

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

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

    • 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 で、ForwardingRule、BackendService、Backend などのロードバランサ リソースと同じプロジェクト 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 が使用するネットワーク プロトコル(TCP、UDP など)。
    • BES_NAME: この ForwardingRuleExternal リソースに関連付けられている BackendService の名前(nginx-bes など)。
    • LEAF_SUBNET_NAME: 前の手順で作成したリーフ サブネットの名前(lb-project-elb-ip など)。