본문 바로가기
728x90

DevOps38

Encryption at Rest (쿠버네티스 데이터 암호화) 쿠버네티스에서 etcd에 저장되는 모든 API 리소스들은 암호화 기능을 지원한다. 기본적으로는 etcd로 저장될 때는 평문으로 저장되지만 특정 리소스에 대해서 암호화하여 저장하도록 설정할 수 있다. 암호화 하지 않았을 때는 다음과 같이 etcd에 평문으로 저장된다. # middleware 네임스페이스의 mysql 시크릿 조회 $ sudo ETCDCTL_API=3 etcdctl --endpoints=https://localhost:2379 \ --cert=/etc/kubernetes/pki/etcd/server.crt \ --key=/etc/kubernetes/pki/etcd/server.key \ --cacert=/etc/kubernetes/pki/etcd/ca.crt \ get /registry/sec.. 2023. 8. 27.
[11] 쿠버네티스 ConfigMap & Secret 보통 애플리케이션을 배포하면 하나의 환경에서만 배포하는 것이 아니라 여러 환경에서 배포를 하게 될 수도 있다. 그러면 환경마다 달라지는 것들이 있는데, 이런 것들을 보통 환경변수나 설정 파일 등으로 관리한다. 쿠버네티스에서는 이런 환경변수나 설정 파일 등을 저장하는 용도로 ConfigMap과 Secret을 제공해준다. ConfigMap ConfigMap은 Key-value 쌍의 형태로 데이터를 저장하는 데 사용하는 쿠버네티스 오브젝트이다. 보통 ConfigMap에 저장된 값을 파드에서 사용하는데, 파드의 환경변수에 ConfigMap의 값을 바인딩하거나 ConfigMap으로 파드 볼륨을 생성하여 볼륨 마운팅을 통해 파드 내부에서 파일의 형태로 ConfigMap을 사용할수도 있다. 선언 및 생성 Config.. 2023. 8. 27.
[2] 쿠버네티스 클러스터 설치 쿠버네티스 클러스터 설치 쿠버네티스 클러스터는 물리머신이나 가상머신에 모두 설치할 수 있다. 설치 방법은 여러가지가 있는데 minikube, kubeadm, k3s, microk8s 등이 있지만 minikube와 쿠버네티스 공식 홈페이지에 있는 kubeadm에 대한 설치만 다룰 것이다. minikube도 공식 홈페이지에서 지원하지만, 공식 홈페이지에 튜토리얼로 완전 잘 나와있다. 그리고 minikube는 로컬 머신에 VM을 만들고 하나의 노드로 구성된 간단한 클러스터를 생성한다. 하나의 노드로만 구성되어있어서 쿠버네티스에 대해 간단히 알아보는 정도?로만 가능할 것 같고 제약사항도 분명 있을거로 보인다. (지극히 개인적인 생각..) 그래서 여러 노드를 구성할 수 있는 kubeadm을 다뤄볼 것이다. min.. 2023. 2. 25.
[10] 쿠버네티스 Ingress 쿠버네티스에서 파드를 외부로 노출시키기 위해서 서비스를 사용하였다. 만약에 쿠버네티스 클러스터 내의 여러 애플리케이션을 외부로 노출시켜야 한다고 가정하자. 그러면 우리는 배운대로 애플리케이션을 디플로이먼트로 띄우고, 서비스를 통해 외부로 노출시킬 것이다. 운영 환경에서는 아래 그림과 같이 서비스를 LoadBalancer 타입으로 노출시킬 것이다. 하지만 이런 방식을 사용할 경우 애플리케이션 종류별로 로드밸런서를 구축해야 한다는 단점이 있다. 간단한 서비스의 경우, 비용적인 측면에서 효율적이지 못할 수도 있다. Ingress 다행히도 쿠버네티스에서는 이러한 측면을 보완해주는 쿠버네티스 오브젝트를 제공해주는데 그것이 바로 Ingress이다. Ingress는 간단히 말하면 Host, Path기반으로 애플리케이.. 2022. 7. 21.
쿠버네티스 Static Pods 쿠버네티스의 컨트롤 플레인 노드에 있는 kube-scheduler 는 파드가 생성되면 파드를 적절한 노드로 스케줄링한다. 하지만 kube-scheduler가 없다면(장애가 난다면), 또는 kube-apiserver가 없다면 파드를 생성하거나 스케줄링을 할 수 없다. 하지만 kube-scheduler, kube-apiserver 의 도움 없이 파드를 배포할 수도 있다. 실제로 파드를 직접 배포하는 컴포넌트는 각 노드에서 구동 중인 kubelet이기 때문이다. (사실은 kube-apiserver가 kubelet 에게 파드가 생성되었으니 파드를 배포시키라고 지시한다.) kube-apiserver 가 시키지 않고도 kubelet 이 스스로 파드를 배포하게 만들 수 있다. 노드의 /etc/kubernetes/ma.. 2022. 7. 16.
7. 도커 컨테이너 로그와 자원 할당 제한 로그 도커 컨테이너로 애플리케이션을 실행할 때, 실행 중인 컨테이너의 로그를 봐야 할 때가 있다. 도커에서는 컨테이너의 stdout, stderr 로그를 별도의 메타데이터 파일로 저장하여 이를 확인하는 명령어를 제공한다. $ docker logs ${container-name} $ docker logs --tail 10 ${container-name} $ docker logs -f ${container-name} 로그가 너무 많다면 tail 옵션을 통해 마지막 로그 줄부터 읽을 수 있다. -f 옵션을 통해 로그를 실시간으로 조회할 수 있다. 그러면 실제로 컨테이너의 로그는 어디에 저장될까? 컨테이너 로그는 JSON 형태로 도커 내부에 저장된다. 이 파일은 다음 경로로 저장된다. /var/lib/docke.. 2022. 5. 17.
6. Dockerfile 컨테이너 이미지를 만들기 위해서는 (1). Ubuntu 등 아무것도 설치되지 않은 Base Image로 컨테이너를 생성하고 (2). 해당 컨테이너에 애플리케이션을 설치한 후 (3). 애플리케이션을 설치한 컨테이너를 커밋하여 새로운 이미지를 생성하는 작업을 거친다. 이렇게 이미지를 만드는 것은 과정이 복잡하고 수동적이다. 다행히도 도커에서는 위와 같은 일련의 과정들을 쉽게 정의하고 수행할 수 있는 빌드 명령어를 제공한다. Dockerfile 이라는 파일에 이미지를 생성하기 위해 필요한 것들 (컨테이너에 설치해야 하는 패키지, 추가 소스코드, 명령어, 쉘 스크립트 등..) 을 기록하면 도커는 이 파일을 읽어 컨테이너에서 작업을 수행한 뒤 이미지를 생성한다. Dockerfile을 사용하면 직접 컨테이너를 생성.. 2022. 5. 14.
5. Docker Image 모든 도커 컨테이너는 도커 이미지로부터 생성된다. 그래서 도커를 사용하고 관리하기 위해서는 이미지를 다룰 줄 알아야 한다. 이번 장에서는 도커 이미지를 생성하고 관리하는 방법에 대하여 알아보자. 이미지 저장소 도커 이미지는 기본적으로 도커 허브라는 중앙 이미지 저장소에서 이미지를 내려받는다. 도커 허브는 도커가 공식적으로 제공하는 이미지 저장소로, 도커 계정을 가지고 있다면 누구든지 해당 저장소에 있는 이미지를 내려받을 수 있다. 또한, 이미지를 도커 허브로 업로드를 할 수도 있다. 도커 허브로 올린 이미지는 깃허브 오픈소스처럼 모든 사람에게 공개가 된다. 물론 도커 허브에는 개인 저장소를 제공하여 이미지를 비공개로 올릴 수 있지만 요금을 지불해야 한다. 도커 이미지 저장소를 직접 구축하여 요금을 지불하.. 2022. 5. 14.
4. Docker Network 이번에는 도커의 네트워크 구조에 대하여 알아볼 것이다. 도커 엔진을 설치하면 호스트에 하나의 네트워크 인터페이스가 생긴다. 확인을 위해 먼저 도커 컨테이너를 하나 띄워보자. $ docker run -it ubuntu:14.04 컨테이너 내에서 ifconfig 명령어를 입력하면 다음과 같은 결과가 나온다. root@b98f1051876a:/# ifconfig eth0 Link encap:Ethernet HWaddr 02:42:ac:11:00:03 inet addr:172.17.0.3 Bcast:172.17.255.255 Mask:255.255.0.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:24 errors:0 dropped:0 overru.. 2022. 5. 14.
728x90