

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

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

# サービス注釈を使用して Network Load Balancer を設定する
<a name="auto-configure-nlb"></a>

Kubernetes サービス注釈を使用して Amazon EKS で Network Load Balancer (NLB) を設定する方法について説明します。このトピックでは、インターネットアクセシビリティ、ヘルスチェック、SSL/TLS ターミネーション、IP ターゲティングモードなど、NLB の動作をカスタマイズするための EKS Auto Mode でサポートされている注釈について説明します。

EKS Auto Mode でタイプ `LoadBalancer` の Kubernetes サービスを作成すると、EKS は指定した注釈に基づいて AWS Network Load Balancer を自動的にプロビジョニングして設定します。この宣言型アプローチにより、Kubernetes マニフェストを通じてロードバランサーの設定を直接管理し、Infrastructure as Code プラクティスを維持できます。

EKS Auto Mode は、デフォルトでタイプ LoadBalancer のサービスすべてに対する Network Load Balancer プロビジョニングを処理します。追加のコントローラーのインストールや設定は必要ありません。`loadBalancerClass: eks.amazonaws.com/nlb` の仕様は、クラスターのデフォルトとして自動的に設定され、既存の Kubernetes ワークロードとの互換性を維持しながらデプロイプロセスが合理化されます。

**注記**  
EKS Auto Mode では、パブリックサブネットとプライベートサブネットを識別するためにサブネットタグが必要です。  
`eksctl` を使用してクラスターを作成した場合は、これらのタグは既にあります。  
「[EKS Auto Mode のサブネットにタグを付ける](tag-subnets-auto.md)」ではその方法を説明しています。

## サンプルサービス
<a name="_sample_service"></a>

Kubernetes `Service` リソースの詳細については、「[Kubernetes ドキュメント](https://kubernetes.io/docs/concepts/services-networking/service/)」を参照してください。

以下のサンプル `Service` リソースを確認してください。

```
apiVersion: v1
kind: Service
metadata:
  name: echoserver
  annotations:
    # Specify the load balancer scheme as internet-facing to create a public-facing Network Load Balancer (NLB)
    service.beta.kubernetes.io/aws-load-balancer-scheme: internet-facing
spec:
  selector:
    app: echoserver
  ports:
    - port: 80
      targetPort: 8080
      protocol: TCP
  type: LoadBalancer
  # Specify the new load balancer class for NLB as part of EKS Auto Mode feature
  # For clusters with Auto Mode enabled, this field can be omitted as it's the default
  loadBalancerClass: eks.amazonaws.com/nlb
```

## 一般的に使用される注釈
<a name="_commonly_used_annotations"></a>

次の表に、EKS Auto Mode でサポートされている、一般的に使用される注釈を示します。EKS Auto Mode は、すべての注釈をサポートしているわけではないことに注意してください。

**ヒント**  
以下の注釈はすべて、`service.beta.kubernetes.io/` というプレフィックスを付ける必要があります 


| フィールド | 説明 | 例 | 
| --- | --- | --- | 
|  `aws-load-balancer-type`  | ロードバランサーのタイプを指定します。新しいデプロイには `external` を使用します。 |  `external`  | 
|  `aws-load-balancer-nlb-target-type`  | トラフィックをノードインスタンスにルーティングするか、ポッド IP に直接ルーティングするかを指定します。標準デプロイでは `instance` を、直接ポッドルーティングでは `ip` を使用します。 |  `instance`  | 
|  `aws-load-balancer-scheme`  | ロードバランサーが内部向けかインターネット向けかを指定します。 |  `internet-facing`  | 
|  `aws-load-balancer-healthcheck-protocol`  | ターゲットグループのヘルスチェックプロトコル。一般的なオプションは `TCP` (デフォルト) または `HTTP` です。 |  `HTTP`  | 
|  `aws-load-balancer-healthcheck-path`  | HTTP/HTTPS プロトコルを使用する場合のヘルスチェックの HTTP パス。 |  `/healthz`  | 
|  `aws-load-balancer-healthcheck-port`  | ヘルスチェックに使用されるポート。特定のポート番号または `traffic-port` を指定できます。 |  `traffic-port`  | 
|  `aws-load-balancer-subnets`  | ロードバランサーを作成するサブネットを指定します。サブネット ID またはサブネット名を使用できます。 |  `subnet-xxxx, subnet-yyyy`  | 
|  `aws-load-balancer-ssl-cert`  | HTTPS/TLS 用の AWS Certificate Manager からの SSL 証明書の ARN。 |  ` arn:aws:acm:region:account:certificate/cert-id`  | 
|  `aws-load-balancer-ssl-ports`  | SSL/TLS を使用するポートを指定します。 |  `443, 8443`  | 
|  `load-balancer-source-ranges`  | ロードバランサーへのアクセスが許可されている CIDR 範囲。 |  `10.0.0.0/24, 192.168.1.0/24`  | 
|  `aws-load-balancer-additional-resource-tags`  | ロードバランサーおよび関連リソースに適用する追加の AWS タグ。 |  `Environment=prod,Team=platform`  | 
|  `aws-load-balancer-ip-address-type`  | ロードバランサーが使用するのが IPv4 かデュアルスタック (IPv4 \+ IPv6) かを指定します。 |  `ipv4`-または-`dualstack`  | 

## 考慮事項
<a name="_considerations"></a>
+ クラスター IAM ロールを更新して、Kubernetes から AWS ロードバランサーリソースへのタグの伝播を有効にする必要があります。詳細については、「[EKS Auto リソースのカスタム AWS タグ](auto-cluster-iam-role.md#tag-prop)」を参照してください。
+ リソースを EKS Auto Mode またはセルフマネージド AWS Load Balancer Controller に関連付ける方法については、「[移行のリファレンス](migrate-auto.md#migration-reference)」を参照してください。
+ ロードバランサーの問題の修正方法については、「[EKS 自動モードl のトラブルシューティング](auto-troubleshoot.md)」を参照してください。
+ EKS Auto Mode のロードバランシング機能の使用に関する考慮事項については、「[負荷分散](auto-networking.md#auto-lb-consider)」を参照してください。

ロードバランシングのために EKS Auto Mode に移行する場合は、サービス注釈とリソース設定にいくつかの変更が必要です。次の表は、サポートされていないオプションや推奨される代替案など、新旧の実装の主な違いをまとめたものです。

### サービス注釈
<a name="_service_annotations"></a>


| 旧 | 新 | 説明 | 
| --- | --- | --- | 
|  `service.beta.kubernetes.io/load-balancer-source-ranges`  | サポートされていません | Service で `spec.loadBalancerSourceRanges` を使用 | 
|  `service.beta.kubernetes.io/aws-load-balancer-type`  | サポートされていません | Service で `spec.loadBalancerClass` を使用 | 
|  `service.beta.kubernetes.io/aws-load-balancer-internal`  | サポートされていません | `service.beta.kubernetes.io/aws-load-balancer-scheme` を使用する  | 
|  `service.beta.kubernetes.io/aws-load-balancer-proxy-protocol`  | サポートされていません | 代わりに `service.beta.kubernetes.io/aws-load-balancer-target-group-attributes` を使用 | 
| 各種ロードバランサー属性 | サポートされていません | `service.beta.kubernetes.io/aws-load-balancer-attributes` を使用する  | 
|  `service.beta.kubernetes.io/aws-load-balancer-access-log-enabled`  | サポートされていません | 代わりに `service.beta.kubernetes.io/aws-load-balancer-attributes` を使用 | 
|  `service.beta.kubernetes.io/aws-load-balancer-access-log-s3-bucket-name`  | サポートされていません | 代わりに `service.beta.kubernetes.io/aws-load-balancer-attributes` を使用 | 
|  `service.beta.kubernetes.io/aws-load-balancer-access-log-s3-bucket-prefix`  | サポートされていません | 代わりに `service.beta.kubernetes.io/aws-load-balancer-attributes` を使用 | 
|  `service.beta.kubernetes.io/aws-load-balancer-cross-zone-load-balancing-enabled`  | サポートされていません | 代わりに `service.beta.kubernetes.io/aws-load-balancer-attributes` を使用 | 

非推奨のロードバランサー属性注釈から移行するには、これらの設定を `service.beta.kubernetes.io/aws-load-balancer-attributes` 注釈に統合します。この注釈は、各種ロードバランサー属性のキーと値のペアのカンマ区切りリストを受け入れます。例えば、アクセスログ記録とクロスゾーンロードバランシングを指定するには、次の形式を使用します。

```
service.beta.kubernetes.io/aws-load-balancer-attributes: access_logs.s3.enabled=true,access_logs.s3.bucket=my-bucket,access_logs.s3.prefix=my-prefix,load_balancing.cross_zone.enabled=true
```

この統合形式により、より優れた一貫性と柔軟性で、必要な個々の注釈の数を減らしつつロードバランサー属性を設定することができます。既存の Service 設定を確認し、この統合形式を使用するように更新してください。

### TargetGroupBinding
<a name="_targetgroupbinding"></a>


| 旧 | 新 | 説明 | 
| --- | --- | --- | 
|  `elbv2.k8s.aws/v1beta1`  |  `eks.amazonaws.com/v1`  | API バージョンの変更 | 
|  `spec.targetType` が任意 |  `spec.targetType` が必須 | 明示的なターゲットタイプの指定 | 
|  `spec.networking.ingress.from`  | サポートされていません | セキュリティグループなしでは NLB がサポートされなくなりました | 

注意: カスタム TargetGroupBinding 機能を使用するには、ターゲットグループにクラスター名と共に `eks:eks-cluster-name` タグを付けて、必要な IAM アクセス許可をコントローラーに付与する必要があります。TargetGroupBinding リソースまたはクラスターを削除すると、コントローラーがターゲットグループを削除することに注意してください。