Kubernetes in Google Cloud Platform - (2)
지난번 포스팅에서 놓친 내용이 있는데 구성도에 관한 부분이다.
하나의 Kubernetes Cluster( 쿠베 클러스터 )는 여러개의 물리적인 Node Pool 로 구성되고 각각의 Node Pool들은 여러개의 Node로 구성이 된다. 이 부분은 물리적으로 구성이 되는 이야기이고, 가상화 된 내용은 다음과 같다.
하나의 쿠베 클러스터 안에는 여러개의 Service( 서비스 )가 유기적으로 돌아가며 개별 서비스들은 한개 혹은 여러개의 Pod(팟) 으로 구성이 된다. 각각의 Pod은 1~2개의 docker container ( 컨테이너 ) 로 이뤄져 있다. 우리는 이 컨테이너는 신경쓰지 않고 pod만 신경쓰고 개발하면 된다. ( 물론 뭔가 유니크한 작업을 해야만 하는게 있다면 당연히 신경써야 하는데, 애초에 pod이 여러개라는걸 감안하면 당연히 신경써야 하는 내용이긴 하다. )
물리적으로 1개의 pod은 1개의 노드( 물리서버) 위에서 동작한다. 따라서 앞에서 언급한것처럼 경우에 따라 2개의 도커가 들어가게 되는 경우에는 하나의 서버에 그만큼 부하가 더 걸릴 수 있으나 쿠베가 알아서 할것이니 우리는 신경쓰지 않는다.
쿠베를 배우는
전체적인 흐름은 우리 회사에서 내가 시스템을 구축하고 있는 현재 상황을 그대로 따라갈것이다.
따라서, 이게 절대적인건 아니고 향후 학습을 통해 더 좋은 방법이 나오게 되면 바뀌어야 겠지만, 아쉽게도 스팀잇은 1주일이 지나면 글 본문을 수정할 수 없기에...
댓글 정도 남기는 선에서 끝날듯 하다;
현재 당장의 목표는 쿠베를 이용해서 HTTPS가 지원되는 웹서버를 만드는것이었다.
처음에는 Let's Encrypt를 이용하여 자동으로 구성하게 하려 했으나, 시도를 하는대로 했으나 결국 포기하고. ( 지금은 가능할꺼 같지만 )
NameCheap 에서 인증서를 구매했다. https://www.namecheap.com/security/ssl-certificates.aspx ( 8.88$ )
구입한 인증서를 다음과 같은 명령어를 통해서 쿠베에 등록을 해준다.
주의사항
공개키 인증서 ( tls.crt ) 에 체인을 합쳐서 업로드 해야 함.
kubectl create secret tls custom-tls-cert --key tls.key --cert tls.crt
그러면 다음과 같이 [ 구성 ] 에 등록이 된다.
다음으로 [ 작업 부하 ] 로 가서 [ 배포 ] 를 눌러 새로운 작업단위를 만든다.
다음과 같은 화면이 뜨는데, 여기서는 [ 어플리케이션 이름 ] 만 nginx 로 바꾸고 바로 [ 배포 ]를 눌러 만든다.
여기서 가능하면 YAML 보기라는 버튼이 있는데, 매번 뭔가 작업할때 마다 보고 배우면 나중에 직접 스크립트를 통해서 컨트롤이 가능해진다.
다음으로 이제 클라우드 콘솔을 사용하여 작업을 진행한다. 개별적으로 터미널에서 해도 되지만 이건 그냥 간단한 작업이므로..
화면에서 [ 연결 ] 버튼을 누른다. 그러면 다음과 같은 화면이 뜬다.
여기서 [ Cloud Shell 에서 실행 ]을 누르면 아래에 터미널 비슷한 창이 뜬다.
명령줄이 입력되어 있을껀데, 엔터를 눌러 실행한다.
echo "
apiVersion: v1
kind: Service
metadata:
name: nginx-service
namespace: default
labels:
app: nginx
spec:
type: NodePort
ports:
- port: 80
targetPort: 80
protocol: TCP
name: http
selector:
app: nginx
" | kubectl create -f -
위와 같은 코드를 콘솔창에 입력하여 새로운 서비스를 생성한다.
간단히 설명하면 앞에서 만든 nginx 앱을 선택해서 80 포트로 http 서비스를 생성하되, 이름은 nginx-service로 한다는 내용이다.
다음으로 다음과 같이 입력하여 GCLB와 연동을 한다.
echo "
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: web
namespace: default
spec:
rules:
- host: example.com
tls:
- secretName: custom-tls-cert
hosts:
- waplchat.com
backend:
serviceName: nginx-service
servicePort: 80
" | kubectl create -f -
역시 간단히 설명하면, Ingress( 외부에서 접속가능한것을 만드는 내용 ) 서비스를 생성하되, 이름은 web 이고, 앞에서 만든 custom-tls-cert 라는 인증서를 이용하여 https 까지 지원하는 내용이다. 백엔드는 바로 앞에서 만든 nginx-service 를 이용한다. 포트는 물론 80 포트이고, rules 에서 host를 통해서 어떤 도메인을 지원할것인가를 지정이 가능하다.
여기까지 하고 나면 약간의 시간이 걸리고 [ 네트워크 서비스 -> 부하 분산 ] 에 가보면 새로운 로드 밸런서가 만들어져 있다.
Thank you for your sharing, I love it @calmlake79 (♥)
새로운 내용으로 업데이트.
https://medium.com/@HarrisonJung/gke-6ea41f7e9f16
를 참고하세요.