Service & AWS LoadBalancer ControllerServicePod 집합과 같은 어블리케이션에 접근 경로나 Service Discovery 제공Pod를 외부 네트워크에 연결하고, pod로의 연결을 로드밸런싱하는 네트워크 오브젝트하나의 Microservice 단위서비스이름.네임스페이스.svc.cluster.local 이라는 FQDN 생성껍데기만 있는 추상적인 객체Kubernetes의 Pod는 Lifecycle 혹은 어떤 이유에 따라 언제든 재시작이 발생할 수 있습니다.Computing 측면에서는 이를 방지하기 위해 Deployment가 그룹으로 Pod를 정의된 숫자만큼 보장하고 있습니다.그렇다면 Computing resource 측면에서 Deployment가 이를 보장해준다면 Networ..
전체 글
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwOlUt%2FbtsMjO0bHOT%2Fg59aiHdszR1p6vFfk3FVf0%2Fimg.png)
1. 실습 환경 - VPC 2ea- EC2 1ea- EKS 1ea (Worker node 3ea) EKS를 1개의 VPC 내 여러 AZ로 분리 배치- 로드밸런서 배포를 위한 Pub/Priv 서브넷 태그 설정 operator-vpc 에 AZ1를 사용하는 Pub/Priv 서브넷 배치내부 통신을 위한 VPC Peering 배치 실습 환경 배포## Cloud Formation Script$ curl -O https://s3.ap-northeast-2.amazonaws.com/cloudformation.cloudneta.net/K8S/myeks-2week.yaml## 환경 배포$ aws cloudformation deploy --template-file ./myeks-2week.yaml --stack-name ..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHgs6Z%2FbtsMcJ4K9LL%2FWokPYDIJ2jaKwf9UgDNwr0%2Fimg.png)
선언형(멱등성) 알아보기멱등성(idempotency) : 동일한 작업을 여러 번 수행하여도 결과가 달라지지 않는 것을 의미합니다.예시)# 첫 번째 실행 - 성공k create deployment my-webs --image=gcr.io/google-samples/kubernetes-bootcamp:v1 --replicas=3# 두 번째 실행 - 에러 발생Error from server (AlreadyExists): deployments.apps "my-webs" already exists# apply를 사용한 경우k apply deployment my-webs --image=gcr.io/google-samples/kubernetes-bootcamp:v1 --replicas=3 # 정상 생성k apply ..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbsAY6f%2FbtsL9oAUrWR%2FSvCvUuxhs6nMv5GczJm0qk%2Fimg.webp)
EKS Cluster Endpoint AccessEKS 환경에서 컨트롤 플레인 영역은 AWS 관리형 서비스로 동작합니다.이에 따라 쿠버네티스 API 서버의 접근에 대한 방법으로 Endpoint Access를 3가지 형태로 정의하고 있습니다.[출처: ongja blog]Endpoint Access 설정설명보안 수준Public Access인터넷에서 접근 가능 (IP 제한 가능)낮음Private AccessVPC 내부에서만 접근 가능높음Public + Private (혼합)VPC 내부 + 특정 Public IP에서 접근 가능중간 1. Public Cluster Endpoint Access인터넷을 통해 모든 IP 또는 IP 제한을 하지 않을 경우 보안에 취약kubectl을 사용하여 aws 외부에서 EKS 클러스..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKIjWA%2FbtsL9pydZFe%2F0yHmoPdelzKFxKzfYwmqM0%2Fimg.png)
EKS 배포 방법[VPC 생성 과정은 제외합니다.] 1. AWS 웹 콘솔을 통한 생성AWS EKS 메뉴 클릭 > 클러스터 생성 클릭사용자 지정 구성 > EKS 자율 모드 사용 Disable (Auto mode)Cluster 이름 작성 > Kubernetes 버전 지정 클러스터 액세스 방식 선택ARC 영역 전환 비활성화ARC 영역 전환은 크게 두가지로 나뉜다. 영역 이동(zonal shift) – 문제가 발생한 AZ에서 트래픽을 Healthy한 AZ로 신속하게 전환하여 문제를 임시로 해결자동 영역 이동(zonal autoshift) – 연습 실행을 통해 미리 AZ 장애 시의 복구 상태를 점검하고 AWS가 복구 작업을 자동으로 처리할 수 있도록 설정네트워킹 지정 (클러스터 엔드포인트 액세스는 Public으로..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOKq3D%2FbtsL8lQxRWZ%2FSzz5HxMKInyYGWf9fK9eU0%2Fimg.png)
EKS에 대하여EKS는 AWS에서 신청 가능한 Kubernetes 관리형 서비스입니다.AWS EKS를 신청하면 컨트롤 플레인과 노드를 설치하고 유지 보수하는 이유가 사라집니다. EKS는 여러 가용 영역에서 kubernetes 컨트롤 플레인 인스턴스를 실행하여 고가용성을 보장하며,컨트롤 플레인의 이상 여부를 감지하여 자동으로 교체합니다. 또, 지속적으로 Kubernetes 버전 업데이트에 맞춰 EKS 역시 릴리즈 업데이트가 되고 있어,버전 업데이트도 콘솔 및 CLI 상에서 유저가 편리하게 수행할 수 있습니다. 일반적으로 4개의 Standard Version 지원하며, Extended Version으로 Old 버전 5개를 지원합니다. (25.02.05 기준)Extended Version의 클러스터를 사용할 ..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcEVGhY%2FbtsLZvtSBT9%2FcakjtsYZyeV4QHz7MJSgnk%2Fimg.png)
아키텍처NCP 환경Bastion VM : 1EANKS Cluster : Control Plane 1EA, NodePool 1EANat Gateway : 1EA## 디렉토리 tree├── bastion.tf├── data.tf├── nks.tf├── output.tf├── security.tf├── terraform.tfvars├── user_data.sh├── variables.tf├── version.tf└── vpc.tf## terraform.tfvarsvpc_name = "my-vpc"vpc_cidr = "10.10.0.0/16"subnet = [ "10.10.1.0/24", "10.10.10.0/24", "10.10.30.0/24" , "10.10.35.0/24", "10.10.50.0/24" ]..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fnlez3%2FbtsLrxL17iy%2Fww9XfTRQRPcw4kN6dh44UK%2Fimg.png)
실습환경 Jenkins, gogs 컨테이너 생성# 작업 디렉토리 생성 후 이동mkdir cicd-labscd cicd-labs# cat docker-compose.yamlservices: jenkins: container_name: jenkins image: jenkins/jenkins restart: unless-stopped networks: - cicd-network ports: - "8080:8080" - "50000:50000" volumes: - /var/run/docker.sock:/var/run/docker.sock - jenkins_home:/var/jenkins_home gogs: container_..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcnaw9w%2FbtsLiNO4ZS3%2FJOwYMrfHjCvXkB1mU2V8m0%2Fimg.png)
GitHub ActionsGitHub Actions를 사용하여 레포지토리에서 바로 소프트웨어 개발 워크플로를 자동화, 사영자 지정 및 실행합니다.CI/CD를 포함하여 하는 작업을 수행하기 위한 작업을 검색, 생성 및 공유하고 완전히 사용자 정의된 워크플로에서 작업을 결합할 수 있습니다. [GitHub Action] - CI/CD를 포함하여 원하는 작업을 수행하기 위한 작업을 검색, 생성 및 공유하고 완전히 사용자 정의된 워크플로에서 작업을 결합할 수 있습니다. 실습 환경CSP : AWSSpec : t3.smallVM : EC2 1eaOS : Ubuntu 22.04 Python 코드 실행from http.server import ThreadingHTTPServer, BaseHTTPRequestHand..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoK5Cb%2FbtsLaHgQ4X7%2Ffl1FyavXnGAlUPhQKKBO01%2Fimg.png)
CI/CDCI/CD는 Continuous Integration(지속적 통합)과 Continuous Deployment(지속적 배포)의 약자입니다.CI는 개발자들이 코드 변경사항을 메인 저장소에 병합하고 자동으로 테스트하는 과정을 의미하고,CD는 검증된 코드를 자동으로 개발/검증/운영 환경에 배포하는 괒어을 말합니다. 이를 통해 소프트웨어 개발의 속도와 품질을 높일 수 있습니다.특히 CI/CD는 MSA 환경에서 없어서는 안되는 하나의 프로세스로 현재 클라우드 기술에 애용되고 있습니다. CI / CD에는 여러 툴들이 존재하지만 이번 글에서는 Docker에 Jenkins와 Gogs로 테스트하도록 하겠습니다. Docker 맛보기1) 소스를 배포하기 위해 간단한 Python 파일을 만들고, Docker Imag..