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

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

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

創建者基蘭庫馬爾錢德拉什卡 (AWS)

環境:生產

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

工作負載:所有其他工作

AWS 服務:Amazon EKS; Amazon VPC

此模式說明如何在 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 骨幹網上,而且不會周遊公用網際網路。

先決條件

  • 碼頭, 安裝和配置在 Linux 上, macOS, 或視窗.

  • 在碼頭上運行的應用程序。

  • 作用中的 AWS 帳戶

  • AWS Command Line Interface (AWS CLI) (AWS CLI) 第 2 版,已在 Linux、macOS 或視窗上安裝和設定。

  • 具有標記私有子網路且設定為託管應用程式的現有 Amazon EKS 叢集。如需詳細資訊,請參閱 Amazon EKS 文件中的子網路標記。 

  • 已安裝和設定以存取 Amazon EKS 叢集上的資源。如需詳細資訊,請參閱 Amazon EKS 文件中的安裝 kubectl。 

技術, 堆

  • Amazon EKS

  • AWS PrivateLink

  • Network Load Balancer

 

自動化和規模

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

  • 您可以使用 AWS 使用基礎設施 CloudFormation 即程式碼 (IaC) 來建立此模式。

  • AWS CLI — AWS Command Line Interface (AWS CLI) (AWS CLI) 是一種開放原始碼工具,可讓您使用命令列殼層中的命令與 AWS 服務互動。

  • E@@ lastic Load Balancing — Elastic Load Balancing 可將傳入的應用程式或網路流量分散到多個目標,例如 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 碼頭映像部署的 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 的名稱:

kubectl get svc sample-service -o wide

記錄建立 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 主控台上,選擇端點服務,然後選擇建立端點服務。為 AWS 端點建立 VPC PrivateLink 端點。

VPC 端點的完整網域名稱 (FQDN) 會指向 AWS 端點的 FQDN。 PrivateLink 這會為 DNS 端點可存取的 VPC 端點服務建立 elastic network interface。 

雲端管理員