AWS PrivateLink と Network Load Balancer を使用して Amazon EKS でコンテナアプリケーションにプライベートにアクセスする - AWS 規範ガイダンス

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

AWS PrivateLink と Network Load Balancer を使用して Amazon EKS でコンテナアプリケーションにプライベートにアクセスする

作成者: Kirankumar Chandrashekar (AWS)

環境:本稼働

テクノロジー: コンテナとマイクロサービス DevOps、モダナイゼーション、セキュリティ、アイデンティティ、コンプライアンス

ワークロード:その他すべてのワークロード

AWS サービス: Amazon EKS、Amazon VPC

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

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

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

前提条件

  • 「Docker」、 Linux、macOS または Windows にインストールし、設定されています。

  • Docker 上で実行するアプリケーション。

  • アクティブなAWS アカウント

  • Linux、macOS または Windows にインストールして設定されている「AWS Command Line Interface (AWS CLI) バージョン 2」。

  • タグ付けされたプライベートサブネットとホストアプリケーションに設定された既存の Amazon EKS クラスター。詳細については、「Amazon EKS ドキュメント」の「サブネットタギング」を参照してください。 

  • Kubectl は、Amazon EKS クラスター上のリソースにアクセスするようにインストールし、設定されています。詳細については、Amazon EKS ドキュメントの「kubectl のインストール」を参照してください。 

PrivateLink と Network Load Balancer を使用して、Amazon EKS コンテナ内のアプリケーションにアクセスします。

テクノロジースタック

  • Amazon EKS

  • AWS PrivateLink

  • Network Load Balancer

自動化とスケール

  • Kubernetes マニフェストは、Git ベースのリポジトリ (AWS など CodeCommit) で追跡および管理でき、AWS の継続的インテグレーションと継続的デリバリー (CI/CD) を使用してデプロイできます CodePipeline。 

  • AWS を使用して CloudFormation 、Infrastructure as Code (IaC) を使用してこのパターンを作成できます。

  • AWS CLI」— AWS コマンドラインインターフェイス (AWS CLI) はオープンソースツールで、コマンドラインシェルのコマンドを使用して AWS サービスと対話できます。

  • Elastic Load Balancing」— Elastic Load Balancing は、Amazon Elastic Compute Cloud (Amazon EC2)インスタンス、コンテナ、IPアドレスなど、単一または複数のアベイラビリティゾーンにある複数のターゲットに、受信するアプリケーションまたはネットワークトラフィックを分散します。

  • Amazon EKS」— Amazon Elastic Kubernetes Service (Amazon EKS) は、独自の Kubernetes コントロールプレーンやノードをインストール、運用、保守することなく、AWS 上で Kubernetes を実行するために使用できるマネージドサービスです。

  • Amazon VPC」— Amazon Virtual Private Cloud (Amazon VPC) を使用すると、定義した仮想ネットワーク内で AWS リソースを起動できます。

  • 「Kubectl」 — Kubectl は、Kubernetes クラスターに対してコマンドを実行するためのコマンドラインユーティリティです。

タスク説明必要なスキル

Kubernetes デプロイマニフェストファイルを作成します。

ご要求に応じて以下のサンプルファイルを変更して、デプロイマニフェストファイルを作成します。

apiVersion: apps/v1 kind: Deployment metadata: name: sample-app spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: public.ecr.aws/z9d2n7e1/nginx:1.19.5 ports: - name: http containerPort: 80

注:これは NGINX Docker イメージを使用してデプロイされる NGINX サンプル設定ファイルです。詳細については、「Docker ドキュメント」の「公式 NGINX Docker イメージの使用方法」を参照してください。

DevOps エンジニア

Kubernetes デプロイマニフェストファイルをデプロイします。

次のコマンドを実行し、Amazon EKS クラスターにデプロイマニフェストファイルを適用します。

kubectl apply –f <your_deployment_file_name> 

DevOps エンジニア

Kubernetes サービスマニフェストファイルを作成します。

以下のサンプルファイルをご要求に応じて変更して、サービスマニフェストファイルを作成します。

apiVersion: v1 kind: Service metadata: name: sample-service annotations: service.beta.kubernetes.io/aws-load-balancer-type: nlb service.beta.kubernetes.io/aws-load-balancer-internal: "true" spec: ports: - port: 80 targetPort: 80 protocol: TCP type: LoadBalancer selector: app: nginx

重要:内部Network Load Balancer を定義するには、必ず以下の annotations を含めてください。

service.beta.kubernetes.io/aws-load-balancer-type: nlb service.beta.kubernetes.io/aws-load-balancer-internal: "true"
DevOps エンジニア

Kubernetes サービスのマニフェストファイルをデプロイします。

次のコマンドを実行し、サービスマニフェストファイルを Amazon EKS クラスターに適用します。

kubectl apply -f <your_service_file_name>

DevOps エンジニア
タスク説明必要なスキル

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)」を参照してください。

重要: コンシューマーアカウントがアプリケーションにアクセスする必要がある場合は、コンシューマーアカウントの AWS アカウント ID を AWS PrivateLink エンドポイント設定の許可されたプリンシパルリストに追加する必要があります。詳細については、「Amazon VPC ドキュメント」の「エンドポイントサービスのアクセス権限の追加と削除」を参照してください。

クラウド管理者

VPC エンドポイントを作成します。

Amazon VPC コンソールで、[エンドポイントサービス] を選択し、[エンドポイントサービスの作成] を選択します。AWS エンドポイントの VPC PrivateLink エンドポイントを作成します。

VPC エンドポイントの完全修飾ドメイン名 (FQDN) は、AWS PrivateLink エンドポイントの FQDN を指します。これにより、DNS エンドポイントがアクセスできる VPC エンドポイントサービスへの耐障害性のあるネットワークインタフェースが作成されます。 

クラウド管理者