분류 전체보기
-
Amazon ECR 와 PrivateLinkCloudEngineering (AWS)/EKS 2022. 2. 12. 19:37
"우리 Onprem에 있는 Jenkins 서버에서 ECR을 접근해야 하는데 접근이 안되네요 왜 그런 거죠?" 이 고객사는 Jenkins 서버를 VPN이 연결되어 있는 Onprem에 위치해 놓았다. 그리고 외부 통신은 제한을 해 둔 것이다. 외부 통신이 제한된 환경에서 왜 ECR에 접근되지 않을까? ECR 접근 ECR에 대해 Docker 클라이언트를 인증할 때의 커맨드이다. aws ecr get-login-password --region ap-northeast-2 | docker login --username AWS --password-stdin ************.dkr.ecr.ap-northeast-2.amazonaws.com 위의 커맨드 중 ****. dkr.ecr.ap-northeast-2.am..
-
AWS EventBridge을 이용한 보안감사CloudEngineering (AWS)/Security 2022. 2. 7. 22:35
액세스 키 유출로 인해 계정이 탈취된 경험을 겪은 회사 혹은 개인이 생각보다 많을 것이다. 계정을 탈취하여 과도한 스펙을 가진 EC2를 생성하여 채굴을 한다거나 정말 악의적인 목적으로 리소스를 모두 지운 뒤 금전을 요구한다거나 하는 일이 발생하곤 한다. 과스펙의 EC2로 인한 과금은 내용 증명만 잘한다면 한 번쯤은 AWS에서 구제를 해줄 수는 있다. 하지만 리소스를 모두 지워버린다면 정말 답이 없는 상황이다. 이를 예방하기 위해 가장 중요한 것은 기본적인 보안이나 AWS Config 혹은 CloudTrail와 EventBridge를 통해 실시간으로 보안 감사를 적용할 수 있다. AWS Config AWS Config 서비스는 리전에 종속되어 주로 사용하는 리전에 개별로 적용할 때 유용하다. Config의..
-
ArgoCD로 gitOps 구현하기SRE TechNote/ArgoCD 2022. 2. 7. 01:42
쿠버네티스 환경에서 서비스를 운영하다 보면 각 서비스나 파드의 명세서(yaml)를 변경해야 하는 일이 생긴다. 하지만 다른 코드처럼 버전 관리나 문제가 생겼을 때의 롤백은 체계적으로 잡혀있지 않다. 쿠버네티스의 시스템 구성요소 또한 선언적인 코드로 정의하고 Git Repo를 통해 지속적으로 관리 및 확장이 필요하다. 이러한 개념을 gitOps라 정의하고 이를 구현하도록 도와주는 툴이 바로 ArgoCD이다. 기존 CI/CD 구성 AWS 서비스를 이용해 서비스 운영 중인 쿠버네티스 환경의 CI/CD 구성도이다. 새로운 코드가 master 브랜치에 push 될 때마다 Jenkins를 통해 Deployment가 업데이트 되는 형식이다. 하지만 이 방식은 버전 외에 다른 정보를 수정하려면 jenkins 파이프라인..
-
Cluster Autoscaler (CA)CloudEngineering (AWS)/EKS 2021. 12. 3. 11:32
AWS EKS를 사용 중에 있으니, 리소스가 부족하면 자동확장이 되는 것이 맞죠?라는 질문을 받았다. 아니다. EKS 클러스터는 클러스터 내부의 상황에 자동으로 대처해주지 않는다. 이전 글에서 노드 그룹에는 pod 수에 제한이 있다고 했다. pod 수가 초과되어 스케줄링되지 못한 상황과 클러스터에 CPU / Memory 자원이 부족하여 pending상태일 경우 이럴 때는 여분의 노드가 필요할 것이다. Cluster Autoscaler - Amazon EKS Cluster Autoscaler Kubernetes Cluster Autoscaler는 포드가 실패하거나 다른 노드로 다시 예약될 때 클러스터의 노드 수를 자동으로 조정합니다. Cluster Autoscaler는 일반적으로 클러스터에 배포로 설치됩니..
-
Deployment RollBackSystemEngineering/kubernetes 2021. 11. 29. 15:42
개요 운영을 하면서 배포 이미지에 문제가 생길 경우 빠르게 롤백해야 하는 상황이 생긴다. 롤백 방법을 자주 까먹어 정리하여 글을 쓴다. 리비전 확인 롤백 가능한 리비전을 아래 명령어로 확인 할 수 있다. $ kubectl rollout history deployment srebgk-deployment deployment.apps/srebgk-deployment REVISION CHANGE-CAUSE 63 64 65 66 67 68 69 70 71 72 73 리비전 상세정보 롤백이 필요할 때 리비전의 상세정보를 확인하여 이미지 버전 및 파드의 상세정보를 확인 가능하다. $ kubectl rollout history deploy srebgk-deployment --revision=64 설정 변경 롤백 릴리즈..
-
Nodejs + Redis 연동하기SRE TechNote/Nodejs 2021. 11. 9. 15:55
개요 redis를 사용하는 이유는 여러 가지이겠지만, 세션 저장용 혹은 데이터의 빠른 접근이 필요할 때 사용하면 아주 유용한 서비스이다. redis를 pod 혹은 서버로 띄워서 사용할 수도 있지만 운영하는데 힘이 덜 드는 완전 관리형 서비스인 AWS ElastiCache의 Redis 서비스를 사용하는 것을 추천한다. 타 서비스의 API를 호출하여 데이터를 시각화하는 플랫폼을 운영 중이다. 하지만 많은 데이터를 호출하기에는 불필요한 트래픽이 오갔고 타 서비스의 API 서버에서의 Call이 제한되어 불러오지 못하는 경우가 있었다. 이를 어떻게 해결했는지 알아보자. Redis 환경 설정 기본적으로 Redis는 VPC 위에서 구성이 되며, 각 application 혹은 관리자의 접근만을 제어하기 위해서 priv..
-
EKS 환경에서 kubeconfig 적용하기CloudEngineering (AWS)/EKS 2021. 11. 5. 21:24
개요 EKS의 사용률이 높아지면서 운영자의 입장에서는 그만큼 관리해야 할 클러스터가 많아질 것이다. EKS 기본 환경 Setting부터 여러 개의 클러스터 접근 방법에 대해 알아보려 한다. 쿠버네티스는 kubectl에 대한 인증정보를 kubeconfig라는 yaml파일에 저장한다. EKS 클러스터는 어떻게 접근을 하는지, 어떻게 인증을 받아오는지 알아보자. Kubeconfig EKS 클러스터에 접근 가능한 kubeconfig파일을 생성하는 것은 간단하다. aws command 한 줄이면 인증 정보를 kubeconfig 파일에 저장할 수 있다. aws eks --region update-kubeconfig --name EKS에 인증을 받아오는 구조는 어떤 방식일까? EKS 클러스터의 세부 정보 탭에 API..
-
PodDisruptionBudget을 이용한 Pod 재배치SystemEngineering/kubernetes 2021. 9. 7. 22:11
개요 쿠버네티스 환경을 운영하다 보면 클러스터의 노드를 변경해야 하는 순간이 온다. 이럴 때 교체 대상이 되는 노드를 drain 한다. drain은 노드 위에서 운영되고 있는 Pod를 다른 노드로 재 배치하고 Schedule을 중지시킨다는 내용이다. 하지만 drain을 무작정하게 되면 모든 파드가 동시에 재배치 되거나 헬스 체크를 통과하기 전에 다음 파드의 재배치가 시작되어 정상적인 파드가 하나도 없는 상태가 될 가능성이 있다. 이러한 현상을 예방해보자. 문제 상황 서비스되고 있는 Deployment가 드레인 상태의 노드에 스케줄링되어있을 경우 Node A 에서 drain을 하게 되면 service 1에 묶여있는 deployment는 동시에 재 배치되므로 이러한 경우에는 Node B와 Node C에 배치..