# 安装istio 本文根据官网的文档整理而成,步骤包括安装`istio 0.1.5`并创建一个bookinfo的微服务来测试istio的功能。 文中使用的yaml文件可以在[kubernetes-handbook](https://github.com/rootsongjc/kubernetes-handbook)的`manifests/istio`目录中找到,所有的镜像都换成了我的私有镜像仓库地址,请根据官网的镜像自行修改。 ## 安装环境 CentOS 7.3.1611 Docker 1.12.6 Kubernetes 1.6.0 ## 安装 **1.下载安装包** 下载地址:https://github.com/istio/istio/releases 下载Linux版本的当前最新版安装包 ```Shell wget https://github.com/istio/istio/releases/download/0.1.5/istio-0.1.5-linux.tar.gz ``` **2.解压** 解压后,得到的目录结构如下: ``` . ├── bin │   └── istioctl ├── install │   └── kubernetes │   ├── addons │   │   ├── grafana.yaml │   │   ├── prometheus.yaml │   │   ├── servicegraph.yaml │   │   └── zipkin.yaml │   ├── istio-auth.yaml │   ├── istio-rbac-alpha.yaml │   ├── istio-rbac-beta.yaml │   ├── istio.yaml │   ├── README.md │   └── templates │   ├── istio-auth │   │   ├── istio-auth-with-cluster-ca.yaml │   │   ├── istio-cluster-ca.yaml │   │   ├── istio-egress-auth.yaml │   │   ├── istio-ingress-auth.yaml │   │   └── istio-namespace-ca.yaml │   ├── istio-egress.yaml │   ├── istio-ingress.yaml │   ├── istio-manager.yaml │   └── istio-mixer.yaml ├── istio.VERSION ├── LICENSE └── samples ├── apps │   ├── bookinfo │   │   ├── bookinfo.yaml │   │   ├── cleanup.sh │   │   ├── destination-ratings-test-delay.yaml │   │   ├── loadbalancing-policy-reviews.yaml │   │   ├── mixer-rule-additional-telemetry.yaml │   │   ├── mixer-rule-empty-rule.yaml │   │   ├── mixer-rule-ratings-denial.yaml │   │   ├── mixer-rule-ratings-ratelimit.yaml │   │   ├── README.md │   │   ├── route-rule-all-v1.yaml │   │   ├── route-rule-delay.yaml │   │   ├── route-rule-reviews-50-v3.yaml │   │   ├── route-rule-reviews-test-v2.yaml │   │   ├── route-rule-reviews-v2-v3.yaml │   │   └── route-rule-reviews-v3.yaml │   ├── httpbin │   │   ├── httpbin.yaml │   │   └── README.md │   └── sleep │   ├── README.md │   └── sleep.yaml └── README.md 11 directories, 41 files ``` 从文件里表中可以看到,安装包中包括了kubernetes的yaml文件,示例应用和安装模板。 **3.安装istioctl** 将`./bin/istioctl`拷贝到你的`$PATH`目录下。 **4.检查RBAC** 因为我们安装的kuberentes版本是1.6.0默认支持RBAC,这一步可以跳过。如果你使用的其他版本的kubernetes,请参考[官方文档](https://istio.io/docs/tasks/installing-istio.html)操作。 执行以下命令,正确的输出是这样的: ```bash $ kubectl api-versions | grep rbac rbac.authorization.k8s.io/v1alpha1 rbac.authorization.k8s.io/v1beta1 ``` **5.创建角色绑定** ```bash $ kubectl create -f install/kubernetes/istio-rbac-beta.yaml clusterrole "istio-manager" created clusterrole "istio-ca" created clusterrole "istio-sidecar" created clusterrolebinding "istio-manager-admin-role-binding" created clusterrolebinding "istio-ca-role-binding" created clusterrolebinding "istio-ingress-admin-role-binding" created clusterrolebinding "istio-sidecar-role-binding" created ``` 注意:官网的安装包中的该文件中存在RoleBinding错误,应该是集群级别的`clusterrolebinding`,而release里的代码只是普通的`rolebinding`,查看该Issue [Istio manager cannot list of create k8s TPR when RBAC enabled #327](https://github.com/istio/istio/issues/327)。 **6.安装istio核心组件** 用到的镜像有: ``` docker.io/istio/mixer:0.1.5 docker.io/istio/manager:0.1.5 docker.io/istio/proxy_debug:0.1.5 ``` 我们暂时不开启[Istio Auth](https://istio.io/docs/concepts/network-and-auth/auth.html)。 > 本文中用到的所有yaml文件中的`type: LoadBalancer`去掉,使用默认的ClusterIP,然后配置Traefik ingress,就可以在集群外部访问。请参考[安装Traefik ingress](practice/traefik-ingress-installation.md)。 ```bash kubectl apply -f install/kubernetes/istio.yaml ``` **7.安装监控插件** 用到的镜像有: ``` docker.io/istio/grafana:0.1.5 quay.io/coreos/prometheus:v1.1.1 gcr.io/istio-testing/servicegraph:latest docker.io/openzipkin/zipkin:latest ``` 为了方便下载,其中两个镜像我备份到了时速云: ``` index.tenxcloud.com/jimmy/prometheus:v1.1.1 index.tenxcloud.com/jimmy/servicegraph:latest ``` 安装插件 ```bash kubectl apply -f install/kubernetes/addons/prometheus.yaml kubectl apply -f install/kubernetes/addons/grafana.yaml kubectl apply -f install/kubernetes/addons/servicegraph.yaml kubectl apply -f install/kubernetes/addons/zipkin.yaml ``` 在traefik ingress中增加增加以上几个服务的配置。 ```Yaml - host: grafana.istio.io http: paths: - path: / backend: serviceName: grafana servicePort: 3000 - host: servicegraph.istio.io http: paths: - path: / backend: serviceName: servicegraph servicePort: 8088 - host: prometheus.istio.io http: paths: - path: / backend: serviceName: prometheus servicePort: 9090 - host: zipkin.istio.io http: paths: - path: / backend: serviceName: zipkin servicePort: 9411 ``` Grafana页面 ![Istio Grafana界面](../images/istio-grafana.jpg) Prometheus页面 ![Prometheus页面](../images/istio-prometheus.jpg) Zipkin页面 ![Zipkin页面](../images/istio-zipkin.jpg) ## 测试 我们使用Istio提供的测试应用[bookinfo](https://istio.io/docs/samples/bookinfo.html)微服务来进行测试。 该微服务用到的镜像有: ``` istio/examples-bookinfo-details-v1 istio/examples-bookinfo-ratings-v1 istio/examples-bookinfo-reviews-v1 istio/examples-bookinfo-reviews-v2 istio/examples-bookinfo-reviews-v3 istio/examples-bookinfo-productpage-v1 ``` **部署应用** ``` kubectl create -f <(istioctl kube-inject -f samples/apps/bookinfo/bookinfo.yaml) ``` `Istio kube-inject`命令会在`bookinfo.yaml`文件中增加Envoy sidecar信息。参考:https://istio.io/docs/reference/commands/istioctl.html#istioctl-kube-inject ## 问题 在bookinfo部署后没有在Grafana、Prometheus、ServiceGraph和Zipkin中看到结果。 ## 参考 [Installing Istio](https://istio.io/docs/tasks/installing-istio.html) [BookInfo sample](https://istio.io/docs/samples/bookinfo.html)