인프라

인프라/자동화

Terraform으로 EKS 환경 배포하기

Terraform은 IaC(Infra as a Code)도구입니다. EKS를 학습하던 중 계속 VPC부터 새로 만드는 것이 번거로워, Terraform을 이용해서 EKS 환경을 구성, 배포해보겠습니다. Template 구성하기 먼저 EKS와 Control Host가 올라갈 VPC를 구성합니다. resource "aws_vpc" "practice-vpc" { cidr_block = "10.0.0.0/16" enable_dns_hostnames = true enable_dns_support = true instance_tenancy = "default" tags = { Name = "practice-vpc" } } resource "aws_subnet" "public-a" { vpc_id = aws_vpc...

인프라/컨테이너

Kubernetes Scheme와 Codec

Scheme 쿠버네티스에서 스킴은 쿠버네티스 GVK(Group, Version, Kind)로 구분되는 API 객체를 직렬화하고 역직렬화합니다. 예를 들어 apps Group의, v1 Version, Deployment kind를 가지고 있는 객체는 아래와 같습니다. apiVersion: apps/v1 kind: Deployment Kubernetes에서 새 스키마를 생성하고 반환하는 NewScheme 코드입니다. func NewScheme() *Scheme { s := &Scheme{ gvkToType: map[schema.GroupVersionKind]reflect.Type{}, typeToGVK: map[reflect.Type][]schema.GroupVersionKind{}, unversionedT..

인프라/리눅스

Linux TTY(TeleTYpewritere)

TTY의 유래 TTY(TeleTYpewriter)는 초기 컴퓨터에 사용한 입력 기기입니다. 기존 컴퓨터는 천공 카드를 이용해 입력을 받았는데요. 그러던 중 이러한 전신타자기(TTY)가 등장하고, 이 TTY로 컴퓨터에 접근하기 시작했습니다. 그 용어는 지금까지 사용되어 지금까지도 Linux에서 터미널을 지정하는 용어입니다. TTY TTY는 콘솔 또는 터미널 디바이스를 의미합니다. 보통 콘솔은 컴퓨터에 직접적으로 연결된 입출력장치로 CLI를 통해 명령어를 전달할 수 있는 인터페이스를 말합니다. 보통 1~6번까지 존재하며, ctrl + alt 1~6으로 전환할 수 있습니다. X-Windows 환경은 컴퓨터를 부팅시키면서 직접 접속되기 때문에 콘솔이라고 생각할 수 있지만, 사실 서버-클라이언트 구조를 가지고 있..

인프라/보안

Access Control(접근 제어) 방식 - RBAC, ABAC, MAC

RBAC(Role-Based Access Control) RBAC은 사용자(접근자) 혹은 그룹의 역할을 따라 시스템의 리소스에 대한 접근 권한을 부여하는 접근 제어 방법입니다. 그 이름과 같이 사용자의 Role을 기반으로 권한을 부여하는데요, RBAC을 사용하는 쿠버네티스로 예를 들어보자면, Fargate on EKS환경의 제 클러스터에서는 아래와 같은 역할(role)들이 있습니다. kubectl get role -n kube-system NAME CREATED AT eks-vpc-resource-controller-role 2023-03-11T00:29:33Z eks:addon-manager 2023-03-11T00:29:30Z eks:authenticator 2023-03-11T00:29:27Z ek..

인프라/리눅스

Manjaro Linux default terminal에 alias 적용하기

Overview 개인 노트북의 메인 OS를 Gnome가 적용되어 있는 Manjaro Linux로 바꾸고, 기본 터미널에 vi -> vim alias설정이 되어있지 않았습니다. 평소 vi 명령어를 통해 vim에디터를 사용하였기 때문에, 설정을 바꿔보도록 하겠습니다. Alias 적용하기 manjaro linux의 터미널은 non-login shell입니다. Manjaro linux의 Gnome GUI에서 제공하는 터미널은 보통 로그인 없이 실행하는 non-login shell로 zsh를 사용합니다. Login Shell에서는 아래와 같은 파일들을 읽습니다. /etc/profile ~/.bash_profile ~/.bashrc /etc/bashrc manjaro linux의 default terminal인 z..

인프라/컨테이너

도커 네트워킹 (Docker Networking) - [4] overlay network

Overlay Network 오버레이 네트워크는 물리적 네트워크 위에 존재하는 가상의 네트워크로, 다른 네트워크들을 연결하는 논리적 네트워크입니다. 도커에서는 여러 도커 데몬간의 오버레이 네트워크를 구축하여 도커 스웜과 같은 컨테이너 오케스트레이션 툴을 이용하기도 합니다. Docker Daemon 도커는 기본적으로 Server - Client 구조입니다. 서버 역할을 하는 도커 데몬에 사용자가 도커 cli로 데몬에 요청을 보냅니다. 그러면 도커 호스트에서 해당 동작을 수행하게 되는 것입니다. 그래서 docker 명령어에 -H ${host address}와 같은 옵션으로 호스트를 지정해주면 원격으로 도커 명령어를 수행할 수 있게 됩니다. 데모 처음부터 진행하기에는 꽤나 길어질 내용이라 구성된 인프라로 테스..

인프라/컨테이너

도커 네트워킹 (Docker Networking) - [3] host networking & userland-proxy

Host Networking host networking을 사용할 경우 컨테이너가 도커 호스트의 네트워크를 사용하게 됩니다. 격리되지 않은 네트워크(도커 호스트의 네트워킹 네임스페이스를 사용함)기 때문에 컨테이너에 따로 ip 주소가 붙지는 않습니다. 때문에 NAT(network address translation)을 거치지 않고 사용할 수 있으며, 포트마다 userland-proxy가 생성되지 않습니다. $ docker run --network host --rm -d --name nginx -p 80:80 nginx tail -f /dev/null WARNING: Published ports are discarded when using host network mode d806a666142f93ede292..

인프라/컨테이너

도커 네트워킹 (Docker Networking) - [2] Bridge network

Default Bridge Network Network bridge는 link layer로 대표적인 link layer로는 NIC(Network Interface Card)가 있습니다. 실제로 전 글에서 ifconfig로 Docker default network를 조회하였을 때 NIC와 같이 조회되는 모습을 확인할 수 있습니다. 먼저 아래와 같이 alpine 컨테이너 두 개를 만들어줍니다. $ docker run -d --name alpine1 alpine:latest tail -f /dev/null 3d8cd78a27f8aa1703ed78e8592bd074e2aea487141c8b1eec878d92c3217a3a $ docker run -d --name alpine2 alpine:latest tail ..

인프라/컨테이너

도커 네트워킹 (Docker Networking) - [1] Network Driver & iptables

Network Driver Docker를 설치한 후 Docker host의 Network interface를 확인해보면 아래와 같이 docker0이란 interface가 생성되어 있습니다. $ ifconfig docker0: flags=4099 mtu 1500 inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255 ether 02:42:6c:89:b0:94 txqueuelen 0 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 c..

인프라/리눅스

Amazon linux 2에서 swap 생성하기

swap이란? swap이란 간단히 메모리가 부족할 때 디스크의 공간으로 램의 역할을 대신할 수 있게 해주는 것입니다. 아마존 리눅스에서는 dd를 통해 swap file을 생성하고 이를 swap area에 넣어줍니다. 이제 swap을 생성해보겠습니다. swap 생성하기 1. swap file 만들기 $ sudo dd if=/dev/zero of=/swapfile bs=128M count=32 2. 권한 주기 $ sudo chmod 600 /root/swapfile 3. swap area 설정하기 $ sudo mkswap /root/swapfile 4. swafile을 swap area에 추가하기 $ sudo swapon /swapfile 5. 확인해보기 $ free total used free shared..

인프라/리눅스

Amazon linux 2 에서 htop 사용하기

htop은 리눅스 서버/VM을 실시간 (기본적으로 1초마다 갱신)으로 모니터링할 수 있는 툴입니다. f1 - f10까지 있는 다양한 기능으로 효율적인 관리를 가능하게 합니다. f1/help : htop에서 표시해주는 지표의 의미등을 알 수 있습니다 f2/Setup : htop을 설정할 수 있습니다 f3/Search : 원하는 프로세스를 검색할 수 있습니다 f4/Filter : 프로세스를 필터링합니다 f5/Tree : tree 구조로 보여줍니다 f6/Sortby : 원하는 값으로 정렬합니다 f7/Nice - : nice값 (process 우선순위)를 높입니다 f8/Nice + : nice값 (process 우선순위)를 낮춥니다 f9/Kill : process에 signal을 보낼 수 있습니다. ( 대표적으..

인프라/컨테이너

도커란?

시작하기 전 저는 도커에 입문할 때, 어려운 용어와 개념들 때문에 입문하기 아주 힘들었던 기억이 납니다. 만약 여러 글을 보면서 이해가 가지 않는다면, 일단 실습 예제라도 하나 따라 해 보면 이해해 아주 큰 도움이 될 것 같습니다. ( 저는 그렇게 이해하기 시작했습니다. ) 도커란 무엇일까 Docker, 즉 도커란 간단히 말해 리눅스 컨테이너를 만들고, 사용할 수 있는 컨테이너화 기술입니다. 만약 컨테이너를 잘 모르겠다면 링크로 들어가 컨테이너의 대한 글을 보길 바랍니다. 도커는 Cgroups등 여러 커널의 기능으로 프로세스를 분리하는데, 이 분리된 프로세스를 도커 컨테이너라고 합니다. 도커 컨테이너는 이미지를 통해 실행되는데 이 이미지는 도커 컨테이너가 실행되기 위한 종속성을 모두 가지고 있으며, 다시..