전체 글 1155

Security Context

도커 컨테이너에 프로세스 실행 user와 capabilities를 설정할 수 있던 것과 같이 쿠버네티스에서도 동일한 부분을 설정할 수 있다. 쿠버네티스 컨테이너는 Pod에 캡슐화되어 있으므로 컨테이너 레벨, 또는 Pod 레벨에서 설정을 구성할 수 있다. Pod 레벨 Pod 내 모든 컨테이너에 설정을 적용한다. yaml 파일에서 securityContext 옵션을 사용하여 프로세스 실행 user를 지정할 수 있다. apiVersion: v1 kind: Pod metadata: name: web-pod spec: securityContext: runAsUser: 1000 containers: - name: ubuntu image: ubuntu command: ["sleep", "3600"] Container..

[Docker] 컨테이너에 권한 부여

Docker는 컨테이너 내 root 사용자의 기능을 제한하는 기능을 제공한다. 컨테이너 내부의 프로세스가 호스트의 root 사용자가 할 수 있는 작업을 수행하면 시스템에 영향을 미칠 수 있기 때문이다. 따라서 Docker는 Linux의 Capabilities를 이용하여 리눅스의 호스트의 root 사용자와 컨테이너 내 root 사용자에게 권한 차이를 둔다. Capabilities Super User의 권한을 능력으로서 독립적으로 허용하거나 허용하지 않도록 설정하기 위한 단위 Super User의 권한을 조각으로 나눈 것 종류 CAP_SYS_ADMIN : sysadmin 작업 수행 CAP_SYS_TIME : 시스템 시간 변경 CAP_CHOWN : 파일의 uid/gid 변경 등등……. 프로세스는 root 권한..

Docker 2021.07.11

[Docker] 컨테이너 내 프로세스를 일반 사용자로 실행

일반적으로 Docker는 컨테이너 내에서 root로 프로세스를 실행한다. 컨테이너 내에서 일반 사용자로 프로세스를 실행하려면 --user 옵션으로 uid를 지정하거나 Dockerfile에 정의하면 된다. --user 옵션 docker run -it --user ubuntu bash username이 없는 이유는 컨테이너 내에 uid 1000으로 지정된 사용자가 없기 때문이다. Dockerfile 없는 사용자를 지정하지 않도록 Dockerfile 정의에 사용자를 먼저 생성한 뒤, 로그인 사용자를 지정해본다. FROM ubuntu RUN useradd docker_user -u 1000 -m -s /bin/bash USER 1000 위 Dockerfile로 빌드한 이미지를 이용하여 --user 옵션 없이 컨..

Docker 2021.07.10

Secrets

configMap은 데이터를 일반 텍스트, 즉 평문으로 저장하기 때문에 암호를 저장하여 사용하기에는 적절하지 않다. 암호와 같은 민감정보를 저장해 사용할 때는 secret을 사용한다. Secret 암호나 키와 같은 중요한 정보를 저장할 때 사용한다. 해쉬 형식으로 인코딩 되어 저장된다는 것을 제외하면 configMap과 유사한다. configMap과 마찬가지로, 생성한 뒤 Pod에 주입되어 데이터를 전달한다. 생성 방법 명령형 방법으로 생성 명령어로 직접 키-값 쌍을 지정할 수 있다. 여러 키-값 쌍을 지정할 때에는 --from-literal 옵션을 여러 번 사용한다. 데이터가 많아져 복잡해지는 경우에는 파일로 데이터를 저장한 뒤, 해당 경로를 지정한다. kubectl create secret gener..

ConfigMaps

2021.07.08 - 환경 변수 설정에서는 포드 정의 파일에서 환경변수를 정의하는 방법을 알아보았다. 하지만 포드 정의 파일로 환경 변수를 정의하면 포드 정의 파일이 많아지면 환경변수를 관리하기가 어려워진다. 이런 어려움을 해결하기 위해 ConfigMap을 사용할 수 있다. ConfigMap 키-값 형태로 구성되며, Pod 생성 시 ConfigMap을 주입하여 Pod 컨테이너 내부에 호스팅 되는 애플리케이션의 환경 변수로 사용할 수 있도록 데이터 전달에 사용한다. 생성 방법 명령형 방법으로 생성 kubectl create configmap --from-literal== --from-literal== # –from-literal : 키 값 쌍 지정에 사용 kubectl create configmap --..

환경변수 설정

쿠버네티스는 다음과 같은 방법으로 환경변수를 설정할 수 있다. 1. ENV 속성 사용 yaml 파일에 ENV 속성을 사용하여 환경변수를 설정한다. apiVersion: v1 kind: Pod metadata: name: simple-webapp-color spec: containers: - name: simple-webapp-color image: simple-webapp-color ports: - containerPort: 8080 env: - name: APP_COLOR value: pink array이기 때문에 ENV 아래의 모든 항목은 array의 항목임을 나타내는 -로 시작한다. 각 항목은 name과 value 속성으로 구성되어 있으며, 각 속성이 의미하는 것은 다음과 같다. name : 컨테이..

Pod 실행 명령어와 매개변수 지정

2021.07.05 - 컨테이너 실행 시 매개변수 지정 위 글에서는 도커에서 컨테이너를 실행할 때 명령어로 또는 Dockerfile에서 실행 CMD나 매개변수를 지정하는 방법에 관해 적었다. 쿠버네티스에서도 비슷하게 Pod 생성 시 실행할 명령어와 매개변수를 지정할 수 있다. pod를 정의하는 yaml 파일에 command와 args를 추가하면 된다. apiVersion: v1 kind: Pod metadata: name: ubuntu-sleeper-pod spec: containers: - name: ubuntu-sleeper image: ubuntu-sleeper command: ["sleep"] # Entrypoint in Dockerfile args: ["10"] # CMD in Dockerfil..

[Docker] 컨테이너 실행 시 매개변수 지정

Docker는 VM과 다르게 운영 체제를 호스팅 하지 않고, 특정 task나 프로세스를 실행한다. 따라서 프로세스가 종료되면 도커로 실행한 Container도 종료된다. 예시로, 아래의 명령어를 실행하면 우분투 이미지를 이용한 컨테이너가 실행되고 즉시 종료된다. docker run ubuntu bash Bash는 프로세스가 아니라 단말기 입력을 수신하는 Shell로, 터미널을 찾지 못하면 종료되는데 도커는 기본적으로 컨테이너 실행 때 터미널을 연결하지 않는다. 따라서 bash는 터미널을 찾지 못해 종료되며 컨테이너도 함께 종료된다. CMD 컨테이너 실행 명령 지정은 명령어를 통해서도 할 수 있지만 아래와 같이 Dockerfile에서 정의할 수도 있다. FROM ubuntu # 쉘 형식 CMD comman..

Docker 2021.07.05

Namespace

Namespace 동일한 물리 클러스터를 기반으로 하는 가상 클러스터 Default Namespace 클러스터를 처음 설정할 때 쿠버네티스에 의해 자동으로 생성된다. kube-system 쿠버네티스 시스템에서 생성한 오브젝트를 위한 네임스페이스 생성한 포드와 서비스를 사용자에게서 격리하여, 실수로 서비스를 삭제하거나 수정하지 않도록 한다. kube-public 인증되지 않은 사용자를 포함하여 모든 사용자가 읽기 권한으로 접근할 수 있는 자동 생성 네임스페이스 네임스페이스 내의 리소스는 이름으로 지칭할 수 있다. 다른 네임스페이스와 통신하기 위해서는 ..svc.cluster.local 형식의 DNS를 사용해야 한다. DNS에서 cluster.local은 쿠버네티스의 기본 도메인 이름이며, svc는 서비스의..

Deployments

Rolling Update 서버를 실제로 서비스할 때 서비스적인 장애와 배포에 있어서 부담감을 최소화하고, 서비스가 중단되지 않도록 배포하는 무중단 배포 방법 중 하나 새 버전을 배포하면서, 새 버전 인스턴스를 하나씩 늘려가고 기존 버전의 인스턴스를 하나식 줄여나가는 방식 새 버전의 인스턴스로 트래픽이 이전되기 전까지 이전 버전과 새 버전의 인스턴스가 동시에 존재할 수 있다는 단점이 있지만, 시스템을 무중단으로 업데이트할 수 있다. Deployment RC를 이용한 롤링 업데이트 과정을 자동화해주는 추상화 개념 Rolling Update를 이용하여 인스턴스를 업그레이드하고, 변경 내용을 실행 취소하며, 필요에 따라 변경을 일시 중지/재개하는 기능 제공 배포 정의 파일을 이용해 생성하며, 정의 파일의 내용..