
지난 글에서는 Action Controller Runner (이하 ARC) 를 사용할 때 AWS EFS 를 마운트해서 특정 경로에 build 에 필요한 데이터를 캐싱했습니다. 근데 만약 AWS EFS 와 같은 데이터를 저장할 수 있는 스토리지가 없다면 어떨까요? 다행히 충분히 좋은 대책안이 있습니다. 바로 Github Action 에서 제공해주는 Action Cache 이라는 녀석입니다. Github Action 을 사용한다면 아마 이미 다들 잘 아실 수도 있겠군요. Action Cache 는 좋아요 3.7k 를 받을 만큼 많은 사랑?을 받고 있는 액션 중의 하나입니다. 도큐먼트를 보면 꽤 자세하게 설명이 되어있습니다. 예제 코드도 존재하며, 각 필요한 with 에 대해서도 친절하게 설명해주고 있습니다...

Istio (이하 이스티오) 는 쿠버네티스의 대표적인 서비스 메쉬 소스입니다. 뿐만 아니라 이스티오는 인그레스 컨트롤러도 제공해주기 때문에 Nginx 와 같은 별도의 인그레스 컨트롤러가 필요 없어요. 이번 글에서 Istio 의 핵심 자원인 IngressGateway 에 TLS 를 적용시켜 보고자 합니다! Istio 를 설명하는 글이 아니기 때문에 Gateway, VirtualService 와 같은 리소스에 대한 설명은 하지 않겠습니다. 그럼 렛츠두더코드~ 실습 환경은 아래와 같아요. 쿠버네티스 v1.26.2 이스티오 v1.17.2 공식 문서에 나와있는 예제는 불필요한 내용이 많아서 딱 필요한 부분만 실습하려고 합니다. 만약 더 자세한 정보가 궁금하다면 여기를 참고해주세요. TLS 를 적용 할 것이기 때문..

Karpenter 의 개념을 알고 싶다면 여기 참고! Karpenter 를 파면 팔수록 정말 유용한 오픈소스인거 같아요. ASG 를 넘어서 훨씬 효율적이고 유동적으로 노드와 파드를 관리할 수 있게 해주거든요. 스케줄링 시스템을 개발하고 있는데, Karpenter 가 없었다면 많이 힘들었을 겁니다... 이번 글에서는 Karpenter 의 Deprovisioning 에 대해 알아보려고 합니다. 가장 핵심이라고 볼 수 있죠. Deprovisioning 관련 옵션은 크게 2가지로 나눌 수 있어요. - ttlSecondsAfterEmpty 와 ttlSecondsUntilExpired - consolidation 이 옵션들은 사용하면 각각 어떻게 동작하는 지 한번 바로 알아보도록 하죠. 렛츠두더코드~ ttlSeco..

쿠버네티스에서 민감한 데이터는 시크릿을 통해 관리됩니다. 생성된 시크릿은 mount fs 또는 env var 을 통해서 파드에 시크릿 데이터를 넘겨줄 수 있죠. 시크릿을 생성한 후, kubectl create secret generic secret1 --from-literal user=admin kubectl create secret generic secret2 --from-literal user=12345678 아래와 같이 yaml 을 작성해서 사용할 수 있죠. apiVersion: v1 kind: Pod metadata: creationTimestamp: null labels: run: pod name: pod spec: containers: - image: nginx name: pod resourc..

쿠버네티스에서 실행 중인 파드의 내용을 수정하려면 kubectl exec -it pod -- ... 를 통해 수정합니다. 만약 nginx 를 실행 중인 파드가 있고, nginx 의 index.html 을 수정하고 싶다면, 아래와 같이 진행을 할 것입니다. # pod 라는 이름을 가진 파드를 nginx 이미지를 이용해서 생성 kubectl run pod --image nginx # bash 를 통해 컨테이너 내부 접속 kubectl exec -it pod -- bash # index.html 을 검색 find ./ -type f -iname "*.html" # 위치를 찾은 후 vim 을 통해 수정 vim ./usr/share/nginx/html/index.html index.html 에 I'm kingbj..

쿠버네티스에서는 환경 변수나 새롭게 작성한 파일을 컨테이너 내부에 전달해주기 위해서 Configmap, Secret 을 사용합니다. 이름에서 유추할 수 있듯 Configmap 은 보안적으로 중요치 않은 데이터들을 사용할 때, Secret 은 보안적으로 중요한 데이터를 사용할 때 사용합니다. 따라서 Configmap 은 Plain Text 로 데이터가 저장되는 반면, Secret 은 인코딩 되어 저장됩니다. 그래서 이번 글에서는 Secret 을 생성 후 어떻게 파드에게 전달하는 지를 알아보려고 합니다. 여담으로 Secret 의 인코딩 되는 방법은 사실 디코딩 하면 어떤 값인지 알 수 있기 때문에 보안적으로 안전하지는 않습니다. 쿠버네티스는 이렇게 굳이 Secret 의 값을 인코딩해서 저장하는 이유는 해커에..

EC2 인스턴스에는 보안 그룹을 설정하여 특정 트래픽만 인바운드, 아웃바운드를 허용할 수 있습니다. 인바운드 규칙과 아웃바운드 규칙은 아래와 같이 정의할 수 있죠. 그 중 소스 규칙을 한번 자세히 보죠. (아웃바운드에선 대상 규칙에 해당) CIDR 블록 같은 경우, 보안 그룹이 설정된 인스턴스에 인바운드로 트래픽이 올 때 소스 규칙에 명시된 CIDR 가 만족 되지 않으면 Deny 됩니다. 몇가지 예시를 살펴보죠. 0.0.0.0/0 으로 규칙을 정하면 모든 IP 로부터 들어오는 트래픽은 Allow 198.162.0.1/16 으로 규칙을 정하면 198.162.xx.xx 로부터 들어오는 트래픽은 Allow 118.220.38.110/32 으로 규칙을 정하면 118.220.38.110 로부터 들어오는 트래픽만 ..

쿠버네티스 보안 관련 모범 사례를 살펴보면 아마 가장 기본적이고, 가장 많이 보이는 것이 하나 있습니다. 아마 쿠버네티스 뿐만 아니라 컨테이너를 사용하는 환경이라면 모두가 신경써야 하는 부분이죠. 바로 루트 계정 비활성화 입니다. 즉, 컨테이너 내 프로세스에서 루트 권한을 모두 비활성화 하는 것이죠. 컨테이너 내부에서 아무나 루트 권한을 사용하게 한다는 것은 모르는 사람에게 집 비밀번호를 알려주는 것과 다름이 없습니다. 예를 들어 컨테이너에 접속한 후 uname -a 명령어를 쳐보면 호스트의 OS 버전을 볼 수 있습니다. 루트 권한 비활성화는 이미지를 만들 때도 설정할 수 있고, k8s 로 파드를 배포할 때도 설정할 수 있습니다. 이번 글에서는 어떻게 루트 계정을 비활성화하고 안전한 파드를 만드는지 알아..

지난 나작소쿠에서는 [나작소쿠] 영토 짓기 feat. 미니 PC 조립을 진행했고, 이번 글에서는 Proxmox 와 Kubernetes 를 설치하려고 합니다. 그럼 바로 Proxmox 를 설치해줍시다. Proxmox 설치 Proxmox 는 Window 와 IOS 처럼 OS 의 한 종류입니다. 차이점이라면 Proxmox 는 가상 머신과 친화적인 환경을 제공해줍니다. Proxmox 에 대해 궁금하다면 여기를 참고해주세요. 우선 Proxmox 를 여기서 다운받습니다. 이후 Rufus 를 이용해서 다운받은 ISO 를 dd 모드로 USB 에 구워줍니다. 그런 다음 USB 를 미니 PC 에 꼽으면 아래와 같은 화면이 나타납니다. 크게 특별한 부분은 없습니다. ubuntu 설치하듯 설치해주시면 됩니다. 설치가 완료되면..

쿠버네티스에는 Audit 이라는 기능이 있습니다. 다들 눈치 채셨겠지만, Kube Api Server 에 어떤 API 를 호출했는지 감시하는 기능이죠. 쿠버네티스를 설치하면 기본적으로 제공 되지 않기 때문에 추가적으로 Audit 기능을 활성화 해주어야 합니다. 그래서 이번 글에서는 Audit 기능을 활성화해서 누가, 어떤 행위로, 어떤 리소스를 호출 했는지 감시해보겠습니다! 렛츠두더코드! Audit 기능 활성화 control plane & data plane v1.26.1 에서 진행되었습니다 쿠버네티스 공식 문서를 이동한 후 Audit 을 검색해줍니다. 그리고 클릭해서 문서를 확인합니다. 밑으로 쭉쭉 내려서 로그 백엔드 섹션으로 이동합니다. /etc/kubernetes/manifests/kube-apis..

CKA 에 이어 CKS 도 취득에 성공했습니다. CKS 는 쿠버네티스 관련 자격증 중 가장 높은 레벨의 자격증입니다. 따라서 난이도도 꽤 있던 편이였습니다. CKA 같은 경우에는 문제를 푸는데 있어서 30분도 안걸렸는데 CKS 같은 경우는 2시간을 다 쓰고도 총 16문제 중 2문제를 못풀었어요.. 시험 자체가 영어로 진행되고, 아무래도 verification 부분에서 꽤나 시간을 많이 쏟아야 했습니다. 해석하자면 이렇습니다. 이 자격증을 취득한 사람은 숙련된 Kubernetes 실무자입니다(CKA 자격증 보유로 입증됨). 자격 취득자는 빌드, 배포 및 런타임 동안 컨테이너 기반 애플리케이션과 Kubernetes 플랫폼을 보호하는 데 필요한 능력을 입증했으며, 전문적인 환경에서 이러한 작업을 수행할 수 있..

AWS EKS 를 통해 클러스터를 구축하면 Data Plane (이하 Node) 를 다양한 방식으로 구축할 수 있습니다. Managed Node Group, Fargate 그리고 이러한 리소스를 유연하게 관리할 수 있게 해주는 AWS Auto Scaling, Karpenter 가 있습니다. 이번 글에서는 Karpenter 를 통해 AWS Auto Scaling 보다 유연하게 Node 를 관리하는 방법을 알아보고자 합니다. 우선 간단하게 알아보도록 하죠. 렛츠두더코드! Karpenter 가 뭐죠? 여기서 말하는 노드 == 인스턴스 == 서버 는 모두 같은 개념입니다. Karpenter 를 알아보기 전에 AWS Auto Scaling 에 대해 먼저 알아보죠. AWS Auto Scaling 은 Auto Sc..

파이썬에는 정말 유용한 함수가 많습니다. 그 중 Counter 는 제가 생각하기에 가장 유용한 함수 중에 하나라고 생각합니다. 이번 글에서는 Collections 모듈 중 하나인 Counter 함수에 대해서 알아보고 2019 카카오 겨울 인턴쉽 튜플 에 바로 적용해보겠습니다. 그럼 렛츠두더코드! Collections 의 Counter() Counter 는 리스트나 문자열의 갯수를 dict 타입으로 반환해주는 함수입니다. 말로 백번 설명하는 것보다 한번의 예제가 보는 것이 더 좋겠죠? Counter(["I", "am", "Iron", "man", "!", "!"]) # Counter({'!': 2, 'I': 1, 'am': 1, 'Iron': 1, 'man': 1}) Counter(["I", "am", "..

누구나 한번 쯤은 슈뢰딩거의 고양이에 대해서 들었거나 관련 밈을 보셨을 겁니다. 그래도 혹시 모르시는 분들을 위해 간단히 알려드리죠. 고양이를 보이지 않는 상자에 넣고, 그 속에 50:50 확률로 고양이를 죽이는 독극물을 넣었을 때 고양이는 죽을까요? 살까요? 일반 세계에서는 죽었다, 살았다 라고 표현하지만 양자역학 세계에서는 이를 죽음과 삶이 중첩된 상태라고 표현합니다. 즉, 살아있으면서 죽어있다 라고 합니다. 오늘 글에서 소개할 Fargate (파게이트) 또한 슈뢰딩거의 고양이와 비슷한 개념입니다. (나만 그렇게 생각할수도..) Fargate 는 무엇일까? 우리는 보통 AWS 를 이용해서 애플리케이션을 배포한다고 하면 EC2 를 통해 인스턴스를 생성하고, 그 인스턴스 내부에 컨테이너나 직접 프로세스로..

파이썬에서 문자열을 처리하는 방법은 여러가지가 있죠. 그 중 정규표현식을 이용하면 좀 더 다양하고 쉽게 처리를 할 수 있습니다. 그래서 이번 글에서는 파이썬에서 유용한 모듈 중 정규식을 처리해주는 re 모듈을 이용해서 문자열을 처리하는 방법에 대해 알아보려고 합니다. 그리고 가장 마지막엔 배운걸 토대로 카카오 문제인 [3차] 파일명 정렬에 적용해보려고 합니다. 그럼 렛츠두더코드! re 모듈의 함수들 re 모듈에는 다양한 함수들이 존재합니다. 그 중 알고리즘 풀이에 유용할 것 같은 함수들에 대해 알아보겠습니다. search match fullmatch findall finditer sub subn split search() 문자열에서 패턴이 일치하는 지 확인합니다. print(re.search("A", "..