使用 AWS PrivateLink 和 Network Load Balancer 在 Amazon EKS 上私密访问容器应用程序 - AWS Prescriptive Guidance

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 AWS PrivateLink 和 Network Load Balancer 在 Amazon EKS 上私密访问容器应用程序

由 Kirankumar Chandrashekar (AWS)创建

环境:生产

技术:容器和微服务;;现代化 DevOps;安全、身份、合规

工作负载:所有其他工作负载

Amazon Web Services:Amazon EKS;Amazon VPC

此模式描述了如何在网络负载均衡器后面的亚马逊 Elastic Kubernetes Service(Amazon EKS)上私下托管 Docker 容器应用程序,以及如何使用 AWS 访问该应用程序。 PrivateLink然后,您便可以使用专用网络安全地访问 Amazon Web Services (AWS) Cloud 上的服务。 

运行 Docker 应用程序的 Amazon EKS 集群在前端装有 Network Load Balancer,可以与虚拟私有云 (VPC) 终端节点相关联,以便通过 AWS PrivateLink 进行访问。然后,可以使用其他 VPC 的 VPC 端点来与其他 VPC 共享该 VPC 端点服务。

此模式描述的设置是在 VPC 和 Amazon Web Services account 之间共享应用程序访问权限的安全方法。它不需要特殊的连接或路由配置,因为使用者和提供商账户之间的连接位于全球 AWS 主干网上,不会遍历公共互联网。

先决条件

  • Docker,已在 Linux、macOS 或 Windows 上安装并配置。

  • 在 Docker 上运行的应用程序。

  • 一个有效的 Amazon Web Services account。

  • AWS 命令行界面(AWS CLI)版本 2,已在 Linux、macOS 或 Windows 上安装并配置。

  • 具有标记的私有子网并配置为托管应用程序的现有 Amazon EKS 集群。有关更多信息,请参阅 Amazon EKS 文档中的子网标记。 

  • Kubectl,已安装并配置为访问 Amazon EKS 集群上的资源。有关更多信息,请参阅 Amazon EKS 文档中的安装 kubectl 。 

使用 PrivateLink 和 Network Load Balancer 访问 Amazon EKS 容器中的应用程序。

技术堆栈

  • Amazon EKS

  • AWS PrivateLink

  • 网络负载均衡器

自动化和扩展

  • Kubernetes 清单可以在基于 Git 的存储库(例如,在 AWS 上)上进行跟踪和管理,也可以在 AWS 中使用持续集成和持续交付 (CI/CD CodeCommit) 进行部署。 CodePipeline 

  • 您可以使用 AWS CloudFormation 通过使用基础设施即代码 (IaC) 来创建此模式。

  • AWS CLI - AWS 命令行界面(AWS CLI)是一种开源工具,它使您能够使用命令行 Shell 中的命令与 Amazon Web Services 交互。

  • 弹性负载均衡器 在一个或多个可用区中的多个目标(如 Amazon Elastic Compute Cloud (Amazon EC2) 实例、容器和 IP 地址)之间分配传入的应用程序或网络流量。

  • Amazon EKS – Amazon Elastic Kubernetes Service (Amazon EKS) 是一项托管服务,可让您在 AWS 上轻松运行 Kubernetes,而无需安装、操作和维护您自己的 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

重要提示:请确保包含以下 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 工程师
任务描述所需技能

记录网络负载均衡器的名称。

运行以下命令来检索网络负载均衡器的名称:

kubectl get svc sample-service -o wide

记录网络负载均衡器的名称,这是创建 AWS PrivateLink 终端节点所必需的。

DevOps 工程师

创建 AWS PrivateLink 终端节点。

登录 AWS 管理控制台,打开 Amazon VPC 控制台,然后创建 AWS PrivateLink 终端节点。将此端点与网络负载均衡器相关联,这使得应用程序可供客户私下使用。有关更多信息,请参阅 Amazon VPC 文档中的 VPC 终端节点服务 (AWS PrivateLink)

重要:如果使用者账户需要访问应用程序,则必须将使用者账户的 AWS 账户 ID 添加到 AWS PrivateLink 终端节点配置的允许委托人列表中。有关更多信息,请参阅 Amazon VPC 文档中的添加和删除端点服务的权限

云管理员

创建 VPC 端点。

Amazon VPC 控制台中,选择端点服务,然后选择您的端点服务。为 AWS 终端节点创建 VPC PrivateLink 终端节点。

VPC 终端节点的完全限定域名 (FQDN) 指向 AWS PrivateLink 终端节点的 FQDN。这将创建一个 DNS 端点可以访问的 VPC 端点服务的弹性网络接口。 

云管理员