istio的安裝,流控初步瞭解

istio 安裝

前提:

kubernetes 1.7.3及以上,並開啓RBAC
kubernetes 1.9 以上,支持自動安裝sidecar injectionnode

環境要求:

一、開啓serviceaccount
二、網絡組件
三、有dnslinux

下載源碼包:

cd /usr/local/src/
wget https://github.com/istio/istio/releases/download/0.7.1/istio-0.7.1-linux.tar.gz
tar -zxf istio-0.7.1-linux.tar.gz

安裝

cd istio-0.7.1
cp bin/istioctl /usr/local/sbin/
kubectl apply -f install/kubernetes/istio.yaml

若是要啓動tls

kubectl apply -f install/kubernetes/istio-auth.yamlgit

全部項目在namespace istio-system查看github

image名稱,能夠提早下載docker

docker.io/istio/proxy:0.7.1
docker.io/istio/mixer:0.7.1
docker.io/istio/pilot:0.7.1
docker.io/istio/istio-ca:0.7.1

查看是否安裝成功json

kubectl get svc -n istio-system
NAME            TYPE            CLUSTER-IP      EXTERNAL-IP   PORT(S)                                                             AGE
istio-ingress   LoadBalancer   10.111.150.31    <pending>     80:31691/TCP,443:30512/TCP                                          4h
istio-mixer     ClusterIP      10.100.150.25    <none>        9091/TCP,15004/TCP,9093/TCP,9094/TCP,9102/TCP,9125/UDP,42422/TCP    4h
istio-pilot     ClusterIP      10.108.203.112   <none>        15003/TCP,15005/TCP,15007/TCP,15010/TCP,8080/TCP,9093/TCP,443/TCP   4h

注: 若是集羣不支持load banlance,EXTERNAL-IP 就是pending狀態。能夠設置NodePort或者端口轉發實現訪問

查看pod是否正常

kubectl get pods -n istio-system
NAME                             READY     STATUS    RESTARTS   AGE
istio-ca-5d495f8897-dvpg6        1/1       Running   0          4h
istio-ingress-5b5db76895-wqndc   1/1       Running   0          4h
istio-mixer-db9f8d47d-7gn9h      3/3       Running   0          4h
istio-pilot-84fcc8d4d7-lk9n2     2/2       Running   0          4h

若是是1.9版本,還有pod :istio-sidecar-injector-

部署應用

注:應用必須是 HTTP/1.1 or HTTP/2.0, 由於HTTP/1.0 是不支持的

若是是1.9版本,開啓了pod(istio-sidecar-injector),能夠直接使用kubectl create命令

kubectl label namespace <namespace> istio-injection=enabled
kubectl create -n <namespace> -f <your-app>.yaml

若是沒安裝Istio-sidecar-injector,必須手動添加
kubectl create -f &lt;(istioctl kube-inject -f &lt;your-app&gt;.yaml)api

卸載

一、安裝的時候 啓用 sidecar injector

kubectl delete -f install/kubernetes/istio-sidecar-injector-with-ca-bundle.yaml網絡

二、沒有tls認證:

kubectl delete -f install/kubernetes/istio.yamlapp

三、有tls認證:

kubectl delete -f install/kubernetes/istio-auth.yamlcurl

使用舉例

這裏以helloworld舉例 目錄位置istio-0.7.1/samples/helloworld

由於集羣版本是1.8,沒有內置injector,須要手動更改yaml

istioctl kube-inject -f helloworld.yaml -o helloworld-istio.yaml

使用新的yaml文件,部署服務
kubectl create -f helloworld-istio.yaml

獲取ingress url 和端口

export HELLOWORLD_URL=$(kubectl get po -l istio=ingress -o 'jsonpath={.items[0].status.hostIP}'):$(kubectl get svc istio-ingress -o 'jsonpath={.spec.ports[0].nodePort}')

查看服務是否正常
curl http://$HELLOWORLD_URL/hello

注: 由於集羣沒有loadbalance,只能用nodeport訪問

獲取node ip
kubectl get po -l istio=ingress -n istio-system -o 'jsonpath={.items[0].status.hostIP}'

獲取node port
kubectl get svc istio-ingress -n istio-system -o 'jsonpath={.spec.ports[0].nodePort}'

如今訪問
curl http://$HELLOWORLD_URL/hello

發現規則是輪詢到每一個節點

route-rule編寫

一、只能訪問v1, route-rule-all-v1.yaml

apiVersion: config.istio.io/v1alpha2
kind: RouteRule
metadata:
  name: helloword-default
spec:
  destination:
    name: helloworld
  route:
  - labels:
      version: v1

二、只能訪問v2, route-rule-all-v2.yaml

apiVersion: config.istio.io/v1alpha2
kind: RouteRule
metadata:
  name: helloword-default
spec:
  destination:
    name: helloworld
  route:
  - labels:
      version: v2

istio命令

刪除規則
istioctl delete routerules helloword-default

查看規則
istioctl get routerules

相關文章
相關標籤/搜索