

 **このページの改善にご協力ください** 

このユーザーガイドに貢献するには、すべてのページの右側のペインにある「**GitHub でこのページを編集する**」リンクを選択してください。

# コントロールプレーンエグレスルーティングの設定
<a name="control-plane-egress"></a>

デフォルトでは、Amazon EKS は Kubernetes コントロールプレーンから VPC 内のリソースへのエグレスネットワーキングを管理します。*コントロールプレーンエグレスルーティング*を使用して、この動作を変更し、ネットワークパスを自分で管理します。これにより、コントロールプレーンの Elastic Network Interface (ENI) からのトラフィックが VPC リソースに到達する方法を完全に制御できます。独自の NAT ゲートウェイ、ファイアウォール、または検査アプライアンスを介してルーティングできます。

![kube-apiserver がカスタマー VPC サブネットのクロスアカウント ENI を介して NAT ゲートウェイなどのルートテーブルとエグレスデバイスにトラフィックを送信し、その後インターネットに出力してウェブフックと OIDC エンドポイントに到達することを示すアーキテクチャ図](https://docs.aws.amazon.com/ja_jp/eks/latest/userguide/images/control-plane-egress-overview.png)


## エグレスルーティングモード
<a name="control-plane-egress-modes"></a>

Amazon EKS は、次のコントロールプレーンエグレスルーティングモードをサポートしています。


| モード | 説明 | 
| --- | --- | 
|  `AWS_MANAGED`  | デフォルトの動作。Amazon EKS は、コントロールプレーン ENI からのエグレスパスを管理します。コントロールプレーントラフィック用に NAT ゲートウェイやその他のルーティングインフラストラクチャを設定する必要はありません。 | 
|  `CUSTOMER_ROUTED`  | VPC サブネットのコントロールプレーンからのエグレスパスを管理します。ユーザーは、コントロールプレーンが必要なエンドポイント (ウェブフックサーバー、OIDC プロバイダー、その他のリソースなど) に到達できることを確認する責任があります。NAT ゲートウェイ、NAT インスタンス、トランジットゲートウェイ、ファイアウォールアプライアンスなどのエグレスパスを指定します。このトラフィックを許可するルートテーブル、ネットワーク ACL、およびセキュリティグループルールも設定します。 | 

**重要**  
`CUSTOMER_ROUTED` モードでは、ユーザーは、コントロールプレーンからの適切なネットワーク接続を確保する責任があります。VPC ネットワークの設定ミスにより、コントロールプレーンオペレーションが失敗する可能性があります。これらの設定ミスには、欠落したエグレスパス、制限的なネットワーク ACL、または誤ったセキュリティグループが含まれます。影響を受けるオペレーションには、アドミッションウェブフック呼び出しと OIDC 認証が含まれます。

## 前提条件
<a name="control-plane-egress-prerequisites"></a>

VPC とサブネットは、標準の Amazon EKS ネットワーキング要件を満たしている必要があります。詳細については、「[VPC とサブネットの Amazon EKS ネットワーキング要件を表示する](network-reqs.md)」を参照してください。

`CUSTOMER_ROUTED` モードでは、Kubernetes API サーバーは、クロスアカウントネットワークインターフェイスを介して顧客向けトラフィックをアウトバウンドに送信します。Amazon EKS は、コントロールプレーンからノードへの通信用にこれらのインターフェイスをサブネットに既に作成しています。このトラフィックには、アドミッションウェブフックと OIDC プロバイダーへの呼び出しが含まれます。Amazon EKS は、個別のエグレスネットワークインターフェイスを作成しません。このモードでは、既存のインターフェイスの*使用方法*が変更されます。これらのインターフェイスを保持するサブネットは、次の要件を満たしている必要があります。
+ サブネットには、コントロールプレーンが到達する必要があるエンドポイント (ウェブフックサーバーや OIDC プロバイダーなど) へのルートがある必要があります。VPC 外のエンドポイントでは、これは通常、エグレスデバイスへのデフォルトルートを意味します。デフォルトルートは、IPv4 では `0.0.0.0/0` で、IPv6 では `::/0` です。エグレスデバイスは、NAT ゲートウェイ、NAT インスタンス、ファイアウォール、または一元化された出力 VPC へのトランジットゲートウェイである場合があります。エグレスデバイスの選択はユーザーが行います。Amazon EKS では、パスが機能することのみが必要です。
+ クロスアカウントネットワークインターフェイス上のセキュリティグループは、ワークロードに必要なポート (ウェブフックや OIDC プロバイダーのポート 443 など) でのアウトバウンドトラフィックを許可する必要があります。
+ サブネット上のネットワーク ACL は、アウトバウンドトラフィックと、リターントラフィックに対応するインバウンドエフェメラルポート範囲を許可する必要があります。

`CUSTOMER_ROUTED` モードでは、コントロールプレーンは VPC の DNS 設定を使用してホスト名を解決します。これにより、コントロールプレーンは Route 53 プライベートホストゾーンと Route 53 Resolver エンドポイントを介して転送されるオンプレミス DNS のエンドポイントに到達できます。
+ VPC DHCP オプションセットでは、ドメインネームサーバーリストに `AmazonProvidedDNS` が含まれる必要があります。これは、コントロールプレーンが VPC 内の DNS 名を解決するために必要です。クラスターが外部ウェブフックエンドポイントまたはパブリック DNS 名を持つ OIDC プロバイダーを使用している場合、リゾルバーはパブリックホスト名も解決する必要があります。リゾルバーが VPC 解決とパブリック DNS 解決の両方を処理できることを確認します。

次の表は、コントロールプレーンが `CUSTOMER_ROUTED` モードで VPC 経由で送信するトラフィックをまとめたものです。


| トラフィック | 送信先 | ポート | 注意事項 | 
| --- | --- | --- | --- | 
| アドミッションウェブフック | ウェブフックエンドポイント (顧客定義の URL) | 443 (通常) | ウェブフックが設定されている場合のみ。エンドポイントが外部の場合、エグレスデバイスを介して VPC から離れます。 | 
| OIDC 検出 | OIDC 発行者 URL | 443 | OIDC プロバイダーが設定されている場合のみ。発行者が外部の場合、エグレスデバイスを介して VPC から離れます。 | 
| 集約 API サーバー | カスタマー API サーバーエンドポイント | 443 | 設定されている場合にのみ。エンドポイントが外部の場合、エグレスデバイスを介して VPC から離れます。 | 
| Kubelet API | ワーカーノードの IP アドレス | 10250 | これはクラスター ENI を介したコントロールプレーンとノード間のトラフィックであり、エグレスデバイスを通過しません。これには、ルートテーブル、セキュリティグループ、ネットワーク ACL が、コントロールプレーンとノード間のクラスター ENI を介したトラフィックを許可する必要があります。 | 

**注記**  
このテーブルにリストされているトラフィックのみがエグレス設定の影響を受けます。EKS マネージドコントロールプレーントラフィック (etcd、CloudWatch Logs、および内部 EKS サービスとの通信など) は AWS マネージドネットワークパスを経由し、VPC 設定の影響を受けません。

## 顧客ルーティングエグレスでクラスターを作成する
<a name="control-plane-egress-create"></a>

新しいクラスターを作成するときに、コントロールプレーンのエグレスモードを指定できます。

**Example**  
以下のコマンドを実行してください。{{プレースホルダーの値}}を、独自の値に置き換えます。  

```
aws eks create-cluster \
    --name my-cluster \
    --role-arn arn:aws:iam::111122223333:role/myAmazonEKSClusterRole \
    --resources-vpc-config "subnetIds=subnet-ExampleID1,subnet-ExampleID2,securityGroupIds=sg-ExampleID1,controlPlaneEgressMode=CUSTOMER_ROUTED" \
    --kubernetes-network-config "ipFamily=ipv4" \
    --region region-code
```

IPv6 クラスターには `ipFamily=ipv6` を使用できます。`CUSTOMER_ROUTED` モードで IPv6 を使用する場合は、IPv4 トラフィック用の NAT ゲートウェイに加えて、IPv6 トラフィック用のエグレス専用インターネットゲートウェイがサブネットにあることを確認します。

**Example**    
 AWS マネジメントコンソール   

1. [Amazon EKS コンソール](https://console.aws.amazon.com/eks/home#/clusters) を開きます。

1. **[クラスターを追加]**、**[作成]** の順に選択します。

1. **[ネットワーク]** ページの **[コントロールプレーンエグレス]** で、**[顧客ルーティング]** を選択します。

1. 残りのクラスター設定を完了し、**[作成]** を選択します。

AWS CloudFormation では、`ResourcesVpcConfig` で `ControlPlaneEgressMode: CUSTOMER_ROUTED` を設定します。このフィールドの Terraform サポートは、[AWS プロバイダー](https://registry.terraform.io/providers/hashicorp/aws/latest/docs)の今後のリリースで利用可能になります。

**注記**  
`CUSTOMER_ROUTED` への切り替えは一方向操作です。クラスターで顧客ルーティングエグレスを有効にした後は、`AWS_MANAGED` に戻すことはできません。

## 既存のクラスターの更新
<a name="control-plane-egress-update"></a>

`update-cluster-config` コマンドを使用して、既存のクラスターのコントロールプレーンエグレスモードを変更できます。

```
aws eks update-cluster-config \
    --name my-cluster \
    --resources-vpc-config "controlPlaneEgressMode=CUSTOMER_ROUTED" \
    --region region-code
```

更新のステータスを監視します。

```
aws eks describe-update \
    --name my-cluster \
    --update-id update-id \
    --region region-code
```

ステータスが `Successful` を示すと更新が完了します。更新タイプは `ControlPlaneEgressUpdate` です。更新は通常、10 分以内に完了します。

**重要**  
`CUSTOMER_ROUTED` への切り替えは一方向操作です。クラスターで顧客ルーティングエグレスを有効にした後は、`AWS_MANAGED` に戻すことはできません。  
切り替える前に、VPC が [前提条件](#control-plane-egress-prerequisites) の要件を満たしていることを確認します。更新後にコントロールプレーンが必要なエンドポイントへの接続が失われると、アドミッションウェブフック呼び出しや OIDC 認証などのオペレーションが失敗する可能性があります。

## IPv6 に関する考慮事項
<a name="control-plane-egress-ipv6"></a>

顧客ルーティングエグレスで IPv6 クラスターを実行する場合は、IPv4 と IPv6 の両方のエグレスパスを設定する必要があります。

`CUSTOMER_ROUTED` エグレスで IPv6 クラスター (`ipFamily=ipv6`) を実行する場合:
+ コントロールプレーン ENI には、IPv4 アドレスと IPv6 アドレスの両方が割り当てられます。
+ IPv4 と IPv6 の両方のエグレスパスを設定する必要があります。
  +  **IPv4**: エグレスデバイス (NAT ゲートウェイなど) へのデフォルトルート (`0.0.0.0/0`)。
  +  **IPv6**: IPv6 エグレスデバイス (エグレス専用インターネットゲートウェイなど) への `::/0` ルート。
+ セキュリティグループと NACL は、両方の IP バージョンでトラフィックを許可する必要があります。
+ OIDC プロバイダーまたはウェブフックエンドポイントが IPv4 専用である場合は、IPv4 NAT が機能していることを確認します。

## 考慮事項
<a name="control-plane-egress-considerations"></a>

顧客ルーティングコントロールプレーンエグレスを使用する場合は、次の点に注意してください。
+  **ユーザーの責任**: `CUSTOMER_ROUTED` モードでは、コントロールプレーンから外部エンドポイントへのネットワークパスはユーザーが管理します。そのパスが破損した場合、そのパスに依存するコントロールプレーンオペレーション (アドミッションウェブフック呼び出しや OIDC 認証など) は、接続を復元するまで失敗する可能性があります。
+  **VPC 内部トラフィックは影響を受けない**: クラスター ENI を介したコントロールプレーンとノード (ポート 10250 の kubelet API など) 間のトラフィックは、エグレスデバイスに依存しません。
+  **EKS Auto Mode**: コントロールプレーンのエグレスルーティングは、コントロールプレーンアーキテクチャが同一であるため、標準クラスターと自動モードクラスターの両方で同じように機能します。
+  **EKS 機能**: EKS 機能 (ArgoCD、ACK、KRO など) は、個別の AWS マネージドインフラストラクチャで実行されます。EKS 機能コントローラーからのトラフィックは、この機能によって VPC 経由でルーティングされません。
+  **オブザーバビリティ**: VPC またはクラスターサブネットで VPC フローログを有効にすると、VPC を経由する送信トラフィックを監視できます。これには、ウェブフックと OIDC エンドポイントへの呼び出しが含まれます。VPC フローログが有効になっていない場合、このトラフィックはログに記録されません。

## IAM 条件キー
<a name="control-plane-egress-iam-condition"></a>

Amazon EKS は `eks:controlPlaneEgressMode` 条件キーをサポートしています。このキーを IAM ポリシーまたはサービスコントロールポリシー (SCP) で使用して、発信者がクラスターを作成または更新するときに指定できるエグレスモードを制御できます。

条件キーは、次のアクションに適用されます。
+  `eks:CreateCluster` 
+  `eks:UpdateClusterConfig` 

例えば、次の SCP は、発信者が `CUSTOMER_ROUTED` を指定しない限り、クラスターの作成と設定の更新を拒否します。

```
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "RequireCustomerRoutedControlPlane",
      "Effect": "Deny",
      "Action": [
        "eks:CreateCluster",
        "eks:UpdateClusterConfig"
      ],
      "Resource": "*",
      "Condition": {
        "StringNotEquals": {
          "eks:controlPlaneEgressMode": "CUSTOMER_ROUTED"
        }
      }
    }
  ]
}
```

このポリシーを使用して、組織内のすべての新規および更新されたクラスターが `CUSTOMER_ROUTED` エグレスモードを使用するように適用します。

## OIDC プロバイダー設定
<a name="control-plane-egress-oidc"></a>

クラスターが OIDC ID プロバイダーを使用している場合、コントロールプレーンは HTTPS (ポート 443) 経由で OIDC 検出エンドポイントに到達できる必要があります。これは、サービスアカウントの IAM ロール、またはクラスター認証に関連付ける OIDC ID プロバイダーに適用されます。OIDC 固有の設定はありません。[前提条件](#control-plane-egress-prerequisites)で設定したのと同じ出力パスを使用します。これを許可するには:

1. コントロールプレーンサブネットに OIDC エンドポイントをカバーするルート (通常は NAT ゲートウェイなどのエグレスデバイスへのデフォルトルート) があることを確認します。

1. クラスターセキュリティグループがアウトバウンド TCP 443 を許可していることを確認します。

1. サブネット NACL がアウトバウンド TCP 443 およびインバウンドエフェメラルリターントラフィック (ポート 1024～65535) を許可していることを確認します。

エンドポイントはプロバイダーによって異なります。
+  **Amazon EKS OIDC プロバイダー (デフォルト)**: `oidc.eks.{{region-code}}.amazonaws.com` 
+  **カスタム OIDC プロバイダー**: 設定した発行者 URL。

OIDC 認証が失敗した場合のトラブルシューティング手順については、「[OIDC プロバイダーにアクセスできない](control-plane-egress-troubleshooting.md#egress-troubleshoot-oidc)」を参照してください。

## 接続を確認する
<a name="control-plane-egress-verify"></a>

`CUSTOMER_ROUTED` エグレスを設定したら、コントロールプレーンが VPC リソースに到達できることを確認します。

1.  **現在のエグレスモードをチェックする**: クラスターが想定どおりのモードを使用していることを確認します。

   ```
   aws eks describe-cluster --name my-cluster \
       --query "cluster.resourcesVpcConfig.controlPlaneEgressMode" \
       --region region-code
   ```

1.  **クラスターのステータスをチェックする**: クラスターは `ACTIVE` 状態になっている必要があります。

   ```
   aws eks describe-cluster --name my-cluster --query "cluster.status" --region region-code
   ```

1.  **ウェブフック接続をテストする**: アドミッションウェブフックを設定している場合は、ウェブフックをトリガーするリソースを作成し、成功することを確認します。

1.  **ノード登録を確認する**: ノードを起動し、クラスターを正常に結合することを確認します。

   ```
   kubectl get nodes
   ```

1.  **OIDC をチェックする**: サービスアカウント (IRSA) に IAM ロールを使用する場合は、ポッドが IAM ロールを引き受けることができることを確認します。

一般的な問題のトラブルシューティングについては、[コントロールプレーンのエグレスに関する問題のトラブルシューティング](control-plane-egress-troubleshooting.md) を参照してください。

📝 [GitHub でこのページを編集する](https://github.com/search?q=repo%3Aawsdocs%2Famazon-eks-user-guide+%5B%23control-plane-egress%5D&type=code) 