安装&部署

首先部署istio之前你需要有一套kubernetes集群,如果没有可以参照我之前写的文章进行操作ubuntu 18.04 基于kubeadm 搭建kubernetes 1.15.0
部署好之后就可以继续后面的istio的安装部署

istio 1.5.1 安装

  • 首先要下载istio的安装包,默认会下载最新的版本,当前是1.7,由于我的k8s集群是1.5的版本它支持的istio是1.5.1,所以只能指定版本下载
//下载安装包 默认下载最新版本
curl -L https://istio.io/downloadIstio | sh -
// 下载指定版本
curl -L https://istio.io/downloadIstio | ISTIO_VERSION=1.5.1 sh -


//进入安装目录
cd istio-1.5.0

//配置istio 命令工具
export PATH=$PWD/bin:$PATH

//执行安装命令安装demo版本用于测试以及后续的功能特性练习,这个版本包括了istio的几乎所有功能特性
istioctl manifest apply --set profile=demo

// 安装之后可以看到生成了istio-system 的ns
root@kube1:~/istio/istio-1.5.1# kubectl get ns
NAME              STATUS   AGE
default           Active   436d
ingress-nginx     Active   26d
istio-system      Active   15m
kube-node-lease   Active   436d
kube-public       Active   436d
kube-system       Active   436d
monitoring        Active   26d
test              Active   36d

//查看istio需要的crd
root@kube1:~/istio/istio-1.5.1# kubectl get crd | grep istio
adapters.config.istio.io                   2020-09-03T08:31:55Z
attributemanifests.config.istio.io         2020-09-03T08:31:55Z
authorizationpolicies.security.istio.io    2020-09-03T08:31:56Z
clusterrbacconfigs.rbac.istio.io           2020-09-03T08:31:56Z
destinationrules.networking.istio.io       2020-09-03T08:31:56Z
envoyfilters.networking.istio.io           2020-09-03T08:31:56Z
gateways.networking.istio.io               2020-09-03T08:31:56Z
handlers.config.istio.io                   2020-09-03T08:31:56Z
httpapispecbindings.config.istio.io        2020-09-03T08:31:56Z
httpapispecs.config.istio.io               2020-09-03T08:31:56Z
instances.config.istio.io                  2020-09-03T08:31:56Z
meshpolicies.authentication.istio.io       2020-09-03T08:31:56Z
peerauthentications.security.istio.io      2020-09-03T08:31:56Z
policies.authentication.istio.io           2020-09-03T08:31:56Z
quotaspecbindings.config.istio.io          2020-09-03T08:31:57Z
quotaspecs.config.istio.io                 2020-09-03T08:31:57Z
rbacconfigs.rbac.istio.io                  2020-09-03T08:31:57Z
requestauthentications.security.istio.io   2020-09-03T08:31:57Z
rules.config.istio.io                      2020-09-03T08:31:57Z
serviceentries.networking.istio.io         2020-09-03T08:31:57Z
servicerolebindings.rbac.istio.io          2020-09-03T08:31:57Z
serviceroles.rbac.istio.io                 2020-09-03T08:31:57Z
sidecars.networking.istio.io               2020-09-03T08:31:57Z
templates.config.istio.io                  2020-09-03T08:31:57Z
virtualservices.networking.istio.io        2020-09-03T08:31:57Z

到这里istio集群就算安装好了

demo 展示

demo应用安装

  • 安装这个应用主要是为了后续用来展示istio的各种功能特性
//安装应用服务
root@kube1:~/istio/istio-1.5.1# kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
service/details created
serviceaccount/bookinfo-details created
deployment.apps/details-v1 created
service/ratings created
serviceaccount/bookinfo-ratings created
deployment.apps/ratings-v1 created
service/reviews created
serviceaccount/bookinfo-reviews created
deployment.apps/reviews-v1 created
deployment.apps/reviews-v2 created
deployment.apps/reviews-v3 created
service/productpage created
serviceaccount/bookinfo-productpage created
deployment.apps/productpage-v1 created

//查看安装好的services
root@kube1:~/istio/istio-1.5.1# kubectl get svc
NAME          TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
details       ClusterIP   10.110.144.165   <none>        9080/TCP   58s
kubernetes    ClusterIP   10.96.0.1        <none>        443/TCP    436d
productpage   ClusterIP   10.105.192.136   <none>        9080/TCP   57s
ratings       ClusterIP   10.107.217.152   <none>        9080/TCP   58s
reviews       ClusterIP   10.106.162.155   <none>        9080/TCP   57s

//pod是running状态表示服务可以正常运行
root@kube1:~/istio/istio-1.5.1# kubectl get pod
NAME                              READY   STATUS    RESTARTS   AGE
details-v1-74f858558f-t9jbp       1/1     Running   0          9m39s
productpage-v1-76589d9fdc-lvqlj   1/1     Running   0          9m37s
ratings-v1-7855f5bcb9-5mnl8       1/1     Running   0          9m38s
reviews-v1-64bc5454b9-jhtnd       1/1     Running   0          9m38s
reviews-v2-76c64d4bdf-lnwc2       1/1     Running   0          9m38s
reviews-v3-5545c7c78f-7xw9s       1/1     Running   0          9m38s

demo 应用介绍

  • 这个应用是一个在线书店,可以展示各种书的信息包括书的介绍、详细信息、以及各种评论
  • 这个书店应用被分为4个微服务:productpage、details、reviews、ratings
  • productpage 微服务调用details、reviews来去展示网页信息
  • details 包含书的信息
  • reviews 包含评论信息 也会调用ratings 服务
  • ratings 包含书的排名信息
  • reviews 包含三个版本的实例
    • Version v1 不会调用ratings service
    • Version v2 会调用 ratings service,同时会展示排名1-5黑星的排名
    • Version v3 会调用ratings service,同时会展示排名1-5红星的排名
  • 整个应用的架构如下

在这里插入图片描述

demo应用 访问

  • 服务安装好后还不能对外提供访问,还需要安装网关
root@kube1:~/istio/istio-1.5.1# kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml
gateway.networking.istio.io/bookinfo-gateway created
virtualservice.networking.istio.io/bookinfo created
  • 其中gateway 能让外界访问

  • virtualservice提供一些基本的路由配置

  • 配置好之后需要获取访问应用的host和port
    首先执行

root@kube1:~# kubectl get svc istio-ingressgateway -n istio-system
NAME                   TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)                                                                                                                                      AGE
istio-ingressgateway   LoadBalancer   10.105.92.210   <pending>     15020:30871/TCP,80:30890/TCP,443:31967/TCP,15029:31505/TCP,15030:30426/TCP,15031:32381/TCP,15032:32421/TCP,31400:31148/TCP,15443:30942/TCP   68m

如果EXTERNAL-IP 有对应的ip,那么它就是对外暴露的ip,如果这一项是none或者pending,说明集群没有外部的负载均衡来支持ingress gateway,那我们只能通过访问service的node port来访问服务

执行如下命令分别得到node ip和port

//port 30890
kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].nodePort}'
//ip 192.168.188.130
kubectl get po -l istio=ingressgateway -n istio-system -o jsonpath='{.items[0].status.hostIP}'

最后访问host:ip即可访问应用的页面了

curl 192.168.188.130:30890/productpage

如果在浏览器访问这个地址,并且不断刷新你就可以看到在productpage页面展现不同了不同reviews服务的内容,这是因为还没有用Istio的控制平面去控制请求的路由
在这里插入图片描述

参看:

  • https://istio.io/latest/docs/setup/getting-started/#download
  • https://istio.io/latest/docs/examples/bookinfo/
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐