

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Amazon EKS Auto Mode を有効化する際に NGINX Ingress Controller を移行する
<a name="migrate-nginx-ingress-controller-eks-auto-mode"></a>

*Amazon Web Services、Olawale Olaleye、Shamanth Devagari*

## 概要
<a name="migrate-nginx-ingress-controller-eks-auto-mode-summary"></a>

Amazon Elastic Kubernetes Service (Amazon EKS) の [EKS Auto Mode](https://docs.aws.amazon.com/eks/latest/userguide/automode.html) を使用すると、Kubernetes クラスターでワークロードを実行する際の運用オーバーヘッドを削減できます。このモードでは AWS 、 がユーザーに代わってインフラストラクチャを設定および管理することもできます。既存のクラスターで EKS Auto Mode を有効にする場合は、[NGINX Ingress Controller](https://docs.nginx.com/nginx-ingress-controller/overview/about/) の設定移行を慎重に実施する必要があります。Network Load Balancer の直接転送は不可となっているためです。

既存の Amazon EKS クラスターで EKS Auto Mode を有効にすると、ブルー/グリーンデプロイを用いて NGINX Ingress Controller インスタンスを移行できます。

## 前提条件と制限
<a name="migrate-nginx-ingress-controller-eks-auto-mode-prereqs"></a>

**前提条件**
+ アクティブな AWS アカウント
+ Kubernetes バージョン 1.29 を搭載の [Amazon EKS クラスター](https://docs.aws.amazon.com/eks/latest/userguide/create-cluster.html)
+ [最小バージョン](https://docs.aws.amazon.com/eks/latest/userguide/auto-enable-existing.html#auto-addons-required)を実行する Amazon EKS アドオン
+ [kubectl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html#kubectl-install-update) の最新バージョン
+ 既存の [NGINX Ingress Controller](https://kubernetes.github.io/ingress-nginx/deploy/#aws) インスタンス
+ (オプション) DNS ベースのトラフィックシフト用の Amazon Route 53 の[ホストゾーン](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/hosted-zones-working-with.html) 

## アーキテクチャ
<a name="migrate-nginx-ingress-controller-eks-auto-mode-architecture"></a>

*ブルー/グリーンデプロイ*とは、構成が同一である 2 つの環境を別々に構築するデプロイメント戦略です。ブルー/グリーンデプロイではリリースのためのダウンタイムがほとんどなく、ロールバックが可能になります。異なるアプリケーションバージョンを実行している 2 つの同一環境間で、トラフィックを移行することを主な目的としています。

次の図は、EKS Auto Mode を有効にする際の 2 つの異なる NGINX Ingress Controller インスタンスからの Network Load Balancer の移行を示しています。ブルー/グリーンデプロイを使用して、2 つの Network Load Balancer 間でトラフィックをシフトします。

![\[ブルー/グリーンデプロイを使用して NGINX Ingress Controller インスタンスを移行します。\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/57e8c14f-cb50-4027-8ef6-ce8ea3f2db25/images/211a029a-90d8-4c92-8200-19e54062f936.png)


オリジナルの名前空間は*青*で示されています。EKS Auto Mode を有効にする前に、元の NGINX Ingress Controller サービスとインスタンスが実行される場所です。元のサービスとインスタンスは、Route 53 で設定された DNS 名を持つ Network Load Balancer に接続します。[AWS Load Balancer Controller](https://kubernetes-sigs.github.io/aws-load-balancer-controller/v2.11/) は、この Network Load Balancer をターゲット仮想プライベートクラウド (VPC) にデプロイします。

この図は、ブルー/グリーンデプロイの環境設定を行う以下のワークフローを示します。

1. 別の NGINX Ingress Controller インスタンスを*緑*の名前空間にインストールして設定します。

1. Route 53 で、新しい Network Load Balancer の DNS 名を設定します。

## ツール
<a name="migrate-nginx-ingress-controller-eks-auto-mode-tools"></a>

**AWS のサービス**
+ [Amazon Elastic Kubernetes Service (Amazon EKS)](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html) を使用すると、独自の Kubernetes コントロールプレーンやノードをインストールまたは維持 AWS することなく、 で Kubernetes を実行できます。
+ 受信したアプリケーションまたはネットワークトラフィックを複数のターゲットに分散するには、[Elastic Load Balancing](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html) を使用します。例えば、1 つまたは複数のアベイラビリティーゾーンの Amazon Elastic Compute Cloud (Amazon EC2) インスタンス、コンテナ、および IP アドレスにトラフィックを分散できます。
+ [Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/Welcome.html) は、高可用性でスケーラブルな DNS ウェブサービスです。
+ [Amazon Virtual Private Cloud (Amazon VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html) は、定義した仮想ネットワークに AWS リソースを起動するのに役立ちます。この仮想ネットワークは、ユーザー自身のデータセンターで運用されていた従来のネットワークと似ていますが、 AWSのスケーラブルなインフラストラクチャを使用できるという利点があります。

**その他のツール**
+ [Helm](https://helm.sh/) は、Kubernetes 用のオープンソースのパッケージマネージャです。Kubernetes クラスター上でアプリケーションをインストールおよび管理できます。
+ [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/)は、Kubernetes クラスターに対してコマンドを実行するためのコマンドラインインターフェイスです。
+ [NGINX Ingress Controller](https://docs.nginx.com/nginx-ingress-controller/overview/about/) は、Kubernetes アプリケーションとサービスをリクエスト処理、認証、セルフサービスのカスタムリソース、デバッグに接続します。

## エピック
<a name="migrate-nginx-ingress-controller-eks-auto-mode-epics"></a>

### 既存環境を確認する
<a name="review-the-existing-environment"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| 元の NGINX Ingress Controller インスタンスが動作していることを確認します。 | 次のコマンドを入力して、`ingress-nginx` 名前空間内のリソースが動作していることを確認します。NGINX Ingress Controller を別の名前空間にデプロイした場合は、このコマンドで名前空間名を更新します。<pre>kubectl get all -n ingress-nginx</pre>出力で、NGINX Ingress Controller ポッドが実行中であることを確認します。以下は、その出力例です。<pre>NAME                                           READY   STATUS      RESTARTS      AGE<br />pod/ingress-nginx-admission-create-xqn9d       0/1     Completed   0             88m<br />pod/ingress-nginx-admission-patch-lhk4j        0/1     Completed   1             88m<br />pod/ingress-nginx-controller-68f68f859-xrz74   1/1     Running     2 (10m ago)   72m<br /><br />NAME                                         TYPE           CLUSTER-IP       EXTERNAL-IP                                                                     PORT(S)                      AGE<br />service/ingress-nginx-controller             LoadBalancer   10.100.67.255    k8s-ingressn-ingressn-abcdefg-12345.elb.eu-west-1.amazonaws.com   80:30330/TCP,443:31462/TCP   88m<br />service/ingress-nginx-controller-admission   ClusterIP      10.100.201.176   <none>                                                                          443/TCP                      88m<br /><br />NAME                                       READY   UP-TO-DATE   AVAILABLE   AGE<br />deployment.apps/ingress-nginx-controller   1/1     1            1           88m<br /><br />NAME                                                 DESIRED   CURRENT   READY   AGE<br />replicaset.apps/ingress-nginx-controller-68f68f859   1         1         1       72m<br />replicaset.apps/ingress-nginx-controller-d8c96cf68   0         0         0       88m<br /><br />NAME                                       STATUS     COMPLETIONS   DURATION   AGE<br />job.batch/ingress-nginx-admission-create   Complete   1/1           4s         88m<br />job.batch/ingress-nginx-admission-patch    Complete   1/1           5s         88m</pre> | DevOps エンジニア | 

### サンプルの HTTPd ワークロードをデプロイして NGINX Ingress Controller を使用する
<a name="deploy-a-sample-httpd-workload-to-use-the-nginx-ingress-controller"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| Kubernetes リソースを作成します。 | 次のコマンドを入力して、Kubernetes のサンプルデプロイ、サービス、イングレスを作成します。<pre>kubectl create deployment demo --image=httpd --port=80</pre><pre>kubectl expose deployment demo</pre><pre> kubectl create ingress demo --class=nginx \<br />  --rule nginxautomode.local.dev/=demo:80</pre> | DevOps エンジニア | 
| デプロイされたリソースを確認します。 | 次のコマンドを入力して、デプロイ済みリソースリストを表示します。<pre>kubectl get all,ingress</pre>出力で、サンプル HTTPd ポッドが実行中であることを確認します。以下は、その出力例です。<pre>NAME                        READY   STATUS    RESTARTS   AGE<br />pod/demo-7d94f8cb4f-q68wc   1/1     Running   0          59m<br /><br />NAME                 TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE<br />service/demo         ClusterIP   10.100.78.155   <none>        80/TCP    59m<br />service/kubernetes   ClusterIP   10.100.0.1      <none>        443/TCP   117m<br /><br />NAME                   READY   UP-TO-DATE   AVAILABLE   AGE<br />deployment.apps/demo   1/1     1            1           59m<br /><br />NAME                              DESIRED   CURRENT   READY   AGE<br />replicaset.apps/demo-7d94f8cb4f   1         1         1       59m<br /><br />NAME                             CLASS   HOSTS                                  ADDRESS                                                                         PORTS   AGE<br />ingress.networking.k8s.io/demo   nginx   nginxautomode.local.dev                k8s-ingressn-ingressn-abcdefg-12345.elb.eu-west-1.amazonaws.com                 80      56m</pre> | DevOps エンジニア | 
| サービスに到達できることを確認します。 | 次のコマンドを入力して、サービスが Network Load Balancer の DNS 名を介して到達可能であることを確認します。<pre>curl -H "Host: nginxautomode.local.dev" http://k8s-ingressn-ingressn-abcdefg-12345.elb.eu-west-1.amazonaws.com</pre>予想される出力は次のようになります。<pre><html><body><h1>It works!</h1></body></html></pre> | DevOps エンジニア | 
| (オプション) DNS レコードを作成します。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/migrate-nginx-ingress-controller-eks-auto-mode.html) | DevOps エンジニア、AWS DevOps | 

### 既存クラスターで EKS Auto Mode を有効にする
<a name="enable-eks-auto-mode-on-the-existing-cluster"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| EKS Auto Mode を有効にします。 | 「[既存のクラスターで EKS Auto Mode モードを有効にする](https://docs.aws.amazon.com/eks/latest/userguide/auto-enable-existing.html) (Amazon EKS ドキュメント)」に記載の手順に従います。 | AWS DevOps | 

### 新しい NGINX Ingress Controller をインストールする
<a name="install-a-new-nginx-ingress-controller"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| 新しい NGINX Ingress Controller インスタンスを設定します。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/migrate-nginx-ingress-controller-eks-auto-mode.html) | DevOps エンジニア | 
| 新しい NGINX Instance Controller インスタンスをデプロイします。 | 次のコマンドを入力して、変更後のマニフェストを適用します。<pre>kubectl apply -f deploy.yaml</pre> | DevOps エンジニア | 
| デプロイが成功したことを確認します。 | 次のコマンドを入力して、[`ingress-nginx-v2`] の名前空間内のリソースが動作していることを確認します。<pre>kubectl get all -n ingress-nginx-v2</pre>出力で、NGINX Ingress Controller ポッドが実行中であることを確認します。以下は、その出力例です。<pre>NAME                                            READY   STATUS      RESTARTS   AGE<br />pod/ingress-nginx-admission-create-7shrj        0/1     Completed   0          24s<br />pod/ingress-nginx-admission-patch-vkxr5         0/1     Completed   1          24s<br />pod/ingress-nginx-controller-757bfcbc6d-4fw52   1/1     Running     0          24s<br /><br />NAME                                         TYPE           CLUSTER-IP       EXTERNAL-IP                                                                     PORT(S)                      AGE<br />service/ingress-nginx-controller             LoadBalancer   10.100.208.114   k8s-ingressn-ingressn-2e5e37fab6-848337cd9c9d520f.elb.eu-west-1.amazonaws.com   80:31469/TCP,443:30658/TCP   24s<br />service/ingress-nginx-controller-admission   ClusterIP      10.100.150.114   <none>                                                                          443/TCP                      24s<br /><br />NAME                                       READY   UP-TO-DATE   AVAILABLE   AGE<br />deployment.apps/ingress-nginx-controller   1/1     1            1           24s<br /><br />NAME                                                  DESIRED   CURRENT   READY   AGE<br />replicaset.apps/ingress-nginx-controller-757bfcbc6d   1         1         1       24s<br /><br />NAME                                       STATUS     COMPLETIONS   DURATION   AGE<br />job.batch/ingress-nginx-admission-create   Complete   1/1           4s         24s<br />job.batch/ingress-nginx-admission-patch    Complete   1/1           5s         24s</pre> | DevOps エンジニア | 
| サンプル HTTPd ワークロードに新規イングレスを作成します。 | 既存のサンプル HTTPd ワークロードに新規イングレスを作成するには、以下のコマンドを入力してください。<pre>kubectl create ingress demo-new --class=nginx-v2 \<br />  --rule nginxautomode.local.dev/=demo:80</pre> | DevOps エンジニア | 
| 新規イングレスが機能することを確認します。 | 次のコマンドを入力して、新規イングレスが機能することを確認してください。<pre>curl -H "Host: nginxautomode.local.dev" k8s-ingressn-ingressn-2e5e37fab6-848337cd9c9d520f.elb.eu-west-1.amazonaws.com</pre>予想される出力は次のようになります。<pre><html><body><h1>It works!</h1></body></html></pre> | DevOps エンジニア | 

### カットオーバー
<a name="cut-over"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| 新しい名前空間にカットオーバーします。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/migrate-nginx-ingress-controller-eks-auto-mode.html) | AWS DevOps、DevOps エンジニア | 
| 2 つのイングレスを確認します。 | 次のコマンドを入力して、サンプルの HTTPd ワークロード用に作成された 2 つのイングレスを確認します。<pre>kubectl get ingress</pre>以下は、その出力例です。<pre>NAME       CLASS      HOSTS                                  ADDRESS                                                                         PORTS   AGE<br />demo       nginx      nginxautomode.local.dev   k8s-ingressn-ingressn-abcdefg-12345.elb.eu-west-1.amazonaws.com                              80      95m<br />demo-new   nginx-v2   nginxautomode.local.dev   k8s-ingressn-ingressn-2e5e37fab6-848337cd9c9d520f.elb.eu-west-1.amazonaws.com                80      33s</pre> | DevOps エンジニア | 

## 関連リソース
<a name="migrate-nginx-ingress-controller-eks-auto-mode-resources"></a>
+ 「[既存のクラスターで EKS Auto Mode モードを有効にする](https://docs.aws.amazon.com/eks/latest/userguide/auto-enable-existing.html) (Amazon EKS ドキュメント)」
+ [Amazon EKS の Kubernetes サービスコントローラーによって作成されたロードバランサーのトラブルシューティング](https://repost.aws/knowledge-center/eks-load-balancers-troubleshooting) (AWS re:Post ナレッジセンター)
+ 「[NGINX Ingress Controller](https://docs.nginx.com/nginx-ingress-controller/) (NGINX ドキュメント)」