Kubernetes in Google Cloud Platform - (2)

in #gcp7 years ago (edited)

지난번 포스팅에서 놓친 내용이 있는데 구성도에 관한 부분이다.

하나의 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

그러면 다음과 같이 [ 구성 ] 에 등록이 된다.

screenshot 2018-03-26 11.24.06.png

다음으로 [ 작업 부하 ] 로 가서 [ 배포 ] 를 눌러 새로운 작업단위를 만든다.

screenshot 2018-03-26 11.29.21.png

다음과 같은 화면이 뜨는데, 여기서는 [ 어플리케이션 이름 ] 만 nginx 로 바꾸고 바로 [ 배포 ]를 눌러 만든다.

여기서 가능하면 YAML 보기라는 버튼이 있는데, 매번 뭔가 작업할때 마다 보고 배우면 나중에 직접 스크립트를 통해서 컨트롤이 가능해진다.

screenshot 2018-03-26 11.33.01.png

다음으로 이제 클라우드 콘솔을 사용하여 작업을 진행한다. 개별적으로 터미널에서 해도 되지만 이건 그냥 간단한 작업이므로..

screenshot 2018-03-26 11.52.06.png

화면에서 [ 연결 ] 버튼을 누른다. 그러면 다음과 같은 화면이 뜬다.

screenshot 2018-03-26 11.53.19.png

여기서 [ 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를 통해서 어떤 도메인을 지원할것인가를 지정이 가능하다.

여기까지 하고 나면 약간의 시간이 걸리고 [ 네트워크 서비스 -> 부하 분산 ] 에 가보면 새로운 로드 밸런서가 만들어져 있다.