Istio Mixer Adapter開發 (二)Istio環境搭建

I'm Robin發表於2019-02-20

系列導航

概述

上篇,我們從一個全新安裝的VM,安裝了kubeadm + Kubernetes + K8S dashboard

本篇將基於搭建好的K8S環境繼續Istio的環境搭建

動手安裝Istio

首先安裝helm,helm是K8S下的包安裝元件,如果想對helm有進一步瞭解,請移步helm官網

參考如下兩篇文章安裝helm

docs.helm.sh/using_helm/…
docs.helm.sh/using_helm/…

下載istio-1.0.5,使用helm生成istio安裝的K8S yaml檔案,如下所示:

➜  istio wget wget https://github.com/istio/istio/releases/download/1.0.5/istio-1.0.5-linux.tar.gz
➜  istio tar -xvf istio-1.0.5-linux.tar.gz
➜  istio cd istio-1.0.5 
複製程式碼

參考如下官網連結安裝Istio

istio.io/docs/setup/…

參考如下連結設定Istio的各種功能啟用情況

注意:其實並不是可以任意指定,筆者就因為關掉了security.enabled導致pilot啟動不起來 istio.io/docs/refere…

➜  istio-1.0.5 helm template install/kubernetes/helm/istio --name istio --namespace istio-system \
  --set gateways.istio-egressgateway.enabled=false \
  --set galley.enabled=false \
  --set prometheus.enabled=false \
  --set global.enableTracing=false \
  --set global.proxy.envoyStatsd.enabled=false \
  --set security.enabled=true \
  --set gateways.enabled=true \
  --set gateways.istio-ingressgateway.enabled=true \
  --set sidecarInjectorWebhook.enabled=true \
  --set mixer.enabled=true \
  --set pilot.sidecar=true > ./istio-helm.yaml
複製程式碼

開始安裝Istio

➜  istio-1.0.5 kubectl create namespace istio-system
➜  istio-1.0.5 kubectl apply -f istio-helm.yaml
➜  istio-1.0.5 kubectl get pods -n istio-system                          
NAME                                     READY     STATUS      RESTARTS   AGE
istio-citadel-7dd558dcf-6vg6f            1/1       Running     0          8m
istio-cleanup-secrets-dq2fz              0/1       Completed   0          8m
istio-ingressgateway-58c77897cc-x2x6c    1/1       Running     0          16h
istio-pilot-868cdfb5f7-zfq2n             2/2       Running     0          1m
istio-policy-56c4579578-4qkhk            2/2       Running     0          16h
istio-security-post-install-5vwk5        0/1       Completed   0          8m
istio-sidecar-injector-d7f98d9cb-7wn9m   1/1       Running     0          16h
istio-telemetry-7fb48dc68b-pdqrv         2/2       Running     0          16h
複製程式碼

至此,基於K8S的Istio安裝好了,下面我們安裝官方的demo驗證下

參考這篇文章
istio.io/docs/exampl…

執行下述命令啟用namespace為default的istio-sidecar自動注入:

➜  istio-1.0.5 kubectl label namespace default istio-injection=enabled
複製程式碼

接下來我們部署Istio的官方demo應用驗證下我們的部署:

➜  istio-1.0.5 kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
➜  istio-1.0.5 kubectl get pods                
NAME                             READY     STATUS    RESTARTS   AGE
details-v1-6764bbc7f7-k9sd4      2/2       Running   0          6m
productpage-v1-54b8b9f55-hx2x9   2/2       Running   0          6m
ratings-v1-7bc85949-mqdcp        2/2       Running   0          6m
reviews-v1-fdbf674bb-n9kcf       2/2       Running   0          6m
reviews-v2-5bdc5877d6-9vtj8      2/2       Running   0          6m
reviews-v3-dd846cc78-bc7pl       2/2       Running   0          6m
➜  istio-1.0.5 kubectl get services                 
NAME          TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
details       ClusterIP   10.108.102.13   <none>        9080/TCP   6m
kubernetes    ClusterIP   10.96.0.1       <none>        443/TCP    19h
productpage   ClusterIP   10.97.96.61     <none>        9080/TCP   6m
ratings       ClusterIP   10.96.196.120   <none>        9080/TCP   6m
reviews       ClusterIP   10.97.215.227   <none>        9080/TCP   6m
複製程式碼

我們只是安裝了服務,還沒有配置gateway及virtualserivce等使其能被訪問
參考:

istio.io/docs/tasks/…

➜  istio-1.0.5 kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml
複製程式碼

我們發現Type:LoadBalancer的service:istio-ingressgateway並沒有外部IP,這是因為LoadBalancer其實依賴與提供Kubernetes服務的雲平臺的實現,我們是虛擬機器安裝,所以需要修改為NodePort型別

➜  istio-1.0.5 kubectl edit svc istio-ingressgateway -n istio-system
...
  type: NodePort
...
複製程式碼

執行下述命令驗證應用:

➜  istio-1.0.5 export INGRESS_HOST=$(kubectl get po -l istio=ingressgateway -n istio-system -o 'jsonpath={.items[0].status.hostIP}')
➜  istio-1.0.5 export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].nodePort}')
➜  istio-1.0.5 export SECURE_INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="https")].nodePort}')
➜  istio-1.0.5 export GATEWAY_URL=$INGRESS_HOST:$INGRESS_PORT
➜  istio-1.0.5 curl -o /dev/null -s -w "%{http_code}\n" http://$GATEWAY_URL/productpage
200
➜  istio-1.0.5 echo $GATEWAY_URL
192.168.101.6:31380
複製程式碼

可以看到返回結果code為200,說明http通訊沒有問題,我們到瀏覽器上驗證一下

Istio Mixer Adapter開發 (二)Istio環境搭建
如圖,驗證成功,至此我們已經安裝好了Kubernetes + Istio的基礎環境,下一步我們來將一個已經開發好的Custom Mixer Adapter安裝到環境中

相關文章