기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
Amazon EKS 클러스터에 g RPC기반 애플리케이션을 배포하고 Application Load Balancer로 액세스
작성자: Kirankumar Chandrashekar(AWS) 및 Huy Nguyen(AWS)
코드 리포지토리: grpc-traffic-on-alb-to-eks | 환경: PoC 또는 파일럿 | 기술: 컨테이너 및 마이크로서비스, 콘텐츠 전송, 웹 및 모바일 앱 |
워크로드: 기타 모든 워크로드 | AWS 서비스: Amazon EKS, Elastic Load Balancing(ELB) |
요약
이 패턴은 Amazon Elastic Kubernetes Service(AmazonEKS) 클러스터에서 g RPC기반 애플리케이션을 호스팅하고 Application Load Balancer를 통해 안전하게 액세스하는 방법을 설명합니다.
gRPC
이 패턴은 Amazon 의 Kubernetes 포드에서 실행되는 g RPC기반 애플리케이션을 호스팅하는 방법을 보여줍니다EKS. gRPC 클라이언트는 SSL/TLS 암호화된 연결을 사용하여 HTTP/2 프로토콜을 통해 Application Load Balancer에 연결합니다. Application Load Balancer는 Amazon EKS 포드에서 실행되는 gRPC 애플리케이션으로 트래픽을 전달합니다. Kubernetes Horizontal Pod Autoscaler 를 사용하여 트래픽에 따라 gRPC 포드 수를 자동으로 조정할 수 있습니다. Application Load Balancer 의 대상 그룹은 Amazon EKS 노드에 대한 상태 확인을 수행하고, 대상이 정상인지 평가하고, 정상 노드에만 트래픽을 전달합니다.
사전 조건 및 제한 사항
사전 조건
활성 상태의 AWS 계정.
Docker
, Linux, macOS 또는 Windows에 설치 및 구성되었습니다. Linux, macOS 또는 Windows에 설치 및 구성된AWS 명령줄 인터페이스(AWS CLI) 버전 2.
Linux, macOS 또는 Windows에 설치 및 구성된 eksctl
. kubectl
Amazon EKS 클러스터의 리소스에 액세스하도록 설치 및 구성된 . 자세한 내용은 Amazon EKS 설명서의 kubectl 설치 또는 업데이트를 참조하세요.gRPCurl
, 설치 및 구성됨. 새 Amazon 클러스터 또는 기존 Amazon EKS 클러스터입니다. 자세한 내용은 Amazon 시작하기를 참조하세요EKS.
Amazon EKS 클러스터에 액세스하도록 구성된 컴퓨터 터미널입니다. 자세한 내용은 Amazon EKS 설명서의 클러스터와 통신하도록 컴퓨터 구성을 참조하세요.
Amazon EKS 클러스터에 프로비저닝된AWS Load Balancer 컨트롤러.
유효한 SSL 또는 SSL/TLS 인증서가 있는 기존 DNS 호스트 이름입니다. AWS Certificate Manager(ACM)를 사용하거나 기존 인증서를 에 업로드하여 도메인에 대한 인증서를 얻을 수 있습니다ACM. 이러한 두 옵션에 대한 자세한 내용은 ACM 설명서의 퍼블릭 인증서 요청 및 AWS Certificate Manager로 인증서 가져오기를 참조하세요.
아키텍처
다음 다이어그램은 이 패턴으로 구현된 아키텍처를 보여줍니다.
다음 다이어그램은 Application Load Balancer 로 오프로드하는 gRPC 클라이언트에서 SSL/TLS 트래픽을 수신하는 워크플로를 보여줍니다. 트래픽은 가상 프라이빗 클라우드()에서 오기 때문에 일반 텍스트로 gRPC 서버로 전달됩니다VPC.
도구
AWS 서비스
AWS 명령줄 인터페이스(AWS CLI)는 명령줄 쉘의 명령을 통해 AWS 서비스와 상호 작용하는 데 도움이 되는 오픈 소스 도구입니다.
Elastic Load Balancing(ELB)은 들어오는 애플리케이션 또는 네트워크 트래픽을 여러 대상에 분산합니다. 예를 들어 하나 이상의 가용 영역에 있는 Amazon Elastic Compute Cloud(AmazonEC2) 인스턴스, 컨테이너 및 IP 주소 간에 트래픽을 분산할 수 있습니다.
Amazon Elastic Container Registry(Amazon ECR)는 안전하고 확장 가능하며 안정적인 관리형 컨테이너 이미지 레지스트리 서비스입니다.
Amazon Elastic Kubernetes Service(Amazon EKS)를 사용하면 자체 Kubernetes 제어 영역 또는 노드를 설치하거나 유지 관리할 필요 AWS 없이 에서 Kubernetes를 실행할 수 있습니다.
도구
eksctl
은 Amazon 에서 클러스터를 생성하기 위한 간단한 CLI 도구입니다EKS. kubectl
은 Kubernetes 클러스터에 대해 명령을 실행하기 위한 명령줄 유틸리티입니다. AWS Load Balancer 컨트롤러는 Kubernetes 클러스터의 AWS Elastic Load Balancer를 관리하는 데 도움이 됩니다.
gRPCurl
는 gRPC 서비스와 상호 작용하는 데 도움이 되는 명령줄 도구입니다.
코드 리포지토리
이 패턴의 코드는 GitHub grpc-traffic-on-alb-to-eks
에픽
작업 | 설명 | 필요한 기술 |
---|---|---|
Amazon ECR리포지토리를 생성합니다. | AWS 관리 콘솔에 로그인하고 Amazon ECR 콘솔 다음 명령을 실행AWSCLI하여 를 사용하여 Amazon ECR리포지토리를 생성할 수도 있습니다.
| 클라우드 관리자 |
Docker 이미지를 구축합니다. |
| DevOps 엔지니어 |
Docker 이미지를 Amazon 로 푸시합니다ECR. |
| DevOps 엔지니어 |
작업 | 설명 | 필요한 기술 |
---|---|---|
Kubernetes 매니페스트 파일의 값을 수정합니다. |
| DevOps 엔지니어 |
Kubernetes 매니페스트 파일을 배포합니다. | 다음
| DevOps 엔지니어 |
작업 | 설명 | 필요한 기술 |
---|---|---|
Application Load Balancer 에 FQDN 대한 를 기록합니다. Application Load Balancer |
| DevOps 엔지니어 |
작업 | 설명 | 필요한 기술 |
---|---|---|
gRPC 서버를 테스트합니다. | gRPCurl 를 사용하여 다음 명령을 실행하여 엔드포인트를 테스트합니다.
참고: | DevOps 엔지니어 |
gRPC 클라이언트를 사용하여 gRPC 서버를 테스트합니다. |
다음 코드 샘플은 클라이언트 요청에 대한 gRPC 서버의 응답을 보여줍니다.
이는 클라이언트가 서버와 통신할 수 있고 연결에 성공했음을 보여줍니다. | DevOps 엔지니어 |
작업 | 설명 | 필요한 기술 |
---|---|---|
DNS 레코드를 제거합니다. | 이전에 생성한 Application Load Balancer 를 가리키는 DNS 레코드FQDN를 제거합니다. | 클라우드 관리자 |
로드 밸런서를 제거합니다. | Amazon EC2 콘솔 | 클라우드 관리자 |
Amazon EKS 클러스터를 삭제합니다. | 를 사용하여 Amazon EKS 클러스터를 삭제
| AWS DevOps |
관련 리소스
추가 정보
샘플 인그레스 리소스:
--- apiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: alb.ingress.kubernetes.io/healthcheck-protocol: HTTP alb.ingress.kubernetes.io/ssl-redirect: "443" alb.ingress.kubernetes.io/backend-protocol-version: "GRPC" alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}, {"HTTPS":443}]' alb.ingress.kubernetes.io/scheme: internet-facing alb.ingress.kubernetes.io/target-type: ip alb.ingress.kubernetes.io/certificate-arn: arn:aws:acm:<AWS-Region>:<AccountId>:certificate/<certificate_ID> labels: app: grpcserver environment: dev name: grpcserver namespace: grpcserver spec: ingressClassName: alb rules: - host: grpc.example.com # <----- replace this as per your host name for which the SSL certtficate is available in ACM http: paths: - backend: service: name: grpcserver port: number: 9000 path: / pathType: Prefix
샘플 배포 리소스:
apiVersion: apps/v1 kind: Deployment metadata: name: grpcserver namespace: grpcserver spec: selector: matchLabels: app: grpcserver replicas: 1 template: metadata: labels: app: grpcserver spec: containers: - name: grpc-demo image: <your_aws_account_id>.dkr.ecr.us-east-1.amazonaws.com/helloworld-grpc:1.0 #<------- Change to the URI that the Docker image is pushed to imagePullPolicy: Always ports: - name: grpc-api containerPort: 9000 env: - name: POD_IP valueFrom: fieldRef: fieldPath: status.podIP restartPolicy: Always
샘플 출력:
NAME CLASS HOSTS Address PORTS AGE grpcserver <none> <DNS-HostName> <ELB-address> 80 27d