文章目录
安装&部署istio 1.5.1 安装
demo 展示demo应用安装demo 应用介绍demo应用 访问
安装&部署
首先部署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、ratingsproductpage 微服务调用details、reviews来去展示网页信息details 包含书的信息reviews 包含评论信息 也会调用ratings 服务ratings 包含书的排名信息reviews 包含三个版本的实例
Version v1 不会调用ratings serviceVersion 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/#downloadhttps://istio.io/latest/docs/examples/bookinfo/