Istio 测试环境搭建和功能演示

本文提供Windows 10下Istio环境的配置安装步骤,以及简单的Bookinfo示例功能验证。首先搭建一个基于Minikube和VirtualBox的本地Kubernetes集群,随后安装配置Istio,最后验证Bookinfo示例。

Istio 介绍: https://istio.io/docs/concepts/what-is-istio/

1. 本地环境

2. 安装 VirtualBox

https://download.virtualbox.org/virtualbox/6.0.12/VirtualBox-6.0.12-133076-Win.exe

3. 安装 Git

https://git-scm.com/download/win
安装后续软件使用 Git Bash,可以直接运行类Linux命令。

4. 安装 Kubectl

Git Bash下执行命令:
(1) curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.16.0/bin/windows/amd64/kubectl.exe
(2) 将kubectl.exe所在目录加入到系统环境变量

(3)验证kubectl工作是否正常

$ kubectl version
Client Version: version.Info{Major:"1", Minor:"15", GitVersion:"v1.15.0", GitCommit:"e8462b5b5dc2584fdcd18e6bcfe9f1e4d970a529", GitTreeState:"clean", BuildDate:"2019-06-19T16:40:16Z", GoVersion:"go1.12.5", Compiler:"gc", Platform:"windows/amd64"}

5. 安装 Minikube

(1)下载安装 https://storage.googleapis.com/minikube/releases/v1.3.1/minikube-windows-amd64.exe
(2)设置系统环境变量
(3)验证minikube

$ minikube version
minikube version: v1.3.1
commit: ca60a424ce69a4d79f502650199ca2b52f29e631

6. 创建本地Kubernetes集群

(1)创建集群命令

minikube -v=9 start --memory=8192 --cpus=4 --kubernetes-version=v1.15.3 \--extra-config=controller-manager.cluster-signing-cert-file="/var/lib/localkube/certs/ca.crt" \--extra-config=controller-manager.cluster-signing-key-file="/var/lib/localkube/certs/ca.key" \--vm-driver=virtualbox

(2)验证创建结果

$ minikube ip
192.168.99.100$ kubectl get nodes
NAME       STATUS   ROLES    AGE   VERSION
minikube   Ready    master   47h   v1.15.3

如果失败,可以执行以下命令,之后重新创建集群。
minikube delete
rm -rf C:\Users*your-username*.minikube

7. 安装配置Istio

(1)下载解压Windows版本Istio
https://github.com/istio/istio/releases/download/1.2.6/istio-1.2.6-win.zip
(2)将istio-1.2.6-win/bin/istioctl.exe拷贝至kubectl.exe所在目录
(3)验证和配置Istio

$ which istioctl
/c/Users/your-username/Desktop/work/k8s/kubectl/istioctl$ cd ./istio-*$ for i in install/kubernetes/helm/istio-init/files/crd*yaml; do kubectl apply -f $i; done$ kubectl apply -f install/kubernetes/istio-demo-auth.yaml$ kubectl get svc -n istio-system
NAME                     TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)                                                                                                                                      AGE
grafana                  ClusterIP      10.99.187.90     <none>        3000/TCP                                                                                                                                     45h
istio-citadel            ClusterIP      10.104.37.15     <none>        8060/TCP,15014/TCP                                                                                                                           45h
istio-egressgateway      ClusterIP      10.103.42.176    <none>        80/TCP,443/TCP,15443/TCP                                                                                                                     45h
istio-galley             ClusterIP      10.102.157.153   <none>        443/TCP,15014/TCP,9901/TCP                                                                                                                   45h
istio-ingressgateway     LoadBalancer   10.97.52.238     <pending>     15020:31041/TCP,80:31380/TCP,443:31390/TCP,31400:31400/TCP,15029:30619/TCP,15030:30708/TCP,15031:31966/TCP,15032:32377/TCP,15443:31632/TCP   45h
istio-pilot              ClusterIP      10.96.222.75     <none>        15010/TCP,15011/TCP,8080/TCP,15014/TCP                                                                                                       45h
istio-policy             ClusterIP      10.105.67.226    <none>        9091/TCP,15004/TCP,15014/TCP                                                                                                                 45h
istio-sidecar-injector   ClusterIP      10.97.96.12      <none>        443/TCP,15014/TCP                                                                                                                            45h
istio-telemetry          ClusterIP      10.104.21.26     <none>        9091/TCP,15004/TCP,15014/TCP,42422/TCP                                                                                                       45h
jaeger-agent             ClusterIP      None             <none>        5775/UDP,6831/UDP,6832/UDP                                                                                                                   45h
jaeger-collector         ClusterIP      10.105.100.53    <none>        14267/TCP,14268/TCP                                                                                                                          45h
jaeger-query             ClusterIP      10.99.174.212    <none>        16686/TCP                                                                                                                                    45h
kiali                    ClusterIP      10.105.246.44    <none>        20001/TCP                                                                                                                                    45h
prometheus               ClusterIP      10.99.26.56      <none>        9090/TCP                                                                                                                                     45h
tracing                  ClusterIP      10.96.39.56      <none>        80/TCP                                                                                                                                       45h
zipkin                   ClusterIP      10.104.108.48    <none>        9411/TCP                                                                                                                                     45h$ kubectl get pods -n istio-system
NAME                                           READY   STATUS      RESTARTS   AGE
grafana-59d57c5c56-52q4f                       1/1     Running     0          45h
istio-citadel-67fbbbd796-7s7f6                 1/1     Running     0          45h
istio-cleanup-secrets-1.3.0-rc.3-nfx6f         0/1     Completed   0          45h
istio-egressgateway-7464447ccc-tnlf2           1/1     Running     0          45h
istio-galley-6949869b89-k2rrw                  1/1     Running     0          45h
istio-grafana-post-install-1.3.0-rc.3-gpf2r    0/1     Completed   0          45h
istio-ingressgateway-754876f9d8-52zv4          1/1     Running     0          45h
istio-pilot-7f74b7dbb6-c4gvx                   2/2     Running     0          45h
istio-policy-5fddb7bb4c-2s9pd                  2/2     Running     4          45h
istio-security-post-install-1.3.0-rc.3-dsfx4   0/1     Completed   0          45h
istio-sidecar-injector-6b8fb9c4cc-78xpv        1/1     Running     0          45h
istio-telemetry-8b6bf59cf-4zvkf                2/2     Running     5          45h
istio-tracing-6bbdc67d6c-n7jxn                 1/1     Running     0          45h
kiali-678c57d9d8-hsffp                         1/1     Running     0          45h
prometheus-7d7b9f7844-8cx7s                    1/1     Running     0          45hPod需要几分钟变成Running状态。

8. 部署验证Bookinfo

可以通过连接了解bookinfo服务的架构信息:https://istio.io/docs/examples/bookinfo/

(1)手动将边车插入pod

istioctl kube-inject -f samples/bookinfo/platform/kube/bookinfo.yaml | less

(2)为边车注入添加标签

$ kubectl label namespace default istio-injection=enabled$ kubectl get ns default -o yaml
apiVersion: v1
kind: Namespace
metadata:creationTimestamp: "2019-09-17T07:30:18Z"labels:istio-injection: enabled name: defaultresourceVersion: "97946"selfLink: /api/v1/namespaces/defaultuid: 96b640f7-e7be-448f-b947-7b2bb021a1ca
spec:finalizers:- kubernetes
status:phase: Active

(3)部署bookinfo应用

$ kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml$ kubectl get svc
NAME          TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
details       ClusterIP   10.106.0.17     <none>        9080/TCP   25h
kubernetes    ClusterIP   10.96.0.1       <none>        443/TCP    47h
productpage   ClusterIP   10.110.60.39    <none>        9080/TCP   25h
ratings       ClusterIP   10.97.158.27    <none>        9080/TCP   25h
reviews       ClusterIP   10.109.12.122   <none>        9080/TCP   25h$ kubectl get pods
NAME                              READY   STATUS    RESTARTS   AGE
details-v1-74f858558f-fbkld       2/2     Running   0          25h
productpage-v1-8554d58bff-v84wv   2/2     Running   0          25h
ratings-v1-7855f5bcb9-pp6f5       2/2     Running   0          25h
reviews-v1-59fd8b965b-24mpn       2/2     Running   0          25h
reviews-v2-d6cfdb7d6-wphd6        2/2     Running   0          25h
reviews-v3-75699b5cfb-4ldmk       2/2     Running   0          25h

(4) 配置上行网关

$ kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml$ kubectl create -f samples/bookinfo/networking/destination-rule-all-mtls.yaml$ kubectl get svc istio-ingressgateway -n istio-system
NAME                   TYPE           CLUSTER-IP     EXTERNAL-IP   PORT(S)                                                                                                                                      AGE
istio-ingressgateway   LoadBalancer   10.97.52.238   <pending>     15020:31041/TCP,80:31380/TCP,443:31390/TCP,31400:31400/TCP,15029:30619/TCP,15030:30708/TCP,15031:31966/TCP,15032:32377/TCP,15443:31632/TCP   46h$export GATEWAY_URL=$(minikube ip):$(kubectl get svc istio-ingressgateway -n istio-system -o 'jsonpath={.spec.ports[1].nodePort}')
// 1为端口80:31380/TCP的索引,需要根据实际输出进行修改。// 网页访问测试,200表示成功。
$ curl -o /dev/null -s -w "%{http_code}\n" http://${GATEWAY_URL}/productpage
200$ istioctl get virtualservice
Command "get" is deprecated, Use `kubectl get` instead (see https://kubernetes.io/docs/tasks/tools/install-kubectl)
VIRTUAL-SERVICE NAME   GATEWAYS           HOSTS         #HTTP     #TCP      NAMESPACE   AGE
bookinfo               bookinfo-gateway   *                 1        0      default     1d
details                                   details           1        0      default     22h
productpage                               productpage       1        0      default     22h
ratings                                   ratings           1        0      default     22h
reviews                                   reviews           1        0      default     22h$ echo $GATEWAY_URL
192.168.99.100:31380

(5) 浏览器访问http://192.168.99.100:31380/productpage 进行测试,刷新页面可以看到Reviewer位置轮流显示红星、黑星或者没有星号

(6)查看当前目标访问规则

$ istioctl get destinationrules
Command "get" is deprecated, Use `kubectl get` instead (see https://kubernetes.io/docs/tasks/tools/install-kubectl)
DESTINATION-RULE NAME   HOST          SUBSETS                      NAMESPACE   AGE
details                 details       v1,v2                        default     1d
productpage             productpage   v1                           default     1d
ratings                 ratings       v1,v2,v2-mysql,v2-mysql-vm   default     1d
reviews                 reviews       v1,v2,v3                     default     1d

(7)执行下面的命令,并且多次刷新浏览器,观察变化

$ kubectl create -f samples/bookinfo/networking/virtual-service-all-v1.yaml$ kubectl apply -f samples/bookinfo/networking/virtual-service-reviews-test-v2.yaml$ kubectl apply -f samples/bookinfo/networking/virtual-service-reviews-50-v3.yaml

9. 清除环境

$ kubectl delete -f samples/bookinfo/platform/kube/bookinfo.yaml$ kubectl delete -f install/kubernetes/istio-demo-auth.yaml$ minikube delete

Istio测试环境搭建和功能演示相关推荐

  1. Robot Framework测试环境搭建(python3.7.2,pip在线安装)及RIDE的简单操作演示

    Robot Framework测试环境搭建(python3.7.2,pip在线安装)和RIDE的简单操作演示 1.框架介绍 Robot Framework 框架是一个通用的测试框架(基于python) ...

  2. Celery简介及Docker测试环境搭建

    Celery 简介 任务队列一般用于线程或计算机之间分配工作的一种机制. 任务队列的输入是一个称为任务的工作单元,有专门的工作进行不断的监视任务队列,进行执行新的任务工作. Celery 通过消息机制 ...

  3. 高版本Android真机逆向测试环境搭建

    高版本Android真机逆向测试环境搭建 618购入了新机Xiaomi K50,真滴便宜又好用,续航很强界面很丝滑.正好拿来做逆向测试机? 怎么可能!这也太奢侈了!不过淘汰的Xiaomi Note 7 ...

  4. IPv6 MLD测试环境搭建

    简要描述IP v6 MLD_proxy和MLD_snooping的功能定义及测试环境搭建过程 一.MLD的含义 MLD 是Multicast Listener Discovery Protocol(组 ...

  5. 大数据原生集群本地测试环境搭建六

    本篇软件版本 Kylin2.5.1!!!!强烈建议不要和我一样原因下面解释 Datax MongDB_linux-x86_64-4.0.10 clickhouse20.8.3.18-1 集群最后完善 ...

  6. web应用如何确定能同时允许多少用户连接?_Web测试环境搭建+测试要点汇总

    一.Web测试环境搭建 软硬件包括:电脑一台.JDK1.6.Tomcat7.0.mysql.IE浏览器.Firefox浏览器.Chrome浏览器.SVN客户端 通过SVN客户端导出最新的Web工程部署 ...

  7. 微信开发——本地测试环境搭建

    版权声明:欢迎转载,请注明沉默王二原创. https://blog.csdn.net/qing_gee/article/details/52858939 微信开发的本地测试环境搭建起来颇为繁琐(对微信 ...

  8. Activiti Workflow HelloWorld 示例与测试环境搭建

    作者:Rock 出处:http://www.ecmkit.com/zh-hans/2012/03/21/activiti-workflow-hell Activiti Workflow HelloWo ...

  9. USDT(omniCore)测试环境搭建

    一.测试环境搭建. 注:由于window版本的omni出现同步不了的问题,推荐使用linux系统进行usdt测试链的搭建. 1.下载omnicore: wget https://bintray.com ...

最新文章

  1. linux不能识别usb,求助:USB无法识别
  2. Eclipse 中隐藏的 5 个非常有用的功能
  3. creator 静态属性_CocosCreator cc.class声明类
  4. windows docker常用命令
  5. 理解 JavaScript 闭包{转载}
  6. linux命令详解(arm交叉编译器)
  7. 基于静态类型分析的java程序函数调用图构建方法研究,JAVA的静态方法调用
  8. 鸿蒙个人用户怎么申请,鸿蒙OS来了,这些机型的用户可以申请
  9. 如何把一个运行完好的Kafka搞崩
  10. ROS Nodelet使用
  11. android radiogroup 底部菜单,Android底部菜单栏(RadioGroup+Fragment)美化
  12. [2018.10.23 T2] 行星通道计划
  13. [笔记]Qt5+FFMpeg+Opencv 实现实时美颜直播推流《一》基础知识以及直播服务器配置
  14. 计算机知识与技能比赛活动总结,技能大赛总结优秀范文
  15. 这一周我学习了什么(一)
  16. 人工智能与大数据就业前景_大数据与人工智能方面专业未来前途
  17. P1564 膜拜 题解
  18. 运用卡方检验(独立性检验)来分析问卷的两个问题之间的关联性
  19. mysql查缺补漏(一) and or优先级和多表join
  20. 【组成原理系列】微操作与控制单元

热门文章

  1. 中国百年校服史:青春飞扬的几代人[转]
  2. 思维导图与概念图有什么区别
  3. Spring IOC
  4. Rocky Linux操作指南
  5. 桌面linux平板,专为平板打造的Linux发行版JingOS开放下载时间及链接公布
  6. 小说电影里面的“冥想”只是玄学中来修炼的吗?
  7. Use MusicBrainz in iOS(二)通过歌曲名查询信息
  8. 装好卫生间的三大要素
  9. 大数据随记 —— 利用Python分析快手APP全国大学生用户数据(2022 年初赛第四题 )
  10. Ajax局部刷新数据:添加、删除