

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

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

# ハイブリッドノードのアドオンを構成する
<a name="hybrid-nodes-add-ons"></a>

このページでは、Amazon EKS Hybrid Nodes で AWS アドオンとコミュニティアドオンを実行する際の考慮事項について説明します。Amazon EKS アドオンと、クラスターからアドオンを作成、アップグレード、削除するプロセスの詳細については、「[Amazon EKS アドオン](eks-add-ons.md)」を参照してください。このページに特に明記されていない限り、Amazon EKS アドオンを作成、アップグレード、削除するプロセスは、ハイブリッドノードを備える Amazon EKS クラスターでも、AWS クラウドでノードが実行される Amazon EKS クラスターでも同じです。このページに記載のアドオンについてのみ、Amazon EKS Hybrid Nodes との互換性が検証されています。

以下の AWS アドオンは、Amazon EKS Hybrid Nodes と互換性があります。


|  AWS アドオン | 互換性のあるアドオンバージョン | 
| --- | --- | 
|  kube-proxy  |  v1.25.14-eksbuild.2 以降  | 
|  CoreDNS  |  v1.9.3-eksbuild.7 以降  | 
|   AWS オープンテレメトリー用ディストリビューター (ADOT)  |  v0.102.1-eksbuild.2 以降  | 
|  CloudWatch Observability エージェント  |  v2.2.1-eksbuild.1 以降  | 
|  EKS Pod Identity エージェント  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/eks/latest/userguide/hybrid-nodes-add-ons.html)  | 
|  ノードモニタリングエージェント  |  v1.2.0-eksbuild.1 以降  | 
|  CSI スナップショットコントローラー  |  v8.1.0-eksbuild.1 以降  | 
|   AWS プライベート CA の Connector for Kubernetes  |  v1.6.0-eksbuild.1 以降  | 
|  Amazon FSx CSI ドライバー  |  v1.7.0-eksbuild.1 以降  | 
|   AWS Secrets Store CSI Driver プロバイダー  |  v2.1.1-eksbuild.1 以降  | 

以下のコミュニティアドオンは、Amazon EKS Hybrid Nodes と互換性があります。コミュニティアドオンの詳細については、「[コミュニティアドオン](community-addons.md)」を参照してください。


| コミュニティアドオン | 互換性のあるアドオンバージョン | 
| --- | --- | 
|  Kubernetes メトリクスサーバー  |  v0.7.2-eksbuild.1 以降  | 
|  cert-manager  |  v1.17.2-eksbuild.1 以降  | 
|  Prometheus Node Exporter  |  v1.9.1-eksbuild.2 以降  | 
|  kube-state-metrics  |  v2.15.0-eksbuild.4 以降  | 
|  外部 DNS  |  v0.19.0-eksbuild.1 以降  | 

上記の表の Amazon EKS アドオンに加えて、[Amazon Managed Service for Prometheus コレクター](prometheus.md)、および[アプリケーションイングレス](alb-ingress.md) (HTTP) および[ロードバランシング](network-load-balancing.md) (TCP/UDP) 用の [AWS ロードバランサーコントローラー](aws-load-balancer-controller.md)はハイブリッドノードと互換性があります。

AWS アドオンとコミュニティアドオンには、Amazon EKS Hybrid Nodes と互換性のないものがあります。こうしたアドオンの最新バージョンには、デフォルトの `eks.amazonaws.com/compute-type: hybrid` ラベルをハイブリッドノードに適用するにあたってアンチアフィニティルールがあります。これにより、クラスターにデプロイされたときにハイブリッドノードで実行されるのが防止されます。ハイブリッドノードと AWS クラウドで実行されているノードの両方を備えたクラスターがある場合、クラスター内のこれらのアドオンを AWS クラウドで実行されているノードにデプロイできます。Amazon VPC CNI はハイブリッドノードと互換性がなく、Cilium と Calico は Amazon EKS Hybrid Nodes のコンテナネットワークインターフェイス (CNI としてサポートされています。詳細については「[ハイブリッドノードの CNI を設定する](hybrid-nodes-cni.md)」を参照してください。

## AWSアドオン
<a name="hybrid-nodes-add-ons-aws-add-ons"></a>

以降のセクションでは、ハイブリッドノード上の互換性のある AWS アドオンを実行する場合と、他の Amazon EKS コンピューティングタイプで同じアドオンを実行する場合の違いについて説明します。

## kube-proxy と CoreDNS
<a name="hybrid-nodes-add-ons-core"></a>

AWS CLI によるものも含め AWS API と AWS SDK で EKS クラスターを作成すると、EKS はデフォルトで kube-proxy と CoreDNS をセルフマネージドアドオンとしてインストールします。こうしたアドオンは、クラスターの作成後に Amazon EKS アドオンで上書きできます。[Amazon EKS クラスターで `kube-proxy` を管理する](managing-kube-proxy.md) および [Amazon EKS クラスターで DNS の CoreDNS を管理する](managing-coredns.md) の詳細についてはEKS ドキュメントを参照してください。ハイブリッドノードと AWS クラウド内のノードの両方がある混合モードのクラスターを実行している場合、AWS ではハイブリッドノードに少なくとも 1 つの CoreDNS レプリカがあり、AWS クラウド内のノードに少なくとも 1 つの CoreDNS レプリカがあるようにすることをお勧めします。設定手順については、「[CoreDNS レプリカを設定する](hybrid-nodes-webhooks.md#hybrid-nodes-mixed-coredns)」を参照してください。

## CloudWatch Observability エージェント
<a name="hybrid-nodes-add-ons-cw"></a>

CloudWatch Observability エージェントオペレーターは、[ウェブフック](https://kubernetes.io/docs/reference/access-authn-authz/webhook/)を使用します。ハイブリッドノードでオペレーターを実行する場合は、オンプレミスネットワークでオンプレミスポッド CIDR をルーティングし、リモートポッドネットワークで EKS クラスターを設定する必要があります。詳細については、「[Configure webhooks for hybrid nodes](hybrid-nodes-webhooks.md)」を参照してください。

ノードレベルのメトリクスは[クラウドコンテナインサイトを見る](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/ContainerInsights.html) がノードレベルのメトリクスに関して[インスタンスメタデータサービス](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-service.html) (IMDS の可用性に依存するため、ハイブリッドノードでは利用できません。クラスター、ワークロード、ポッド、コンテナレベルのメトリクスはハイブリッドノードで利用できます。

「[Amazon CloudWatch オベサビリティ を使用して Amazon CloudWatch エージェントをインストールする](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/install-CloudWatch-Observability-EKS-addon.html)」で説明されているステップに従ってアドオンをインストールした後、エージェントがハイブリッドノードで正常に実行できるようにするにはアドオンマニフェストを更新する必要があります。以下に示すように、クラスターの `amazoncloudwatchagents` リソースを編集して `RUN_WITH_IRSA` 環境変数を追加します。

```
kubectl edit amazoncloudwatchagents -n amazon-cloudwatch cloudwatch-agent
```

```
apiVersion: v1
items:
- apiVersion: cloudwatch.aws.amazon.com/v1alpha1
  kind: AmazonCloudWatchAgent
  metadata:
    ...
    name: cloudwatch-agent
    namespace: amazon-cloudwatch
    ...
  spec:
    ...
    env:
    - name: RUN_WITH_IRSA # <-- Add this
      value: "True" # <-- Add this
    - name: K8S_NODE_NAME
      valueFrom:
        fieldRef:
          fieldPath: spec.nodeName
          ...
```

## Amazon Managed Prometheus ハイブリッドノード用マネージドコレクター
<a name="hybrid-nodes-add-ons-amp"></a>

Amazon Managed Service for Prometheus (AMP) マネージドコレクターは Amazon EKS クラスター内のリソースからメトリクスを検出して収集するスクレイパーで構成されています。AMP はスクレイパーを自動的に管理するため、インスタンス、エージェント、スクレイパーをユーザーが管理する必要はありません。

AMP マネージドコレクターはハイブリッドノードに固有の追加設定を行わなくても使用できます。ただし、VPC からリモートポッドネットワーク CIDR へのルートや、オンプレミスファイアウォールで開いているポートなど、ハイブリッドノード上のアプリケーションのメトリクスエンドポイントが VPC から到達可能である必要があります。さらに、クラスターには[プライベートクラスターエンドポイントアクセス](cluster-endpoint.md)が必要です。

「Amazon Managed Service for Prometheus ユーザーガイド」の「[AWS マネージドコレクターの使用](https://docs.aws.amazon.com/prometheus/latest/userguide/AMP-collector-how-to.html)」のステップに従います。

## AWS オープンテレメトリー用ディストリビューター (ADOT)
<a name="hybrid-nodes-add-ons-adot"></a>

AWS Distro for OpenTelemetry (ADOT) アドオンを使用して、ハイブリッドノードで実行されているアプリケーションからメトリクス、ログ、トレースデータを収集できます。ADOT は、Collector Custom Resource リクエストの変更と検証にアドミッション[ウェブフック](https://kubernetes.io/docs/reference/access-authn-authz/webhook/)を使用します。ハイブリッドノードで ADOT オペレーターを実行する場合は、オンプレミスネットワークでオンプレミスポッド CIDR をルーティングし、リモートポッドネットワークで EKS クラスターを設定する必要があります。詳細については、「[Configure webhooks for hybrid nodes](hybrid-nodes-webhooks.md)」を参照してください。

*AWS オープンテレメトリー用ディストリビューター* ドキュメントの「[EKS アドオンを使用した AWSオープンテレメトリー用ディストリビューター の開始方法](https://aws-otel.github.io/docs/getting-started/adot-eks-add-on)」のステップに従ってください。

## AWS ロードバランサーコントローラー
<a name="hybrid-nodes-add-ons-lbc"></a>

ハイブリッドノード上のワークロードのターゲットタイプが `ip` の場合、[AWS Load Balancer Controller](aws-load-balancer-controller.md) を Application Load Balancer (ALB) や Network Load Balancer (NLB) と共に使用できます。ALB または NLB で使用される IP ターゲットは、AWS からルーティング可能である必要があります。AWS Load Balancer Controller も、[ウェブフック](https://kubernetes.io/docs/reference/access-authn-authz/webhook/)を使用します。ハイブリッドノードで AWS Load Balancer Controller オペレーターを実行する場合は、オンプレミスネットワークでオンプレミスポッド CIDR をルーティングし、リモートポッドネットワークで EKS クラスターを設定する必要があります。詳細については、「[Configure webhooks for hybrid nodes](hybrid-nodes-webhooks.md)」を参照してください。

AWS ロードバランサーコントローラー をインストールするには「[AWS Application Load Balancer](hybrid-nodes-ingress.md#hybrid-nodes-ingress-alb)」または「[AWS Network Load Balancer](hybrid-nodes-load-balancing.md#hybrid-nodes-service-lb-nlb)」のステップに従います。

ALB でイングレスを使用する場合は以下の注釈を指定する必要があります。詳細については「[Application Load Balancer を使用してアプリケーションと HTTP トラフィックをルーティングする](alb-ingress.md)」を参照してください。

```
alb.ingress.kubernetes.io/target-type: ip
```

NLB で負荷分散を使用する場合は以下の注釈を指定する必要があります。詳細については「[Network Load Balancer を使用して TCP および UDP トラフィックをルーティングする](network-load-balancing.md)」を参照してください。

```
service.beta.kubernetes.io/aws-load-balancer-type: "external"
service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: "ip"
```

## EKS Pod Identity エージェント
<a name="hybrid-nodes-add-ons-pod-id"></a>

**注記**  
Bottlerocket を実行しているハイブリッドノードに EKS Pod Identity Agent アドオンを正常にデプロイするには、Bottlerocket のバージョンが v1.39.0 以上であることを確認します。Pod Identity エージェントのハイブリッドノード環境では、以前の Bottlerocket バージョンがサポートされていません。

元の Amazon EKS Pod Identity エージェント DaemonSet は必要な AWS 認証情報を取得するために、ノードの EC2 IMDS を利用します。IMDS はハイブリッドノードでは使用できないため、バージョン 1.3.3-eksbuild.1 以降では必要に応じて Pod Identity Agent アドオンに必要な認証情報をマウントする DaemonSet がデプロイされます。Bottlerocket を実行するハイブリッドノードでは、認証情報をマウントするために別の方法が必要です。バージョン 1.3.7-eksbuild.2 以降では、必要に応じて Pod Identity Agent アドオンに Bottlerocket ハイブリッドノードを対象とする専用の DaemonSet がデプロイされます。以下のセクションでは、オプションの DaemonSet を有効にするプロセスについて説明します。

### Ubuntu/RHEL/AL2023
<a name="_ubunturhelal2023"></a>

1. Ubuntu/RHEL/Al2023 ハイブリッドノードで Pod Identity エージェントを使用するには、以下に示すように `nodeadm` 設定のハイブリッドセクションで `enableCredentialsFile: true` を設定します。

   ```
   apiVersion: node.eks.aws/v1alpha1
   kind: NodeConfig
   spec:
       hybrid:
           enableCredentialsFile: true # <-- Add this
   ```

   これにより、`eks-pod-identity-agent` ポッドで使用される認証情報ファイルをノード上の `/eks-hybrid/.aws/credentials` に作成するように `nodeadm` が設定されます。この認証情報ファイルには定期的に更新される一時的な AWS 認証情報が含まれます。

1. *各*ノードの `nodeadm` 設定を更新したら、`nodeConfig.yaml` で以下の `nodeadm init` コマンドを実行して、ハイブリッドノードを Amazon EKS クラスターに結合します。ノードが以前にクラスターに参加していた場合でも、`nodeadm init` コマンドを再度実行してください。

   ```
   nodeadm init -c file://nodeConfig.yaml
   ```

1. AWS CLI または AWS マネジメントコンソール のいずれかを使用し、ハイブリッドノードのサポートを有効にして `eks-pod-identity-agent` をインストールします。

   1.  AWS CLI: クラスターの管理に使用しているマシンから以下のコマンドを実行して、ハイブリッドノードのサポートを有効にして `eks-pod-identity-agent` をインストールします。`my-cluster` を自分のクラスター名に置き換えます。

      ```
      aws eks create-addon \
          --cluster-name my-cluster \
          --addon-name eks-pod-identity-agent \
          --configuration-values '{"daemonsets":{"hybrid":{"create": true}}}'
      ```

   1.  AWS マネジメントコンソール: AWS コンソールから Pod Identity Agent アドオンをインストールする場合は、オプションの設定に以下を追加して、ハイブリッドノードを対象とする DaemonSet をデプロイします。

      ```
      {"daemonsets":{"hybrid":{"create": true}}}
      ```

### Bottlerocket
<a name="_bottlerocket"></a>

1. Bottlerocket ハイブリッドノードで Pod Identity エージェントを使用するには、「[Bottlerocket を実行しているハイブリッドノードの接続](hybrid-nodes-bottlerocket.md)」で説明されているように、Bottlerocket ブートストラップコンテナのユーザーデータに使用されるコマンドに `--enable-credentials-file=true` フラグを追加します。

   1. SSM 認証情報プロバイダーを使用している場合、コマンドは次のようになります。

      ```
      eks-hybrid-ssm-setup --activation-id=<activation-id> --activation-code=<activation-code> --region=<region> --enable-credentials-file=true
      ```

   1. IAM Roles Anywhere 認証情報プロバイダーを使用している場合、コマンドは次のようになります。

      ```
      eks-hybrid-iam-ra-setup --certificate=<certificate> --key=<private-key> --enable-credentials-file=true
      ```

      これによりブートストラップスクリプトが設定され、`/var/eks-hybrid/.aws/credentials` で `eks-pod-identity-agent` ポッドで使用される認証情報ファイルがノード上に作成されます。この認証情報ファイルには定期的に更新される一時的な AWS 認証情報が含まれます。

1. AWS CLI または AWS マネジメントコンソール のいずれかを使用し、Bottlerocket ハイブリッドノードのサポートを有効にして `eks-pod-identity-agent` をインストールします。

   1.  AWS CLI: クラスターの管理に使用しているマシンから、以下のコマンドを実行して `eks-pod-identity-agent` をインストールし、Bottlerocket ハイブリッドノードのサポートを有効にします。`my-cluster` を自分のクラスター名に置き換えます。

      ```
      aws eks create-addon \
          --cluster-name my-cluster \
          --addon-name eks-pod-identity-agent \
          --configuration-values '{"daemonsets":{"hybrid-bottlerocket":{"create": true}}}'
      ```

   1.  AWS マネジメントコンソール: AWS コンソールから Pod Identity Agent アドオンをインストールする場合は、オプションの設定に以下を追加して、Bottlerocket ハイブリッドノードを対象とする DaemonSet をデプロイします。

      ```
      {"daemonsets":{"hybrid-bottlerocket":{"create": true}}}
      ```

## CSI スナップショットコントローラー
<a name="hybrid-nodes-add-ons-csi-snapshotter"></a>

バージョン `v8.1.0-eksbuild.2` 以降、[CSI スナップショットコントローラーアドオン](csi-snapshot-controller.md)はハイブリッドノードにソフトアンチアフィニティルールを適用し、コントローラーの `deployment` を Amazon EKS コントロールプレーンと同じ AWS リージョンの EC2 で実行することを優先します。`deployment` を Amazon EKS コントロールプレーンと同じ AWS リージョンに配置することで、レイテンシーが改善されます。

## コミュニティアドオン
<a name="hybrid-nodes-add-ons-community"></a>

以降のセクションでは、ハイブリッドノード上の互換性のあるコミュニティアドオンを実行する場合と、他の Amazon EKS コンピューティングタイプで同じアドオンを実行する場合の違いについて説明します。

## Kubernetes メトリクスサーバー
<a name="hybrid-nodes-add-ons-metrics-server"></a>

コントロールプレーンは、Metrics Server のポッド IP (あるいは hostNetwork が有効になっている場合にはノード IP) に到達しなければなりません。このため、hostNetwork モードで Metrics Server を実行しない限り、Amazon EKS クラスターを作成するときにリモートポッドネットワークを設定し、ポッド IP アドレスをルーティング可能にする必要があります。ポッド IP アドレスをルーティング可能にする場合によく使用される方法の 1 つに、CNI でボーダーゲートウェイプロトコル (BGP) を実装することがあります。

## cert-manager
<a name="hybrid-nodes-add-ons-cert-manager"></a>

 `cert-manager` は[ウェブフック](https://kubernetes.io/docs/reference/access-authn-authz/webhook/)を使用します。ハイブリッドノードで `cert-manager` を実行する場合は、オンプレミスネットワークでオンプレミスポッド CIDR をルーティングし、リモートポッドネットワークで EKS クラスターを設定する必要があります。詳細については、「[Configure webhooks for hybrid nodes](hybrid-nodes-webhooks.md)」を参照してください。