EKS 使用 AWS PrivateLink 和 Network Load Balancer 在 Amazon 上私下存取容器應用程式 - AWS 方案指引

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

EKS 使用 AWS PrivateLink 和 Network Load Balancer 在 Amazon 上私下存取容器應用程式

由 Kirankumar Chandrashekar 建立 (AWS)

環境:生產

技術:容器和微服務 DevOps;;現代化;安全性、身分、合規

工作負載:所有其他工作負載

AWS 服務:Amazon EKS;Amazon VPC

此模式說明如何在 Network Load Balancer 後方的 Amazon Elastic Kubernetes Service (AmazonEKS) 上私有託管 Docker 容器應用程式,並使用 存取應用程式AWS PrivateLink。然後,您可以使用私有網路安全地存取 Amazon Web Services (AWS) Cloud 上的服務。 

執行 Docker 應用程式的 Amazon EKS叢集在前端具有 Network Load Balancer,可以與虛擬私有雲端 (VPC) 端點建立關聯,以便透過 存取AWS PrivateLink。然後,可以使用VPCs端點與其他 VPC 共用此VPC端點服務。

此模式描述的設定是在 VPCs和 AWS帳戶之間共用應用程式存取權的安全方式。它不需要特殊的連線或路由組態,因為消費者和提供者帳戶之間的連線位於全域AWS骨幹上,而且不會周遊公有網際網路。

先決條件

  • 在 Linux、macOS 或 Windows 上安裝和設定 Docker 。 macOS

  • 在 Docker 上執行的應用程式。

  • 作用中的 AWS 帳戶。

  • 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

  • Network Load Balancer

自動化和擴展

  • Kubernetes 資訊清單可以在 Git 型儲存庫 (例如在 上AWS CodeCommit) 上追蹤和管理,並在 中使用持續整合和持續交付 (CI/CD) 部署AWS CodePipeline。 

  • 您可以使用 AWS CloudFormation 來建立此模式,方法是使用基礎設施做為程式碼 IaC)。

  • AWS CLI – AWS 命令列介面 (AWS CLI) 是一種開放原始碼工具,可讓您使用命令列 Shell 中的命令與 AWS服務互動。

  • Elastic Load Balancing – Elastic Load Balancing 會將傳入的應用程式或網路流量分散到多個目標,例如 Amazon Elastic Compute Cloud (AmazonEC2) 執行個體、容器和 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

注意:這是使用 Docker NGINX 映像部署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來定義內部 Network Load Balancer

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

記錄 Network Load Balancer 的名稱,這是建立AWS PrivateLink 端點所需的名稱。

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主控台上,選擇 Endpoint Services ,然後選擇建立 Endpoint Service 。建立VPC端點。 AWS PrivateLink

VPC 端點的完整網域名稱 (FQDN) 會指向AWS PrivateLink 端點FQDN的 。這會建立DNS端點可存取的VPC端點服務的彈性網路介面。 

雲端管理員