Istio는 MSA 기반아래 서비스를 연동하고 지원하는 플랫폼이다.
1. Prerequisites
아래 문서에 있는 것 처럼 Istio를 받고, GKE를 설치 한 다음 Helm Client를 설치 한다.
https://istio.io/docs/setup/kubernetes/helm-install/
GKE node는 최소 4개, n1-standard-1 (1 vCPU, 3.75 GB memory) 정도로 생성해야 한다.
2. Install Helm Client
wget https://storage.googleapis.com/kubernetes-helm/helm-v2.10.0-linux-amd64.tar.gz
압축을 풀고 linux-amd64 아래의 helm파일을 /usr/local/bin 아래로 옮겨준다
3. Install Istio via Helm
helm template install/kubernetes/helm/istio --name istio --namespace istio-system > $HOME/istio.yaml
위와 같이 수행하면 istio.yaml파일이 생성되고 kubernetes 환경 아래 배포를 할 수 있다. 바로 배포하면 에러가 발생하기 때문에 아래와 같이 clusterrolebinding을 생성한다.
$ kubectl create clusterrolebinding cluster-admin-binding \
--clusterrole=cluster-admin \
--user=$(gcloud config get-value core/account)
$ kubectl create namespace istio-system
$ kubectl apply -f $HOME/istio.yaml
4. 설치 완료
설치가 완료되면 아래와 같이 정상적으로 pod가 Running하고 있는 것을 볼 수 있다.
5. Trouble Shooting
Helm을 통해 설치 하면 아래와 같은 에러가 발생 한다. cluster를 생성한 뒤 아래의 rolebinding을 생성한다.
kubectl create clusterrolebinding cluster-admin-binding \
--clusterrole=cluster-admin \
--user=$(gcloud config get-value core/account)
Error from server (Forbidden): error when creating "/home/thkang0/istio.yaml": clusterroles.rbac.authorization.k8s.io "istio-cleanup-secrets-istio-system" is for
bidden: attempt to grant extra privileges: [PolicyRule{Resources:["secrets"], APIGroups:[""], Verbs:["list"]} PolicyRule{Resources:["secrets"], APIGroups:[""], V
erbs:["delete"]}] user=&{thkang0@gmail.com [system:authenticated] map[user-assertion.cloud.google.com:[ADKE0IDKNfEqSmbTr6LNg334wEzQFQ2dYo0dNzkN0A8V7u/9OQg1iR2dH
ROuBuCDA+r0T93/fpmR+rPsxAZHsu6rEOYvlrKSVv4z26FxYnP8Qe/w1Zp5XRHWctALodDAp+DEsf4yrBd/ppPqOoNYWE4sZX9rW3oTlTzWyojH67VAEjG00rgxOiNWyXMjk5qrjYGeEUDdB0og8VAUNLjn5/9lNu
xS4CysnSvB]]} ownerrules=[PolicyRule{Resources:["selfsubjectaccessreviews" "selfsubjectrulesreviews"], APIGroups:["authorization.k8s.io"], Verbs:["create"]} Poli
cyRule{NonResourceURLs:["/api" "/api/*" "/apis" "/apis/*" "/healthz" "/swagger-2.0.0.pb-v1" "/swagger.json" "/swaggerapi" "/swaggerapi/*" "/version"], Verbs:["ge
t"]}] ruleResolutionErrors=[]