2021/07/21 16

[ 쿠버네티스 입문: 90가지 예제로 배우는 컨테이너 관리 자동화 표준 ] Chapter13. 인증과 권한 관리

13.1 인증 사용자가 쿠버네티스의 API에 접근하려면 인증이 필요함. 외부에서 접속시 TLS 인증이 적용되어있음. 접속하려면 kube-apiserver에 있는 인증서와 클라이언트에 있는 인증서 사이의 검증을 통과해야함. -> 인증되지 않은 클라이언트가 kube-apiserver에 접속하지 못하게 하려는 것 쿠버네티스는 접속시에 사용자 계정과 서비스 계정으로 인증을 요청함. 사용자 계정은 별도의 외부 인증 시스템에 있는 사용자 정보를 연결해 사용함 서비스 계정은 쿠버네티스가 직접 관리하는 사용자 계정이며 시크릿이 할당되어있어 비밀번호 역할을 함 kubectl의 config 파일에 있는 TLS 인증 정보 구조 확인하기 Kube-apiserver와 통신할 때 기본 인증 방법으로 TLS를 사용함. TLS는 통..

DevOps/Kubernetes 2021.07.21

[ 쿠버네티스 입문: 90가지 예제로 배우는 컨테이너 관리 자동화 표준 ] Chapter12. 파드 스케줄링

12. 1 노드 셀렉터 파드가 클러스터 안 어떤 노드에서 실행될 지를 키-값 쌍으로 결정함. 노드에서도 레이블 설정이 가능한데 보통 노드의 환경(os, arch 등)을 적어둠. 노드에 레이블 추가 ‘ kubectl label nodes “노드이름” 레이블키=레이블값 ’ 파드에 노드셀렉터 설정 spec.nodeSelector 에 키값을 설정함 -> 해당 레이블을 가진 노드에 실행될 것임을 설정할 수 있음. 12.2 어피니티와 안티 어피니티 노드 어피니티 노드셀렉터와 비슷하게 노드의 레이블 기반으로 파드를 스케줄링함. spec.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution : 스케줄링하는 동안 꼭 필요한 조건 .nodeSelecto..

DevOps/Kubernetes 2021.07.21

[ 쿠버네티스 입문: 90가지 예제로 배우는 컨테이너 관리 자동화 표준 ] Chapter11. 시크릿

11.1 시크릿 만들기 내장 시크릿 쿠버네티스 클러스터 안에서 쿠버네티스 API에 접근 시 사용됨 (serviceAccount 계정의 비밀번호 역할로 쓰임) 사용자 정의 시크릿 사용자가 만든 시크릿 명령으로 시크릿 만들기 ‘Kubectl create secret’ ‘kubectl create secret generic “시크릿 이름” ‘ (—from-literal=키=값) ' kubectl create secret docker-registry(시크릿타입) private-reg-cred(이름) --docker-username=(dock_user) --docker-password=(dock_password) --docker-server=(myprivateregistry.com:5000) --docker-em..

DevOps/Kubernetes 2021.07.21

[ 쿠버네티스 입문: 90가지 예제로 배우는 컨테이너 관리 자동화 표준 ] Chapter10. 컨피그맵

10.1 컨피그맵 사용하기 .data 실제 사용하려는 환경 값을 넣음 ‘ kubectl create configmap webapp-config-map --from-literal=APP_COLOR=darkblue ‘ : 컨피그맵 생성 ( —from-literal : .data (키:값) 설정 ) 10.2 컨피그맵 설정 중 일부만 불러와서 사용하기 containers[].env[].name 필드에 DEBUG_LEVEL이라는 환경 변숫값을 설정함 containers[].env[].valueFrom 필드값은 어디에서 가져올 것인지를 정하며 configMapKeyRef 필드는 어떤 컨피그맵이 어떤 키를 가져올지 지정함. 10. 3 컨피그맵 설정 전체를 한꺼번에 불러와서 사용하기 spec.containers[].e..

DevOps/Kubernetes 2021.07.21

[ 쿠버네티스 입문: 90가지 예제로 배우는 컨테이너 관리 자동화 표준 ] Chapter09. 레이블과 애너테이션

9.1 레이블 키-값 으로 구성. 메타데이터로 설정 가능. 컨트롤러들이 파드를 관리할 때 자신이 괄니해야 할 파드를 구분하는 역할. 노드에도 설정 가능하므로 자원 할당시에 할당할 노드를 구분하여 사용가능. 특정 레이블을 선택 시, 레이블 셀렉터를 사용함. 명령어 1. —selector “키=값” 해당 레이블 값을 가진 것들 출력 (—no-headers : 헤더값 미출력) ( wc -l : 행 수 출력 ) 2. —show-labels : 파드들의 모든 레이블 출력 3. ' Kubectl label node “노드이름” “키:값” ' 노드에 레이블 설정 9.2 에너테이션 키-값 쌍으로 구성하며 레이블처럼 사용자가 설정할 수 있음. 에너테이션은 쿠버네티스 시스템이 필요한 정보들을 담았으며, 쿠버네티스 클라이언..

DevOps/Kubernetes 2021.07.21

[ 쿠버네티스 입문: 90가지 예제로 배우는 컨테이너 관리 자동화 표준 ] Chapter 08. 인그레스

8.1 인그레스의 개념 클러스터 외부에서 안으로 접근하는 요청들을 어떻게 처리할지 정의해둔 규칙 모음 외부에서 접근해야 할 URL을 사용할 수 있도록 하고, 트래픽 로드밸런싱, SSL 인증서 처리, 도메인 기반 가상 호스팅 제공 실제로 동작시키는 것은 인그레스 컨트롤러 직접 인그레스에 인그레스 컨트롤러(ingress-nginx)를 연동해야 함 Metadata.annotations : 인그레스 설정시 사용하는 필드. 하위필드의 설정은 컨트롤러에 따라 다름. spec.rules[] : 규칙 지정하기 host : 요청받을 주소 http.paths[] : 경로 backend.serviceName : 처리할 서비스의 이름 backend.servicePort : 서비스 포트 8.2 ingress-nginx 컨트롤러..

DevOps/Kubernetes 2021.07.21

[ 쿠버네티스 입문: 90가지 예제로 배우는 컨테이너 관리 자동화 표준 ] Chapter07. 서비스

7.1 서비스의 개념 해당 파드에 접근하기 위해 필요. 클러스터 외부에서도 접근 가능.(인그레스) 파드는 한곳에 고정되서 실행되지 않고, 클러스터 안을 돌아다님. (노드를 옮겨다니거나 파드의 IP가 달라질 수도 있음) Kubectl expose pod “파드 이름” (—port= “ “, —name “서비스이름”) 7.2 서비스 타입 ClusterIP 기본 서비스 타입. 클러스터 안에서만 사용가능.(외부에서는 이용 불가) NodePort 서비스에 할당된 노드의 지정된 포트를 할당함. ClusterIP의 접근 범위 뿐만 아니라 클러스터 외부에서도 포트번호로 접근 가능 3. LoadBalancer 로드밸런서와 파드를 연결한 후 해당 로드밸런서의 IP를 이용해 클러스터 외부에서 파드에 접근할 수 있도록 함 4..

DevOps/Kubernetes 2021.07.21

[ 쿠버네티스 입문: 90가지 예제로 배우는 컨테이너 관리 자동화 표준 ] Chapter06. 컨트롤러

6.1 레플리케이션 컨트롤러 6.2 레플리카세트 지정한 숫자만큼의 파드가 항상 클러스터 안에서 실행되도록 관리. Selector에 해당하는 Pod의 replicas 갯수를 유지함. 명령어 ‘Kubectl get rs’ : 사용하는 레플리카셋 목록 가져오기 ‘Kubectl describe rs “레플리카셋이름” : 상세목록 정보 출력 ‘Kubectl delete rs “레플리카셋이름” : 삭제하기 ‘Kubectl edit rs “레플리카셋이름” : 설정 편집 ( 재설정될려면 기존의 파드들을 모두 삭제해야 함 )‘ Kubectl scale rs “레플리카셋이름” —replicas=“스케일 갯수” ‘ : 스케일링할 파드의 갯수 6.3 디플로이먼트 쿠버네티스에서 상태가 없는 앱을 배포할 때 쓰이는 컨트롤러 레플..

DevOps/Kubernetes 2021.07.21

[ 쿠버네티스 입문: 90가지 예제로 배우는 컨테이너 관리 자동화 표준 ] 5. 파드

5.1 파드 개념 쿠버네티스는 파드라는 단위로 컨테이너를 묶어서 관리 파드로 컨테이너 여러 개를 한꺼번에 관리할 떄는 컨테이너마다 역할을 부여할 수 있음. 하나의 컨테이너들이 같은 목적을 자원을 공유하게 됨. (IP공유. 포트는 서로 다름) spec.securityContext.runAsUser container를 실행할 User ID 지정하기 spec.containers.securityContext.capabilities.add root가 할 수 있는 일을 추가로 허용하기 5.2 파드 사용하기 5.3 파드 생명 주기 Pending 쿠버네티스 시스템에 파드를 생성하는 중 컨테이너 이미지를 다운로드한 후 전체 컨테이너를 실행하는 도중이므로 파드 안의 전체 컨테이너가 실행될 때까지 시간이 걸림 Running..

DevOps/Kubernetes 2021.07.21

[ 쿠버네티스 입문: 90가지 예제로 배우는 컨테이너 관리 자동화 표준 ] 4. 쿠버네티스 아키텍처

4.1 쿠버네티스 클러스터의 전체 구조 4.2 쿠버네티스의 주요 컴포넌트 마스터용 컴포넌트 Etcd /etc/kubernetes/manifests/etcd.yaml : 설정파일 Kube-apiserver 클러스터로 온 요청이 유효한지 검증함. (요청을 실행할 권한이 있는지 검사한 후 응답해줌) 쿠버네티스는 MSA이므로 서로 분리된 컴포넌트 여러 개로 구성되어 있음. 쿠버네티스에 보내는 모든 요청은 kube-apiserver를 이용해서 다른 컴포넌트로 전달함 /etc/kubernetes/manifests/kube-apiserver.yaml : 설정파일 Kube-scheduler 파드가 할당 될 노드를 결정함 Kube-controller-manager 2. 노드용 컴포넌트 Kubelet 클러스터 안 모든 노..

DevOps/Kubernetes 2021.07.21