

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

# AWS PrivateLink と Network Load Balancer を使用して、Amazon EKS 上のコンテナアプリケーションにプライベートアクセスします。
<a name="access-container-applications-privately-on-amazon-eks-using-aws-privatelink-and-a-network-load-balancer"></a>

*Amazon Web Services、Kirankumar Chandrashekar*

## 概要
<a name="access-container-applications-privately-on-amazon-eks-using-aws-privatelink-and-a-network-load-balancer-summary"></a>

このパターンは、Network Load Balancer の背後にAmazon Elastic Kubernetes Service (Amazon EKS) で Docker コンテナアプリケーションをプライベートにホストし、AWS PrivateLink を使用してアプリケーションにアクセスする方法を示しています。その後、専用ネットワークで、Amazon Web Services（AWS） のクラウド上のサービスに安全にアクセスできるようになります。 

Docker アプリケーションを実行している Amazon EKS クラスターは、フロントエンドにNetwork Load Balancer があり、仮想プライベートクラウド (VPC) エンドポイントに関連付けて AWS PrivateLink 経由でアクセスできます。この VPC エンドポイントサービスは、VPC エンドポイントを使用して他の VPC と共有できます。

このパターンで説明されている設定は、VPC と AWS アカウント間でアプリケーションアクセスを共有するための安全な方法です。コンシューマーアカウントとプロバイダーアカウント間の接続はグローバル AWS バックボーン上にあり、パブリックインターネットを経由しないため、特別な接続やルーティング設定は必要ありません。

## 前提条件と制限事項
<a name="access-container-applications-privately-on-amazon-eks-using-aws-privatelink-and-a-network-load-balancer-prereqs"></a>

**前提条件**
+ [「Docker」](https://www.docker.com/)、 Linux、macOS または Windows にインストールし、設定されています。
+ Docker 上で実行するアプリケーション。
+ アクティブな AWS アカウント。
+ Linux、macOS または Windows にインストールして設定されている「[AWS Command Line Interface (AWS CLI) バージョン 2](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html)」。
+ タグ付けされたプライベートサブネットとホストアプリケーションに設定された既存の Amazon EKS クラスター。詳細については、「Amazon EKS ドキュメント」の「[サブネットタギング](https://docs.aws.amazon.com/eks/latest/userguide/network_reqs.html#vpc-subnet-tagging)」を参照してください。 
+ Kubectl は、Amazon EKS クラスター上のリソースにアクセスするようにインストールし、設定されています。詳細については、Amazon EKS ドキュメントの「[kubectl のインストール](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html)」を参照してください。 

## アーキテクチャ
<a name="access-container-applications-privately-on-amazon-eks-using-aws-privatelink-and-a-network-load-balancer-architecture"></a>

![\[PrivateLink と Network Load Balancer を使用して Amazon EKS コンテナ内のアプリケーションにアクセスします。\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/ce977924-012c-4fb6-8e51-94d6e5c829a6/images/378456a3-f4d1-4a57-bb36-879c240cabfb.png)


**テクノロジースタック**
+ Amazon EKS
+ AWS PrivateLink
+ Network Load Balancer

**自動化とスケール**
+ Kubernetes マニフェストは Git ベースのリポジトリで追跡、管理でき、AWS CodePipeline の継続的インテグレーションと継続的デリバリー (CI/CD) を使用してデプロイできます。 
+ AWS CloudFormation を使用して、コードとしての Infrastructure as Code (IaC) を使用してこのパターンを作成できます。

## ツール
<a name="access-container-applications-privately-on-amazon-eks-using-aws-privatelink-and-a-network-load-balancer-tools"></a>
+ 「[AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)」— AWS コマンドラインインターフェイス (AWS CLI) は、オープンソースのツールであり、コマンドラインシェルのコマンドを使用して AWS サービスとやり取りすることができます。
+ 「[Elastic Load Balancing](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html)」— Elastic Load Balancing は、Amazon Elastic Compute Cloud (Amazon EC2)インスタンス、コンテナ、IPアドレスなど、単一または複数のアベイラビリティゾーンにある複数のターゲットに、受信するアプリケーションまたはネットワークトラフィックを分散します。
+ 「[Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html)」— Amazon Elastic Kubernetes Service (Amazon EKS) は、独自の Kubernetes コントロールプレーンやノードをインストール、運用、保守することなく、AWS 上で Kubernetes を実行するために使用できるマネージドサービスです。
+ 「[Amazon VPC](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html)」— Amazon Virtual Private Cloud (Amazon VPC) を使用すると、定義した仮想ネットワーク内で AWS リソースを起動できます。
+ [Kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/) — Kubectl は、Kubernetes クラスターに対してコマンドを実行するためのコマンドラインユーティリティです。

## エピック
<a name="access-container-applications-privately-on-amazon-eks-using-aws-privatelink-and-a-network-load-balancer-epics"></a>

### Kubernetes デプロイとサービスマニフェストファイルをデプロイします。
<a name="deploy-the-kubernetes-deployment-and-service-manifest-files"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
|  Kubernetes デプロイマニフェストファイルを作成します。 | ご要求に応じて以下のサンプルファイルを変更して、デプロイマニフェストファイルを作成します。<pre>apiVersion: apps/v1<br />kind: Deployment<br />metadata:<br />  name: sample-app<br />spec:<br />  replicas: 3<br />  selector:<br />    matchLabels:<br />      app: nginx<br />  template:<br />    metadata:<br />      labels:<br />        app: nginx<br />    spec:<br />      containers:<br />        - name: nginx<br />          image: public.ecr.aws/z9d2n7e1/nginx:1.19.5<br />          ports:<br />            - name: http<br />              containerPort: 80</pre>これは NGINX Docker イメージを使用してデプロイされる NGINX サンプル設定ファイルです。詳細については、「Docker ドキュメント」の「[公式 NGINX Docker イメージの使用方法](https://www.docker.com/blog/how-to-use-the-official-nginx-docker-image/)」を参照してください。 | DevOps エンジニア | 
| Kubernetes デプロイマニフェストファイルをデプロイします。 | 次のコマンドを実行し、Amazon EKS クラスターにデプロイマニフェストファイルを適用します。`kubectl apply –f <your_deployment_file_name> ` | DevOps エンジニア | 
|  Kubernetes サービスマニフェストファイルを作成します。 | 以下のサンプルファイルをご要求に応じて変更して、サービスマニフェストファイルを作成します。<pre>apiVersion: v1<br />kind: Service<br />metadata:<br />  name: sample-service<br />  annotations:<br />    service.beta.kubernetes.io/aws-load-balancer-type: nlb<br />    service.beta.kubernetes.io/aws-load-balancer-internal: "true"<br />spec:<br />  ports:<br />    - port: 80<br />      targetPort: 80<br />      protocol: TCP<br />  type: LoadBalancer<br />  selector:<br />    app: nginx</pre>内部の Network Load Balancer を定義するには、以下の `annotations` を必ず含めてください。<pre>service.beta.kubernetes.io/aws-load-balancer-type: nlb<br />service.beta.kubernetes.io/aws-load-balancer-internal: "true"</pre> | DevOps エンジニア | 
| Kubernetes サービスのマニフェストファイルをデプロイします。 | 次のコマンドを実行し、サービスマニフェストファイルを Amazon EKS クラスターに適用します。`kubectl apply -f <your_service_file_name>` | DevOps エンジニア | 

### エンドポイントを作成する
<a name="create-the-endpoints"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| Network Load Balancer 名を記録します。 | 次のコマンドを実行して、Network Load Balancer 名を取得します。`kubectl get svc sample-service -o wide`AWS PrivateLink エンドポイントの作成に必要な Network Load Balancer 名を記録します。 | DevOps エンジニア | 
| AWS PrivateLink エンドポイントを作成します。 | AWS マネジメントコンソールにサインインし、Amazon VPC コンソールを開き、AWS PrivateLink エンドポイントを作成します。このエンドポイントをNetwork Load Balancer に関連付けることにより、アプリケーションは顧客が非公開に利用できるようになります。詳細については、Amazon VPC ドキュメントの「[VPC エンドポイントサービス (AWS PrivateLink)](https://docs.aws.amazon.com/vpc/latest/userguide/endpoint-service.html)」を参照してください。コンシューマーアカウントがアプリケーションにアクセスする必要がある場合は、コンシューマーアカウントの [AWS アカウント ID](https://docs.aws.amazon.com/IAM/latest/UserGuide/console_account-alias.html) を AWS PrivateLink エンドポイント設定の許可プリンシパルリストに追加する必要があります。詳細については、「Amazon VPC ドキュメント」の「[エンドポイントサービスのアクセス権限の追加と削除](https://docs.aws.amazon.com/vpc/latest/userguide/add-endpoint-service-permissions.html)」を参照してください。 | クラウド管理者  | 
| VPC エンドポイントを作成します。 | Amazon VPC コンソールで、**[エンドポイントサービス]** を選択し、**[エンドポイントサービスの作成]** を選択します。AWS PrivateLink エンドポイント用の VPC エンドポイントを作成します。VPC エンドポイントの完全修飾ドメイン名 (FQDN) は AWS PrivateLink エンドポイントの FQDN を指します。これにより、DNS エンドポイントがアクセスできる VPC エンドポイントサービスへの耐障害性のあるネットワークインタフェースが作成されます。  | クラウド管理者 | 

## 関連リソース
<a name="access-container-applications-privately-on-amazon-eks-using-aws-privatelink-and-a-network-load-balancer-resources"></a>
+ 公式 NGINX Docker イメージの使用
+ 「[Amazon EKS でのネットワークロードバランシング](https://docs.aws.amazon.com/eks/latest/userguide/load-balancing.html)」 
+ 「[VPC エンドポイントサービス (AWS PrivateLink)](https://docs.aws.amazon.com/vpc/latest/userguide/endpoint-service.html)」 
+ 「[エンドポイントサービスのアクセス権限の追加または削除](https://docs.aws.amazon.com/vpc/latest/userguide/add-endpoint-service-permissions.html)」