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

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

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

由基蘭庫瑪 ‧ 錢德拉瑟卡 (AWS) 創作

環境:生產

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

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

AWS 服務:亞馬遜 EKS; 亞馬遜 VPC

此模式描述如何在 Network Load Balancer 後面的 Amazon 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 和 AWS 帳戶之間共用應用程式存取的安全方式。它不需要特殊的連線或路由設定,因為消費者和提供者帳戶之間的連線位於全球 AWS 骨幹,不會周遊公用網際網路。

先決條件

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

  • 在 Docker 上運行的應用程序。

  • 作用中的 AWS 帳戶

  • AWS Command Line Interface (AWS CLI) 版本 2,在 Linux、macOS 或 Windows 上安裝和設定。

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

  • Kubectl,已安裝並設定為存取 Amazon EKS 叢集上的資源。如需詳細資訊,請參閱「」安裝 kubectl《Amazon EKS 文件》中的文件。 

技術堆疊

  • Amazon EKS

  • AWS PrivateLink

  • 網路負載平衡器

 

自動化和擴展

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

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

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

  • Elastic Load Balancing-Elastic Load Balancing 可在多個目標 (例如,Amazon Elastic Computer 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 是用於對 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 範例組態檔。如需詳細資訊,請參閱「」如何使用官方 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 建立關聯,這樣可讓客戶私密使用應用程式。如需詳細資訊,請參閱「」VPC 端點服務 (AWS PrivateLink)在 Amazon VPC 文件中。

重要:如果消費者帳戶需要存取應用程式,則消費者帳戶的AWS 帳戶 ID必須新增至 AWS PrivateLink 端點組態的允許主參與者清單。如需詳細資訊,請參閱「」為您的端點服務新增和移除許可在 Amazon VPC 文件中。

雲端管理員
建立 VPC 端點。

在 Amazon VPC 主控台上,選擇端點服務,然後選擇建立端點服務。為 AWS PrivateLink 終端節點建立 VPC 終端節點。

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

雲端管理員