[구글스터디잼] Kubernetes in the Google Cloud #3

해당 글은 현재 하고 있는 구글 스터디잼 Kubernetes in the Google Cloud 을 학습하는 과정에서 배우는 것을 정리하는 글입니다.

 * Setting up a Private Kubernetes Cluster
외부 IP를 가지고 않고 내부 네트워크 ip 대역만 가지고 동작하게 되는 쿠버네티스 클러스터를 설정하는 방법에 대해서 소개하는 세션입니다.

gcloud beta container clusters create private-cluster \
    --private-cluster \
    --master-ipv4-cidr 172.16.0.16/28 \
    --enable-ip-alias \
    --create-subnetwork ""

그리고 해당 클러스터 master에 접근할 수 있는 네트웍 대역을 지정할 수 있습니다. 여기서 MY_EXTERNAL_RANGE 는 CIDR 형태로 172.16.0.16/28 같은 형태로 표현해야 합니다.

gcloud container clusters update private-cluster \
    --enable-master-authorized-networks \
    --master-authorized-networks [MY_EXTERNAL_RANGE]

 

  • Helm Package Manager
    Helm 은 쿠버네티스 위에서 어플리케이션을 관리하는 매니저 툴입니다. 클라이언트/서버 구조로 구성되고 클라이언트는 Helm, 서버는 tiller 라고 부릅니다.

    Helm 의 설치는 다음과정을 통해서 이루어집니다.

    curl https://raw.githubusercontent.com/kubernetes/helm/master/scripts/get > get_helm.sh
    chmod 700 get_helm.sh
    ./get_helm.sh
    kubectl -n kube-system create sa tiller
    

    그리고 tiller role을 설정해줍니다.

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

    tiller를 설치합니다.

    helm init --service-account tiller
    

    이제 거기에 올라가서 동작할 chart를 설치해봅니다.

    helm repo update
    helm install stable/mysql
    

  • NGINX Ingress Controller on Google Kubernetes Engine
    Ingress는 해당 노드로 들어오는 트래픽, Egress는 해당 노드에서 외부로 나가는 트래픽을 의미합니다. 여기서는 앞에서 배운 Helm을 이용해서, nginx 라는 좋은 웹서버를 이용해서 Ingress 트래픽을 제어하는 예를 보여주게 됩니다. Ingress 트래픽을 제외한다는 것은 특정 요청을 다른곳으로 보낸다거나, 바꿀수 있습니다.

ingress

먼저 kubenetes 클러스터를 생성합니다.

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

그리고 helm 을 인스톨합니다.

curl https://raw.githubusercontent.com/kubernetes/helm/master/scripts/get > get_helm.sh
chmod 700 get_helm.sh
./get_helm.sh

Role based access control(RBAC) 설정을 합니다.

kubectl create serviceaccount --namespace 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"}}}}'  

helm init --service-account tiller --upgrade

이제 hello-app 을 실행합니다.

 kubectl run hello-app --image=gcr.io/google-samples/hello-app:1.0 --port=8080
 kubectl expose deployment hello-app

이제 ingress 용 nginx를 실행합니다.

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

스크린샷 2019-01-27 오후 3.42.38

이제 위와 같이 nginx-ingress를 설정합니다.

kubectl apply -f ingress-resource.yaml

Reference

  1. https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/
  2. https://arisu1000.tistory.com/27835
  3. https://sktelecom-oslab.github.io/Virtualization-Software-Lab/Helm/
  4. https://kubernetes.io/blog/2016/10/helm-charts-making-it-simple-to-package-and-deploy-apps-on-kubernetes/
  5. https://bcho.tistory.com/1272
Advertisements