DNS ルーティング ポリシーとヘルスチェックを管理する

DNS ルーティング ポリシーは、クエリタイプ(重み付きラウンドロビンや位置情報など)に基づいてトラフィックを制御します。これらのポリシーは、特定のルーティング ポリシー値を含むリソース レコードセットを作成することで構成できます。これらの値により、トラフィックのルーティング方法が決まります。たとえば、重み付けされたラウンドロビン ポリシーでは、各リソース レコードセットに、トラフィック分散に影響する重みが割り当てられます。

このページでは、DNS ルーティング ポリシーの作成、編集、削除に加え、Cloud DNS を使用してヘルスチェックを有効にする方法について説明します。このページを使用する前に、DNS ポリシーの概要についてご確認ください。

DNS ルーティング ポリシーを使用するには、リソース レコードセットを作成して、リソース レコードセットに適用する次のいずれかの DNS ルーティング ポリシーを選択します。

  • 重み付きラウンドロビン(WRR)ルーティング ポリシー: WRR を使用して、DNS 名のリソース レコードセットごとに異なる重みを指定します。DNS ルーティング ポリシーにより、構成済みの重みに従ってトラフィックが分散されます。WRR ルーティング ポリシーと位置情報ルーティング ポリシーを組み合わせて使用することはできません。

  • 位置情報(GEO)ルーティング ポリシー: GEO を使用してソースの位置情報を指定し、その位置情報に対応する回答を提供します。位置情報ルーティング ポリシーは、トラフィックのソースがどのポリシー項目とも完全に一致しない場合、送信元のロケーションに最も近い一致を適用します。

    GEO は、次のように一般公開 DNS と限定公開 DNS のソースをマッピングします。

    • 公開 DNS の場合: クエリの送信元 IP アドレスまたは DNS の拡張機能メカニズム(EDNS)クライアント サブネットを使用します。
    • 限定公開 DNS の場合、EDNS クライアント サブネットは使用されません。クエリのロケーションは、クエリのパケットを送信するシステムのロケーションです。
      • VPC ネットワーク内のネットワーク インターフェースを持つ仮想マシン(VM)インスタンスからのクエリの場合、クエリのロケーションは VM を含むリージョンです。
      • 受信サーバー ポリシー エントリ ポイントによって受信されたクエリの場合、クエリのロケーションは、クエリのパケットを受信した Cloud VPN トンネル、Cloud Interconnect VLAN アタッチメント、またはルーター アプライアンスのリージョンです。エントリ ポイントの IP アドレスのリージョンは関係ありません。詳細については、[DNS サーバー ポリシー] ページの受信クエリのネットワークとリージョンをご覧ください。
  • ジオフェンス ルーティング ポリシー: ジオフェンスを使用すると、そのロケーションのすべてのエンドポイントが異常であったとしても、トラフィックを特定のロケーションに限定できます。ジオフェンスの詳細については、ジオフェンス ルーティング ポリシーをご覧ください。

  • フェイルオーバー ルーティング ポリシー: フェイルオーバーを使用してアクティブなバックアップ構成を設定します。詳細については、フェイルオーバー ルーティング ポリシーをご覧ください。

DNS ルーティング ポリシーは、地理的位置ごとに複数の IP アドレスをサポートします。特定の地理的位置に指定された場合は、重みが等しい WRR ポリシーに従って、複数の IP アドレスが返されます。位置情報ベースのルーティング ポリシーとカスタム重み付けの WRR ポリシーを組み合わせることはできません。

ヘルスチェック

Cloud DNS では、内部パススルー ネットワーク ロードバランサ、グローバル アクセスが有効になっている内部アプリケーション ロードバランサ、クロスリージョン内部アプリケーション ロードバランサのヘルスチェックがサポートされています。

内部パススルー ネットワーク ロードバランサを設定したら、Google Cloud コンソール、gcloud CLI、または API を使用して、内部パススルー ネットワーク ロードバランサを指定して、Cloud DNS 内に適切なルーティング ポリシーを設定します。この手順では、複数の WRR バケットまたは GEO バケットを設定します。各バケットには、複数の内部パススルー ネットワーク ロードバランサを含めることができます。

内部パススルー ネットワーク ロードバランサの場合、Cloud DNS はロードバランサの個々のバックエンド インスタンスの健全性情報をチェックして、ロードバランサが正常であるか、または異常であるかを判断します。Cloud DNS はデフォルトの 20% のしきい値を適用します。20% 以上のバックエンド インスタンスが正常である場合、ロードバランサ エンドポイントは正常とみなされます。DNS ルーティング ポリシーは、このしきい値に基づいてエンドポイントに正常または異常のマークを付け、それに応じてトラフィックをルーティングします。

内部アプリケーション ロードバランサとクロスリージョンの内部アプリケーション ロードバランサの場合、Cloud DNS は内部アプリケーション ロードバランサの全体的な状態をチェックし、内部アプリケーション ロードバランサ自体がバックエンド インスタンスの状態を確認できるようにします。

́エンドポイントが異常とマークされると、次の状態が発生する可能性があります。

  • ポリシーに対してプログラムされた複数の VIP アドレスがある場合は、正常な VIP アドレスのみが返されます。
  • ポリシー バケットに対してプログラムされたすべての VIP アドレスが異常な場合、そのポリシー行は失敗しています。次の動作が適用されます。

    • WRR ポリシーの場合、Cloud DNS は、次の正常な重みバケットにトラフィックを分配します。
    • フェンシングが有効になっていない GEO ポリシーの場合、トラフィックは次に最も近い地域に切り替わります。
    • フェンシングが有効になっているジオフェンス ポリシーの場合、地理的に最も近いバケットの VIP アドレスをそのまま返します。
    • フェイルオーバー ポリシーの場合、Cloud DNS はトラフィックをフェイルオーバー バケットに切り替えます。
    • すべてのポリシー バケットが異常な場合、Cloud DNS はすべてのエンドポイントが正常であるかのように動作します。

始める前に

この手順は、次のことが完了していることを前提としています。

  1. マネージド ゾーンを作成し、ゾーンを作成するための前提条件を満たしている。
  2. 次のいずれかの内部ロードバランサを設定します。
  3. 内部ロードバランサの転送ルールを作成している
  4. 内部ロードバランサのヘルスチェックを設定している

DNS ルーティング ポリシーを作成する

リソース レコードセットを作成してルーティング ポリシーを適用する手順は次のとおりです。

コンソール

構成を開始する

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

    Cloud DNS の [ゾーン] に移動

  2. レコードを追加するマネージド ゾーンの名前をクリックします。

  3. [ゾーンの詳細] ページで、[ルーティング ポリシー付きで追加] をクリックします。

ベースデータ

  1. [ルーティング ポリシーを含むレコードセットの作成] ページの [DNS 名] フィールドに、DNS ゾーンのサブドメインを入力します(例: mail)。末尾にドットが自動的に追加されます。

  2. リソース レコードのタイプ(例: A)を選択します。

  3. [TTL] フィールドに、リソース レコードの有効期間を数値で入力します。これはキャッシュに保存できる時間です。この値は正の整数である必要があります

  4. [TTL ユニット] メニューで、時間の単位(例: 30 minutes)を選択します。

  5. [次へ] をクリックします。

ルーティング ポリシーの種類

  1. [ルーティング ポリシー] リストで、[重み付きラウンドロビン]、[位置情報]、[フェイルオーバー] のいずれかを選択します。
  2. [次へ] をクリックします。

ルーティング ポリシーのデータ

  1. [重み付きラウンドロビン] を選択した場合は、[重み付けされたラウンドロビン ポリシーのルーティング データ] セクションで、次の操作を行います。

    1. [重み] フィールドに、リソース レコード(RR)データのサブセクションに対応する重みを入力します。この重みは 0.0~1,000.0 の範囲内の正の数字でなければなりません。ターゲットにルーティングされるトラフィックの割合は、すべての重みの合計に対する個々の重みの比率から計算されます。
    2. [ヘルスチェック対象のターゲットを追加] セクションで、次の操作を行います。

      1. [プロジェクト] リストで、転送ルールが存在するプロジェクトを選択します。
      2. [タイプ] リストで、[内部パススルー ネットワーク ロードバランサ]、[内部アプリケーション ロードバランサ]、[クロスリージョン内部アプリケーション ロードバランサ] を選択します。
      3. [転送ルール] リストで、転送ルールを選択します。

        転送ルールには、内部 IP アドレス、ポート、リージョン バックエンド サービス(HTTP(S) プロキシ)が指定されています。Cloud DNS とヘルスチェックを連携させるには、内部ロードバランサのグローバル アクセスを有効にする必要があります。

    3. ヘルスチェックを使用しない IPv4 アドレスを許可するには、[ヘルスチェックを受けない IPv4 アドレスを許可する] を選択します。

    4. [IPv4 アドレス] フィールドに、IPv4 アドレスを入力します。

  2. [位置情報] を選択した場合は、次の操作を行います。

    1. [ジオフェンス] で [無効] または [有効] を選択します。ジオフェンスを有効にすると、特定の位置情報のすべてのエンドポイントが異常であったとしても、トラフィックをその地域内に制限できます。
    2. [ソース リージョン] メニューで、有効な Google Cloud ソース リージョン(asia-east1 など)を選択します。
    3. [ヘルスチェック対象のターゲットを追加] セクションで、次の操作を行います。

      1. [プロジェクト] リストで、転送ルールが存在するプロジェクトを選択します。
      2. [タイプ] リストで、[内部パススルー ネットワーク ロードバランサ]、[内部アプリケーション ロードバランサ]、[クロスリージョン内部アプリケーション ロードバランサ] を選択します。
      3. [転送ルール] リストで、転送ルールを選択します。

        転送ルールには、内部 IP アドレス、ポート、リージョン バックエンド サービス(HTTP(S) プロキシ)が指定されています。Cloud DNS とヘルスチェックを連携させるには、内部ロードバランサのグローバル アクセスを有効にする必要があります。

    4. ヘルスチェックを使用しない IPv4 アドレスを許可するには、[ヘルスチェックを受けない IPv4 アドレスを許可する] を選択します。

    5. [IPv4 アドレス] フィールドに、IPv4 アドレスを入力します。

  3. [フェイルオーバー] を選択した場合は、次の操作を行います。

    1. [トリクル トラフィック(%)] フィールドに、プライマリ ターゲットのヘルスチェック ステータスに関係なく、フェイルオーバー ターゲットに送信されるトラフィックの割合を入力します。
    2. [プライマリ ターゲット] セクションで、次の操作を行います。

      1. [プロジェクト] リストで、転送ルールが存在するプロジェクトを選択します。
      2. [タイプ] リストで、[内部パススルー ネットワーク ロードバランサ]、[内部アプリケーション ロードバランサ]、[クロスリージョン内部アプリケーション ロードバランサ] を選択します。
      3. [転送ルール] リストで、転送ルールを選択します。

        転送ルールには、内部 IP アドレス、ポート、リージョン バックエンド サービス(HTTP(S) プロキシ)が指定されています。Cloud DNS とヘルスチェックを連携させるには、内部ロードバランサのグローバル アクセスを有効にする必要があります。

    3. [Backup geolocation policy] セクションで、次の操作を行います。

      1. [ジオフェンス] で [無効] または [有効] を選択します。ジオフェンスを有効にすると、特定の位置情報のすべてのエンドポイントが異常であったとしても、トラフィックをその地域内に制限できます。
      2. [ソース リージョン] メニューで、有効な Google Cloud ソース リージョン(asia-east1 など)を選択します。
      3. [ヘルスチェック対象のターゲットを追加] セクションで、次の操作を行います。

        1. [プロジェクト] リストで、転送ルールが存在するプロジェクトを選択します。
        2. [タイプ] リストで、[内部パススルー ネットワーク ロードバランサ]、[内部アプリケーション ロードバランサ]、[クロスリージョン内部アプリケーション ロードバランサ] を選択します。
        3. [転送ルール] リストで、転送ルールを選択します。

        すべてのプライマリ IP アドレスに異常がある場合、トラフィックはこのバックアップ位置情報ポリシーに従って自動的に処理されます。

    4. ヘルスチェックを使用しない IPv4 アドレスを許可するには、[ヘルスチェックを受けない IPv4 アドレスを許可する] を選択します。

    5. [IPv4 アドレス] フィールドに、IPv4 アドレスを入力します。

  4. [次へ] をクリックします。

確認と作成

  1. [確認] をクリックします。
  2. ルーティング ポリシー構成を使用して、Cloud DNS レコードセットを確認します。
  3. 省略可: [Equivalent comment line] をクリックして gcloud CLI コマンドを表示し、ルーティング ポリシーを設定してこのレコードセットを作成します。
  4. [作成] をクリックします。

gcloud

ResourceRecordSet には routingPolicy または rrdatas のいずれかを含めることができます。両方を含めることはできません。ResourceRecordSets の更新時に rrdatasroutingPolicy の間で変更が可能です。たとえば、rrdatas を含む ResourceRecordSet を更新するときに、rrdatas を削除して、同じ ResourceRecordSetroutingPolicy を追加できます。

ResourceRecordSet を作成してルーティング ポリシーを適用する手順は次のとおりです。

gcloud dns record-sets create コマンドを実行します。

GEO ポリシーの場合

gcloud dns record-sets create RRSET_NAME \
    --ttl=TTL \
    --type=RRSET_TYPE \
    --zone=MANAGED_ZONE \
    --routing-policy-type=GEO \
    --routing-policy-data=ROUTING_POLICY_DATA \
    --enable-health-checking

WRR ポリシーの場合

gcloud dns record-sets create RRSET_NAME \
    --ttl=TTL \
    --type=RRSET_TYPE \
    --zone=MANAGED_ZONE \
    --routing-policy-type=WRR \
    --routing-policy-data=ROUTING_POLICY_DATA \
    --enable-health-checking

ジオフェンス ポリシーの場合

gcloud dns record-sets create RRSET_NAME \
    --ttl=TTL \
    --type=RRSET_TYPE \
    --zone=MANAGED_ZONE \
    --routing-policy-type=GEO \
    --routing-policy-data=ROUTING_POLICY_DATA \
    --enable-geo-fencing
    --enable-health-checking

フェイルオーバー ポリシーの場合

gcloud dns record-sets create RRSET_NAME \
    --ttl=TTL \
    --type=RRSET_TYPE \
    --zone=MANAGED_ZONE \
    --routing-policy-type=FAILOVER \
    --enable-geo-fencing \
    --routing-policy-primary-data=ROUTING_POLICY_PRIMARY_DATA \
    --routing-policy-backup-data-type=ROUTING_POLICY_BACKUP_DATA_TYPE \
    --routing-policy-backup-data=ROUTING_POLICY_BACKUP_DATA \
    --backup-data-trickle-ratio=BACKUP_DATA_TRICKLE_RATIO \
    --enable-health-checking

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

  • RRSET_NAME: 接尾辞としてこのゾーンの DNS 名を使用した受信クエリと一致する DNS 名(例: service.example.com
  • TTL: リゾルバがこの ResourceRecordSet をキャッシュに保存する秒単位の TTL(例: 30
  • RRSET_TYPE: この ResourceRecordSet のリソース レコードタイプ(A など)

    サポートされているレコードタイプの一覧については、リソース レコードのタイプの選択をご覧ください。

  • MANAGED_ZONE: この ResourceRecordSet が関連付けられているマネージド ゾーン(service-zone など)。この ResourceRecordSet の名前には、接尾辞としてマネージド ゾーンの DNS 名が必要です。

  • ROUTING_POLICY_TYPE: ルーティング ポリシーのタイプ

    重み付きラウンドロビンの場合は WRR、位置情報の場合は GEO、フェイルオーバー ポリシーの場合は FAILOVER を入力します。選択されたタイプがポリシーになった後は、このフィールドを変更できません。ポリシーを削除して、別のタイプの新しいポリシーを追加することのみ可能です。

  • ROUTING_POLICY_DATA: ルーティング ポリシーのデータ

    • --routing-policy-type=WRR${weight_percent}:${rrdatas} 形式のセミコロン区切りリストを入力します(例: .8=203.0.113.1;.2=198.51.100.1)。重みは正の小数で指定します。ターゲットにルーティングされるトラフィックの割合は、すべての重みの合計に対する個々の重みの比率から計算されます。転送ルール名は有効な値であり、ヘルスチェックが行われます。
    • --routing-policy-type=GEO${region}=${IP_address} 形式のセミコロン区切りリストを入力します(例: asia-east1=198.51.100.1;us-central1=203.0.113.1)。1 つのリージョンに複数の IP アドレスを指定するには、IP アドレスをカンマで区切ります。転送ルール名は有効な値であり、ヘルスチェックが行われます。
    • --routing-policy-type=FAILOVER に、作成した転送ルールの名前を形式 ${region}=${Forwarding rule name} で入力します。

    ルーティング ポリシー タイプとルーティング ポリシー データの両方を指定する必要があります。片方を指定した場合、もう 1 つのフラグを未入力のままにすることはできません。

  • --enable-geo-fencing: GEO ルーティング ポリシーの場合、リージョン内のすべてのエンドポイントが異常な状態になると、リージョンを超えてトラフィックをフェイルオーバーするかどうかを決定します。設定すると、そのリージョンのすべてのエンドポイントが異常な場合であっても、Cloud DNS は常に最も近いリージョンにクエリを送信します。ジオフェンスを無効にするには、--no-enable-geo-fencing を使用します。設定されていない場合、リージョン内のすべてのエンドポイントが正常でない場合は、Cloud DNS は次に最も近いリージョンにクエリを送信します。デフォルトは false です。

  • ROUTING_POLICY_PRIMARY_DATA: FAILOVER ルーティング ポリシーに使用するプライマリ ターゲット。このターゲットは、1 つ以上の転送ルール(forwarding-rule-1 など)への参照にする必要があります。これらの転送ルールの少なくとも 1 つが正常である限り、すべての正常な転送ルールの IP アドレスを使用してこの名前のクエリに応答します。

  • ROUTING_POLICY_BACKUP_DATA: FAILOVER ルーティング ポリシーに使用するバックアップ ターゲット。これらのターゲットは、--routing-policy-primary-data で指定されたすべての転送ルールが異常な場合に使用されます。Cloud DNS は、地域ベースのバックアップ ターゲットのみをサポートします。このフィールドの形式は、--routing-policy-type = 'GEO' の場合の --routing-policy-data のものと一致します(asia-east1=forwarding-rule-2 など)。

  • ROUTING_POLICY_BACKUP_DATA_TYPE: FAILOVER ルーティング ポリシーの場合、バックアップ データで使用されるルーティング ポリシーのタイプ。これは GEO にする必要があります。

  • BACKUP_DATA_TRICKLE_RATIO: プライマリが正常な場合であっても、バックアップ ターゲットに送信するトラフィックの割合。この割合は 0~1 にする必要があります(0.1 など)。デフォルトは 0 に設定されています。

  • --enable-health-checking: ヘルスチェックを有効にするフラグ。このフラグを使用する場合は、--routing-policy-data フィールドに IP アドレスではなく転送ルール名を指定する必要があります。

API

resourceRecordSets.create メソッドを使用します。

GEO ポリシーの場合

POST https://www.googleapis.com/dns/v1/projects/PROJECT_ID/managedZones/MANAGED_ZONE/rrsets
{
            "name": "RRSET_NAME",
            "type": "RRSET_TYPE",
            "ttl": TTL,
            "routingPolicy": {
          "geo": {
              "items": [
              {
                  "location": "LOCATION",
                  "healthCheckedTargets": {
                     "internalLoadBalancers": [
                      {
                       "loadBalancerType": "LOAD_BALANCER_TYPE"
                       "ipAddress": "IP_ADDRESS"
                       "port" : "PORT_NUMBER"
                       "ipProtocol": "IP_PROTOCOL"
                       "networkUrl": "NETWORK_URL"
                       "project": "PROJECT"
                       "region": "REGION"
                      }
                     ]
                  }
              },
              {
                  "location": "LOCATION",
                  "healthCheckedTargets": {
                     "internalLoadBalancers": [
                      {
                       "loadBalancerType": "LOAD_BALANCING_TYPE"
                       "ipAddress": "IP_ADDRESS"
                       "port" : "PORT_NUMBER"
                       "ipProtocol": "IP_PROTOCOL"
                       "networkUrl": "NETWORK_URL"
                       "project": "PROJECT"
                       "region": "REGION"
                      }
                     ]
                  }
              },
              }
           ]

        }
     }
}

WRR ポリシーの場合

POST https://www.googleapis.com/dns/v1/projects/PROJECT_ID/managedZones/MANAGED_ZONE/rrsets
{
  "name": "RRSET_NAME",
        "type": "RRSET_TYPE",
        "ttl": TTL,
  "routingPolicy": {
    "wrr": {
      "items": [
        {
          "weight": WEIGHT,
          "healthCheckedTargets": {
            "internalLoadBalancers": [
              {
                "loadBalancerType": "LOAD_BALANCER_TYPE"
                "ipAddress": "IP_ADDRESS"
                "port" : "PORT_NUMBER"
                "ipProtocol": "IP_PROTOCOL"
                "networkUrl": "NETWORK_URL"
                "project": "PROJECT"
                "region": "REGION"
              }
            ]
          }
        },
        {
          "weight": WEIGHT,
          "healthCheckedTargets": {
            "internalLoadBalancers": [
              {
                "loadBalancerType": "LOAD_BALANCER_TYPE"
                "ipAddress": "IP_ADDRESS"
                "port" : "PORT_NUMBER"
                "ipProtocol": "IP_PROTOCOL"
                "networkUrl": "NETWORK_URL"
                "project": "PROJECT"
                "region": "REGION"
              }
            ]
          }
        },
      ]
    }
  }
}

GEO for FAILOVER ポリシーの場合

フェイルオーバー オプションでは、Cloud DNS は GEO ポリシーのみをサポートします。

POST https://www.googleapis.com/dns/v1/projects/PROJECT_ID/managedZones/MANAGED_ZONE/rrsets
{
  "name": "RRSET_NAME",
        "type": "RRSET_TYPE",
        "ttl": TTL,
  "routingPolicy": {
    "primaryBackup": {
      "trickleTraffic": TRICKLE_TRAFFIC,
      "primaryTargets": {
        "internalLoadBalancers": [
          {
            "ipAddress": "IP_ADDRESS"
            "ipProtocol": "IP_PROTOCOL"
            "loadBalancerType": "LOAD_BALANCER_TYPE"
            "networkUrl": "NETWORK_URL"
            "port": "PORT_NUMBER"
            "project": "PROJECT"
            "region": "REGION"
           }
         ]
       },
       "backupGeoTargets": {
         "enableFencing": ENABLE_FENCING,
         "items": [
           {
             "location": "LOCATION",
             "rrdatas": [
               "RRDATA"
             ]
           },
           {
             "location": "LOCATION",
             "rrdatas": [
               "RRDATA"
             ]
           }
         ]
       }
     },
   }
}

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

  • PROJECT_ID: プロジェクトの ID
  • MANAGED_ZONE: この ResourceRecordSet が関連付けられているマネージド ゾーン(service-zone など)。この ResourceRecordSet の名前には、接尾辞としてマネージド ゾーンの DNS 名が必要です。
  • RRSET_NAME: 接尾辞としてこのゾーンの DNS 名を使用した受信クエリと一致する DNS 名(例: service.example.com
  • RRSET_TYPE: この ResourceRecordSet のリソース レコードタイプ(A など)
  • TTL: リゾルバがこの ResourceRecordSet をキャッシュに保存する秒単位の TTL(例: 30
  • TRICKLE_TRAFFIC: プライマリが正常であっても、バックアップ ターゲットに送信するトラフィックの割合は 0~1 にする必要があります(0.1 など)
  • ENABLE_FENCING: GEO ルーティング ポリシーの場合、リージョン内のすべてのエンドポイントが異常な状態になると、リージョンを超えてトラフィックをフェイルオーバーするかどうかを決定します。設定すると、そのリージョンのすべてのエンドポイントが異常な場合であっても、Cloud DNS は常に最も近いリージョンにクエリを送信します。設定されていない場合、リージョン内のすべてのエンドポイントが正常でない場合は、Cloud DNS は次に最も近いリージョンにクエリを送信します。デフォルトは false です。
  • LOCATION: GEO ポリシーの場合に、ポリシーを作成する位置情報(asia-east1 など)
  • WEIGHT: WRR ポリシーの場合、${weight_percent}=${rrdatas} 形式のセミコロン区切りリスト(.8=10.128.1.1;.2=10.130.1.1 など)。負でない任意の 10 進数で重みを指定します。
  • RR_DATA: リソース レコードセットに関連付けられた任意の値(例: 198.51.100.5)。rrdata1 rrdata2 rrdata3 のように、複数の値を入力することもできます(例: 198.51.100.1 203.0.113.1...)。
  • LOAD_BALANCER_TYPE: ロードバランサのタイプ(regionalL4ilb など)
  • IP_ADDRESS: 転送ルールが提供する IP アドレス
  • PORT_NUMBER: ポート番号
  • IP_PROTOCOL: ヘルスチェックに使用されるプロトコルを指定します。有効なオプションは tcpudp です。
  • NETWORK_URL: この転送ルールが適用されるネットワーク URL
  • REGION: 転送ルールを作成したリージョン

DNS ルーティング ポリシーを更新する

リソース レコードセットのルーティング ポリシーを更新する手順は次のとおりです。

コンソール

  1. Google Cloud コンソールで、Cloud DNS の [ゾーン] ページに移動します。

    Cloud DNS の [ゾーン] に移動

  2. リソース レコードセットのルーティング ポリシーを更新するゾーンをクリックします。

  3. [ゾーンの詳細] ページで、更新するリソース レコードセットの横にある [ 編集] をクリックします。

  4. 必要な更新を行った後、[保存] をクリックします。

gcloud

gcloud dns record-sets update コマンドを実行します。

GEO ポリシーの場合

gcloud dns record-sets update RRSET_NAME \
    --ttl=TTL \
    --type=RRSET_TYPE \
    --zone=MANAGED_ZONE \
    --routing-policy-type=GEO \
    --routing-policy-data=ROUTING_POLICY_DATA \
    --enable-health-checking

WRR ポリシーの場合

gcloud dns record-sets update RRSET_NAME \
    --ttl=TTL \
    --type=RRSET_TYPE \
    --zone=MANAGED_ZONE \
    --routing-policy-type=WRR \
    --routing-policy-data=ROUTING_POLICY_DATA \
    --enable-health-checking

ジオフェンス ポリシーの場合

gcloud dns record-sets update RRSET_NAME \
    --ttl=TTL \
    --type=RRSET_TYPE \
    --zone=MANAGED_ZONE \
    --routing-policy-type=GEO \
    --routing-policy-data=ROUTING_POLICY_DATA \
    --enable-geo-fencing
    --enable-health-checking

フェイルオーバー ポリシーの場合

gcloud dns record-sets update RRSET_NAME \
    --ttl=TTL \
    --type=RRSET_TYPE \
    --zone=MANAGED_ZONE \
    --routing-policy-type=FAILOVER \
    --enable-geo-fencing \
    --routing-policy-primary-data=ROUTING_POLICY_PRIMARY_DATA \
    --routing-policy-backup-data=ROUTING_POLICY_BACKUP_DATA \
    --backup-data-trickle-ratio=BACKUP_DATA_TRICKLE_RATIO \
    --enable-health-checking

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

  • RRSET_NAME: 接尾辞としてこのゾーンの DNS 名を使用した受信クエリと一致する DNS 名(例: service.example.com
  • TTL: リゾルバがこの ResourceRecordSet をキャッシュに保存する秒単位の TTL(例: 30
  • RRSET_TYPE: この ResourceRecordSet のリソース レコードタイプ(A など)

    サポートされているレコードタイプの一覧については、リソース レコードのタイプの選択をご覧ください。

  • MANAGED_ZONE: この ResourceRecordSet が関連付けられているマネージド ゾーン(service-zone など)。この ResourceRecordSet の名前には、接尾辞としてマネージド ゾーンの DNS 名が必要です。

  • ROUTING_POLICY_TYPE: ルーティング ポリシーのタイプ

    重み付きラウンドロビンの場合は WRR、位置情報の場合は GEO、フェイルオーバー ポリシーの場合は FAILOVER を入力します。選択されたタイプがポリシーになった後は、このフィールドを変更できません。ポリシーを削除して、別のタイプの新しいポリシーを追加することのみ可能です。

  • ROUTING_POLICY_DATA: ルーティング ポリシーのデータ

    • --routing-policy-type=WRR${weight_percent}:${rrdatas} 形式のセミコロン区切りリストを入力します(例: .8=203.0.113.1;.2=198.51.100.1)。重みは正の小数で指定します。ターゲットにルーティングされるトラフィックの割合は、すべての重みの合計に対する個々の重みの比率から計算されます。転送ルール名は有効な値であり、ヘルスチェックが行われます。
    • --routing-policy-type=GEO${region}=${IP_address} 形式のセミコロン区切りリストを入力します(例: asia-east1=198.51.100.1;us-central1=203.0.113.1)。1 つのリージョンに複数の IP アドレスを指定するには、IP アドレスをカンマで区切ります。転送ルール名は有効な値であり、ヘルスチェックが行われます。
    • --routing-policy-type=FAILOVER に、作成した転送ルールの名前を形式 ${region}=${Forwarding rule name} で入力します。

    ルーティング ポリシー タイプとルーティング ポリシー データの両方を指定する必要があります。片方を指定した場合、もう 1 つのフラグを未入力のままにすることはできません。

  • --enable-geo-fencing: GEO ルーティング ポリシーの場合、リージョン内のすべてのエンドポイントが異常な状態になると、リージョンを超えてトラフィックをフェイルオーバーするかどうかを決定します。設定すると、そのリージョンのすべてのエンドポイントが異常な場合であっても、Cloud DNS は常に最も近いリージョンにクエリを送信します。ジオフェンスを無効にするには、--no-enable-geo-fencing を使用します。設定されていない場合、リージョン内のすべてのエンドポイントが正常でない場合は、Cloud DNS は次に最も近いリージョンにクエリを送信します。デフォルトは false です。

  • ROUTING_POLICY_PRIMARY_DATA: FAILOVER ルーティング ポリシーに使用するプライマリ ターゲット。このターゲットは、1 つ以上の転送ルール(forwarding-rule-1 など)への参照にする必要があります。これらの転送ルールの少なくとも 1 つが正常である限り、すべての正常な転送ルールの IP アドレスを使用してこの名前のクエリに応答します。

  • ROUTING_POLICY_BACKUP_DATA: FAILOVER ルーティング ポリシーに使用するバックアップ ターゲット。これらのターゲットは、--routing-policy-primary-data で指定されたすべての転送ルールが異常な場合に使用されます。Cloud DNS は、地域ベースのバックアップ ターゲットのみをサポートします。このフィールドの形式は、--routing-policy-type = 'GEO' の場合の --routing-policy-data のものと一致します(asia-east1=forwarding-rule-2 など)。

  • BACKUP_DATA_TRICKLE_RATIO: プライマリが正常な場合であっても、バックアップ ターゲットに送信するトラフィックの割合。この割合は 0~1 にする必要があります(0.1 など)。デフォルトは 0 に設定されています。

  • --enable-health-checking: --routing-policy-data への rrdata として提供される転送ルールのヘルスチェックを有効にします。

API

resourceRecordSets.patch メソッドを使用します。rrset.rrdatas または rrset.routingPolicy のいずれかを指定します。routingPolicy を指定する場合は、新しい routingPolicy フィールド全体を指定する必要があります。

GEO ポリシーの場合は、次のメソッドを使用します。

PATCH https://www.googleapis.com/dns/v1/projects/PROJECT_ID/managedZones/MANAGED_ZONE/rrsets
{
            "name": "RRSET_NAME",
            "type": "RRSET_TYPE",
            "ttl": TTL,
            "routingPolicy": {
          "geo": {
              "items": [
              {
                  "location": "LOCATION",
                  "healthCheckedTargets": {
                     "internalLoadBalancers": [
                      {
                       "loadBalancerType": "LOAD_BALANCER_TYPE"
                       "ipAddress": "IP_ADDRESS"
                       "port" : "PORT_NUMBER"
                       "ipProtocol": "IP_PROTOCOL"
                       "networkUrl": "NETWORK_URL"
                       "project": "PROJECT"
                       "region": "REGION"
                      }
                     ]
                  }
              },
              {
                  "location": "LOCATION",
                  "healthCheckedTargets": {
                     "internalLoadBalancers": [
                      {
                       "loadBalancerType": "LOAD_BALANCING_TYPE"
                       "ipAddress": "IP_ADDRESS"
                       "port" : "PORT_NUMBER"
                       "ipProtocol": "IP_PROTOCOL"
                       "networkUrl": "NETWORK_URL"
                       "project": "PROJECT"
                       "region": "REGION"
                      }
                     ]
                  }
              },
              }
           ]

        }
     }
}

WRR ポリシーの場合は、次のメソッドを使用します。

PATCH https://www.googleapis.com/dns/v1/projects/PROJECT_ID/managedZones/MANAGED_ZONE/rrsets
{
        "name": "RRSET_NAME.",
        "type": "RRSET_TYPE",
        "ttl": TTL,
        "routingPolicy": {
          "wrrPolicy": {
              "item": [
                    {
                        "weight": WEIGHT,
                        "rrdatas": ["RR_DATA"]
                    },
                    {
                        "weight": WEIGHT,
                        "rrdatas": ["RR_DATA"]
                     }
               ],
            }
      }
}

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

  • PROJECT_ID: プロジェクトの ID
  • MANAGED_ZONE: この ResourceRecordSet が関連付けられているマネージド ゾーン(service-zone など)。この ResourceRecordSet の名前には、接尾辞としてマネージド ゾーンの DNS 名が必要です。
  • RRSET_NAME: 接尾辞としてこのゾーンの DNS 名を使用した受信クエリと一致する DNS 名(例: service.example.com
  • RRSET_TYPE: この ResourceRecordSet のリソース レコードタイプ(A など)
  • TTL: リゾルバがこの ResourceRecordSet をキャッシュに保存する秒単位の TTL(例: 30
  • TRICKLE_TRAFFIC: プライマリが正常であっても、バックアップ ターゲットに送信するトラフィックの割合は 0~1 にする必要があります(0.1 など)
  • ENABLE_FENCING: GEO ルーティング ポリシーの場合、リージョン内のすべてのエンドポイントが異常な状態になると、リージョンを超えてトラフィックをフェイルオーバーするかどうかを決定します。設定すると、そのリージョンのすべてのエンドポイントが異常な場合であっても、Cloud DNS は常に最も近いリージョンにクエリを送信します。設定されていない場合、リージョン内のすべてのエンドポイントが正常でない場合は、Cloud DNS は次に最も近いリージョンにクエリを送信します。デフォルトは false です。
  • LOCATION: GEO ポリシーの場合に、ポリシーを更新する位置情報(asia-east1 など)
  • WEIGHT: WRR ポリシーの場合、${weight_percent}=${rrdatas} 形式のセミコロン区切りリスト(.8=10.128.1.1;.2=10.130.1.1 など)。負でない任意の 10 進数で重みを指定します。
  • RR_DATA: リソース レコードセットに関連付けられた任意の値(例: 198.51.100.5)。rrdata1 rrdata2 rrdata3 のように、複数の値を入力することもできます(例: 198.51.100.1 203.0.113.1...)。
  • LOAD_BALANCER_TYPE: ロードバランサのタイプ(regionalL4ilb など)
  • IP_ADDRESS: 転送ルールが提供する IP アドレス
  • PORT_NUMBER: ポート番号
  • IP_PROTOCOL: ヘルスチェックに使用されるプロトコルを指定します。有効なオプションは tcpudp です。
  • NETWORK_URL: この転送ルールが適用されるネットワーク URL
  • REGION: 転送ルールを作成したリージョン

DNS ルーティング ポリシーを削除する

ルーティング ポリシーを削除するには、ルーティング ポリシーを含むリソース レコードセットを削除する必要があります。方法は次のとおりです。

コンソール

  1. Google Cloud コンソールで、Cloud DNS の [ゾーン] ページに移動します。

    Cloud DNS の [ゾーン] に移動

  2. リソース レコードセットを削除するゾーンをクリックします。

  3. [ゾーンの詳細] ページで、削除するリソース レコードセットの DNS 名の横にあるチェックボックスをオンにします。

  4. [レコードセットを削除] をクリックします。

gcloud

gcloud dns record-sets delete コマンドを実行します。

gcloud dns record-sets delete RRSET_NAME \
    --type=RRSET_TYPE \
    --zone=MANAGED_ZONE \

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

  • RRSET_NAME: 接尾辞としてこのゾーンの DNS 名を使用した受信クエリと一致する DNS 名(例: service.example.com
  • RRSET_TYPE: この ResourceRecordSet のリソース レコードタイプ(A など)

    サポートされているレコードタイプの一覧については、リソース レコードのタイプの選択をご覧ください。

  • MANAGED_ZONE: この ResourceRecordSet が関連付けられているマネージド ゾーン(service-zone など)。この ResourceRecordSet の名前には、接尾辞としてマネージド ゾーンの DNS 名が必要です。

API

resourceRecordSets.delete メソッドを使用します。

DELETE https://www.googleapis.com/dns/v1/projects/PROJECT_ID/managedZones/MANAGED_ZONE/rrsets/RRSET_NAME/RRSET_TYPE

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

  • PROJECT_ID: プロジェクトの ID
  • MANAGED_ZONE: この ResourceRecordSet が関連付けられているマネージド ゾーン(my-zone-name など)。この ResourceRecordSet の名前には、接尾辞としてマネージド ゾーンの DNS 名が必要です。
  • RRSET_NAME: 接尾辞としてこのゾーンの DNS 名を使用した受信クエリと一致する DNS 名(例: test.example.com
  • RRSET_TYPE: この ResourceRecordSet のリソース レコードタイプ(A など)

次のステップ