Security/리눅스

정보보안 스터디 - 11주차 1일 - Kubernetes 쿠버네티스

wonder12 2022. 12. 23. 02:37

 

 

 

 

 

☞ 쿠버네티스(Kubernetes)

파드는 컨테이너를 그룹화시켜서 관리해줍니다.

예를 들어 웹서버, 로그 수집기, DB서버, 모니터링 서버 등 하나의 시스템에 여러 서버가 필요하고

서로다른 4개의 서버를 파드라는 하나의 그룹에 담아서 이미지를 불러오고 관리합니다. 

 

도커와 비슷해보이지만

한곳에 모아서 컨트롤 한다는 개념이 도커와는 조금 다릅니다.

 

master - node1,2,3 

Ansible 노드 구성은 이렇게 됩니다.

저번시간에 Ansible 키배포를 하고 현재 연결한 상태입니다.

 

 

노드에 파드를 할당시키고 할당받은 노드를 변함없이 쭉 사용합니다.

만약 노드에 장애가 발생했을 경우 다른 노드로 변경할 수 있습니다.

 

 

kubectl get nodes -o wide
master와 노드1,2,3 레디 상태를 확인합니다. master는 control-plane으로 뜹니다.
구글처럼 클라우드 서비스는 지역별로, 예를들어 아시아에 노드를 많이 깔아놓고 운영합니다.

 

kubernetes 는 docker 이미지를 pull해 옵니다.

그렇기 때문에 받아오려는 서버(docker 허브)에 로그인해줘야합니다.

secret을 만들고, patch -n 패치해줍니다.

kubectl create secret docker-registry mysecret \
--docker-username=아이디 \
--docker-password=비밀번호 \
--docker-email=이메일
patch -n ~ 

 

 

 

 

 파드 생성 방법

컨테이너 이미지를 실행시키는 방법,

즉 파드를 생성하는 방법은 두가지가 있습니다.

kubectl run web1-pod --image=nginx --port=80

여기서 run으로 생성하는 방법이며 현재 가장 빠른 노드에 할당됩니다.
랜덤순이나 분배순이 아닙니다.

 

 

 

yml 파일을 이용하여 파드를 생성하는 방법입니다.

컨테이너 이미지는 여러개 실행이 가능합니다.

 

kubectl run web --image=nginx --port=80 --dry-run -o yaml > web2-pod.yml
kubectl create -f web2-pod.yml
kubectl get pods (web2-pod)
파드에대한 설명을 봅니다.

kubectl get pods -o wide
ip 등 자세한 설명을 봅니다.

kubectl get pods -o yaml
pods설정이 yaml파일 형식으로 나오기 때문에
yml 파일로 출력시켜서 파드 생성 파일로 많이 사용됩니다.

kubectl get pods -o json
json형식으로 나오지만 지저분해서 자주 사용하지 않습니다.
kubectl get pods -o wide --watch
이전에는 고정된 설정확인이였다면
rending 단계부터 > running > success/fail, 삭제 등
실시간으로 상태 확인이 가능합니다.
kubectl get pods -n kube-system
시스템 네임스페이스인 파드를 확인합니다. -n default가 기본값입니다.
kubectl describe pods web2-pod
현재 실행과정, 자세한 내용을 보는 명령어입니다. 
오류가 나거나 환경 설정이 잘못 됐을 때 자주 사용합니다.

 

 

배포기능

파드를 여러개 한번에 실행가능합니다.

kubectl create[apply] deployment webapi --image=httpd --replicas=3
3개를 생성합니다.
kubectl get deployments.apps
kubectl describe deployments.apps
로 확인하면 파드3개가 노드에 연결되어 webapi-이름으로 번호가 생성된 것을 볼 수 있습니다.

쿠버네티스의 큰 장점은 vim 편집기로 갯수설정을 변경하면 바로 적용된다는 점입니다. 

 

 

kubectl port-forward web 8080:80
8080포트로 외부에 포트 노출 > x윈도우에서 8080접속
kubectl exec web2-pod -c nginx-container -it -- /bin/bash
웹서버 컨테이너의 쉘로 들어갑니다. 
--이후로는 인자를 입력합니다.
kubectl exec web2-pod -c centos-container -it -- /bin/bash

curl http://localhost
컨테이너끼리는 ip를 공유하기 때문에
centos에서 localhost:80으로 자기 ip에 접속했을 때 웹이 뜹니다. 

또한 컨테이너를 생성하면서 커널을 공유중인 리눅스 본체에서도 ip가 생성되며

웹 접속이 가능합니다. 실제 pc에서는 네트워크 대역을 공유안해서 접속이 아직 불가능합니다.

 

 

 

 

 네임스페이스

네임스페이스는 여러 환경에서 여러 사용자가 사용할 때 파드양이 많아지므로 구분하기 위해 사용합니다.

kubectl create namespace prodns
kubectl get namespaces
kubectl config view
노드 정보, context 확인

config 설정변경으로 기본 네임스페이스 변경이 가능합니다.

 

yaml 파일로 받아와서 생성이 가능합니다.

# kubectl create namespaces prodns --dry-run -o yaml > prodns.yml
# vi prodns.yml
# kubectl create -f prodns.yml

 

 

파드는 라이프타임 설정을 할 수 있습니다.