系列導航
- Istio Mixer Adapter開發 (一)K8S環境搭建
- Istio Mixer Adapter開發 (二)Istio環境搭建
- Istio Mixer Adapter開發 (三)自定義Mixer Grpc Adapter部署
概述
上篇,我們從一個全新安裝的VM,安裝了kubeadm + Kubernetes + K8S dashboard
本篇將基於搭建好的K8S環境繼續Istio的環境搭建
動手安裝Istio
首先安裝helm,helm是K8S下的包安裝元件,如果想對helm有進一步瞭解,請移步helm官網
參考如下兩篇文章安裝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的各種功能啟用情況
注意:其實並不是可以任意指定,筆者就因為關掉了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-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通訊沒有問題,我們到瀏覽器上驗證一下
如圖,驗證成功,至此我們已經安裝好了Kubernetes + Istio的基礎環境,下一步我們來將一個已經開發好的Custom Mixer Adapter安裝到環境中