ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [퀵랩] 고급 - 쿠버네티스 솔루션 03/08
    Qwiklabs/고급 - Kubernetes Solutions 2020. 5. 27. 16:00
    728x90

    안녕하세요, 오늘은 쿠버네티스의 인그레스/인그레스 컨트롤러에 대해서 중점적으로 다루는 랩입니다.

     

    인그레스라는 것은 유저와 애플리케이션간의 HTTP 접속을 허용하는 일종의 규칙입니다.

    애플리케이션에 접속할때 예를 들면 장바구니 들어갈 때랑 상품 정보 메뉴

    인그레스 외부에서 서비스로 접속이 가능한 URL, 로드 밸런스 트래픽, SSL / TLS 종료 그리고 이름 기반의 가상 호스팅을 제공하도록 구성할 수 있습니다.

     

    만약에 이런 쇼핑몰이 있다고 가정했을 때, 우측 상단의 메뉴바에서 1:1 채팅으로 라우팅 되는 주소가 다르게 구성할 수도, 장바구니 메뉴를 다르게 구성할 수도 있습니다. 

     

    조대협님의 블로그에 따르면 쿠버네티스 서비스는 URL Path에 따른 서비스간 라우팅이 불가능한데,

    인그레스를 이용해서 서비스의 URL Path에 의한 라우팅을 가능하게 하는 것이 이 인그레스 컨트롤러가 되겠습니다.

     

    https://bcho.tistory.com/1263

     

    쿠버네티스 #8 - Ingress

    쿠버네티스 #8 Ingress 조대협 (http://bcho.tistory.com) 쿠버네티스의 서비스는, L4 레이어로 TCP 단에서 Pod들을 밸런싱한다. 서비스의 경우에는 TLS (SSL)이나, VirtualHost와 같이 여러 호스트명을 사용하거..

    bcho.tistory.com

     

    인그레스를 가능하게 하는 것은 인그레스 리소스가 되겠습니다. 이러한 규칙들을 기반으로 해서,

    인그레스 컨트롤러가 이를 컨트롤하는 구조입니다.

    다양한 인그레스 컨트롤러들을 통해서 컨트롤할 수 있는데,

    이번엔 Nginx 웹서버를 통한 실습을 진행합니다!

     

     

    웹소켓은 웹 소켓 애플리케이션의 로드밸런싱을 가능하고,

    SSL 서비스HTTPS 어플리케이션들을 로드밸런싱 해줍니다.

    Rewrites 요청을 어플리케이션으로 보내기 전 URI의 재전송을 가능하게 합니다.

    세션 영속성(NGINX 플러스), 동일한 클라이언트로부터 오는 모든 요청이 동일한 백엔드 컨테이너로

    전달될 수 있도록 합니다.

    JWT(NGINX 플러스) NGINX 플러스가 JSON WEB TOKEN을 검증하여 요청을 인증할 수 있도록 합니다.

     

     

    이번 랩의 구조도입니다. 헬름 차트를 이용해 Ingress Controller를 배포해 봅니다.

    Nginx Ingress를 배포해서 잘 되는지 테스팅해봅시다.

     

     

    이번에는 영역 자원에 대해서 리마인드 하는 내용입니다! 이번 랩에서 존을 세팅해줘야 합니다.

     

     

    gcloud config set compute/zone us-central1-a

    존을 us-central1-a로 세팅합니다.

    gcloud container clusters create nginx-tutorial --num-nodes 2

    그 후, 클러스터 이름을 nginx-tutorial으로 만들고 노드 수는 2개로 만듭니다.

     

    curl https://raw.githubusercontent.com/kubernetes/helm/master/scripts/get

    > install-helm.sh

    chmod u+x install-helm.sh

    ./install-helm.sh --version v2.16.3

     

    지난 랩에 이어서 Helm을 설치합니다.

     

    helm init

    을 통해서 헬름을 초기화하고,

     

    kubectl create serviceaccount --namespace kube-system tiller

    서비스 계정을 만듭니다. 네임스페이스는 kube-system이고, 이름은 tiller라고 합시다.

    kubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin --serviceaccount=kube-system:tiller

    클러스터 롤 바인딩을 만듭니다. 클러스터와 틸러를 엮어주는 역할을 합니다.

    kubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}'

     

    6) SVC 계정으로 Helm 초기화 하기

     

    helm init --service-account tiller --upgrade

    헬름에 추가한 서비스 어카운트를 통해 헬름을 업데이트합니다.

    kubectl get deployments -n kube-system

    kube-system의 디플로이먼트 객체를 출력해봅시다. 

     

    7) 쿠버네티스 엔진에서 애플리케이션 배포하기

     

    kubectl create deployment hello-app --image=gcr.io/google-samples/hello-app:1.0

    다음의 명령어를 실행해서 배포를 만듭니다.

     

    kubectl expose deployment hello-app --port=8080

    다음 배포의 포트를 8080을 통해 외부 노출 포인트를 열어둡니다.

     

     

     

     

    8) Nginx Ingress Controller를 이용해 인그레스 리소스를 구성하기

     

    쿠버네티스 엔진 클러스터에서 구동되는 NGINX 컨트롤러의 플로우차트를 보면 위의 그림과 같습니다.

    잘 기억해 주세요!

     

     

    helm install --name nginx-ingress stable/nginx-ingress --set rbac.create=true

    인그레스 리소스 객체는 인바운드 트래픽을 쿠버네티스 서비스로 라우팅 하기 위한 규칙 모음입니다.

    여러 규칙들은 인그레스 리소스 안에 명시되거나 나누어서 여러 개의 인그레스 리소스 매니페스트에  나누어질 수 있습니다.

    인그레스 리소스는 트래픽을 처리할 컨트롤러를 결정합니다. Kubernetes.io/ingress.class의 인그레스 리소스의 메타 데이터 섹션에서 주석으로 설정할 수 있습니다. 

     

    annotations: Kubernetes.io/ingress.class : nginx

    annotations: Kubernetes.io/ingress.class : gce

     

    이런 식으로 쓰게 됩니다.

     

    touch ingress-resource.yaml

    nano ingress-resource.yaml

     

    이제 YAML파일을 통해 인그레스 리소스에 대한 내용을 만들어 봅시다.

     

     

    인그레스 컨트롤러에 해당의 내용을 넣고,

    kubectl apply -f ingress-resource.yaml

    를 동작시켜 만들어 줍니다.

    kubectl get ingress ingress-resource

    잘 생성되었는지 확인하고,

    kubectl get service nginx-ingress-controller

    웹 애플리케이션에 액세스 가능한지도 확인해 봅시다.

     

     

    kubectl get service nginx-ingress-controller

    를 통해서 얻은 서비스 IP를 넣어서 확인해봅시다.

     

    결과가 다릅니다.

    배포에 /hello에 대한 라우팅만 내용이 있기 때문에

    브라우저에서 외부 ip/test로 들어갔을 때는 404 에러가 뜨게 됩니다.

     

     

    이번 랩으로 NGINX 인그레스 컨트롤러를 배포해 보았습니다.

    좀 더 다양한 사용법에 대해서 익힐 수 있었습니다!

    다음 랩에서 뵙겠습니다!

    728x90
    반응형
Designed by Tistory.