简介

istio是一个service mesh开源实现,由Google/IBM/Lyft共同开发。与之类似的还有conduit,但是功能不如istio丰富稳定。架构图如下:

istio-0.8版本是第一个长期支持版本,相对于之前的版本配置改动较大。

安装

# 去下面的地址下载压缩包
# https://github.com/istio/istio/releases
wget https://github.com/istio/istio/releases/download/0.8.0/istio-0.8.0-linux.tar.gz
tar xf istio-0.8.0-linux.tar.gz# 使用官方的安装脚本安装
curl -L https://git.io/getLatestIstio | sh -# 安装配置环境变量
mv istio-0.8.0 /usr/local/
ln -sv /usr/local/istio-0.8.0 /usr/local/istio
echo 'export PATH=/usr/local/istio/bin:$PATH' > /etc/profile.d/istio.sh
source /etc/profile.d/istio.sh
istioctl version# 如果环境不是云环境,不支持LoadBalancer
# 作如下修改,使得 ingressgateway 监听在80和443端口
# 修改使用主机端口映射
# 使用此修改版本之后,每台机器只能运行单个实例
# 大概在2661行左右
cd /usr/local/istio
cp install/kubernetes/istio-demo.yaml install/kubernetes/istio-demo.yaml.ori
vim install/kubernetes/istio-demo.yaml
...
# Source: istio/charts/ingressgateway/templates/deployment.yaml
apiVersion: extensions/v1beta1
# kind: Deployment
# 使用DaemonSet部署方式
kind: DaemonSet
metadata:name: istio-ingressgatewaynamespace: istio-systemlabels:app: ingressgatewaychart: ingressgateway-0.8.0release: RELEASE-NAMEheritage: Tilleristio: ingressgateway
spec:# DaemonSet不支持replicas# replicas: template:metadata:labels:istio: ingressgatewayannotations:sidecar.istio.io/inject: "false"spec:serviceAccountName: istio-ingressgateway-service-accountcontainers:- name: ingressgatewayimage: "docker.io/istio/proxyv2:0.8.0"imagePullPolicy: IfNotPresentports:- containerPort: 80#主机80端口映射hostPort: 80- containerPort: 443#主机443端口映射hostPort: 443- containerPort: 31400#主机443端口映射hostPort: 31400
...# 由于镜像问题,提前拉取镜像
# 在所有节点上执行如下命令输出的命令
# 可能会失败,需要多次执行
image=$(grep 'quay.io/coreos/hyperkube' install/kubernetes/istio-demo.yaml | head -1 | awk '{print $2}' | tr -d '"')
echo "docker pull $image"# 以下两种选择一种安装方式
# 安装不使用认证(不使用tls)
kubectl apply -f install/kubernetes/istio-demo.yaml# 安装使用认证(使用tls)
kubectl apply -f install/kubernetes/istio-demo-auth.yaml# 查看状态
kubectl get svc -n istio-system
kubectl get pods -n istio-system# 访问测试
nodeName=$(kubectl get no | grep '<none>' | head -1 | awk '{print $1}')
nodeIP=$(ping -c 1 $nodeName | grep PING | awk '{print $3}' | tr -d '()')
echo "curl -I http://$nodeIP"
复制代码

注意

istio-0.8.0 默认已经开启了自动注入功能以及其他日志监控和追踪的相关组件如

  • istio-tracing
  • istio-telemetry
  • grafana
  • prometheus
  • servicegraph

启用自动注入 sidecar

  • 不开启自动注入部署应用需要使用如下方式的命令

    kubectl apply -f <(istioctl kube-inject -f samples/bookinfo/kube/bookinfo.yaml)

  • 开启自动注入后,使用正常命令即可部署应用

    kubectl apply -f samples/bookinfo/kube/bookinfo.yaml

# istio-0.8.0默认已经开启了自动注入功能# k8s 1.9 及之后的版本才能使用自动注入功能
# 查看是否支持
kubectl api-versions | grep admissionregistration# 除了要满足以上条件外还需要检查kube-apiserver启动的参数
# k8s 1.9 版本要确保 --admission-control 里有 MutatingAdmissionWebhook,ValidatingAdmissionWebhook
# k8s 1.9 之后的版本要确保 --enable-admission-plugins 里有MutatingAdmissionWebhook,ValidatingAdmissionWebhook# 测试自动注入
# 创建
kubectl apply -f samples/sleep/sleep.yaml
kubectl get deployment -o wide
kubectl get pod# 设置 default namespace 开启自动注入
kubectl label namespace default istio-injection=enabled
kubectl get namespace -L istio-injection# 删除创建的pod,等待重建
kubectl delete pod $(kubectl get pod | grep sleep | cut -d ' ' -f 1)# 查看重建后的pod
# 查看是否有istio-proxy容器
kubectl get pod
kubectl describe pod $(kubectl get pod | grep sleep | cut -d ' ' -f 1)# 清理
kubectl delete -f samples/sleep/sleep.yaml # 关闭自动注入
kubectl label namespace default istio-injection-# 关闭部分pod的自动注入功能
...template:metadata:annotations:sidecar.istio.io/inject: "false"
...
复制代码

部署官方测试用例

# 启动(未开启自动注入)
kubectl apply -f <(istioctl kube-inject -f samples/bookinfo/kube/bookinfo.yaml)# 启动(已开启自动注入)
kubectl apply -f samples/bookinfo/kube/bookinfo.yaml# 创建gateway
istioctl create -f samples/bookinfo/routing/bookinfo-gateway.yaml# 查看状态
kubectl get services
kubectl get pods
istioctl get gateway
复制代码

访问测试

# 命令行访问测试
export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http")].nodePort}')
NODE_NAME=$(kubectl get no | grep '<none>' | head -1 | awk '{print $1}')
NODE_IP=$(ping -c 1 $NODE_NAME | grep PING | awk '{print $3}' | tr -d '()')
export GATEWAY_URL=$NODE_IP:$INGRESS_PORT
echo $GATEWAY_URLcurl -o /dev/null -s -w "%{http_code}\n" http://${GATEWAY_URL}/productpage# 浏览器访问测试
echo "http://${GATEWAY_URL}/productpage"# 使用daemonset方式部署可以使用如下方式访问
# 11.11.11.112为其中一个node节点的ip
curl http://11.11.11.112/productpage
复制代码

清理

# 清理官方用例
samples/bookinfo/kube/cleanup.sh# 清理istio
kubectl delete -f install/kubernetes/istio-demo.yaml
# kubectl delete -f install/kubernetes/istio-demo-auth.yaml
复制代码

参考文档

  • https://istio.io/docs/setup/kubernetes/quick-start.html
  • https://istio.io/docs/guides/bookinfo.html
  • https://istio.io/docs/setup/kubernetes/sidecar-injection.html#automatic-sidecar-injection

service mesh istio-0.8安装测试相关推荐

  1. Service Mesh -- Istio概述

    如果你用过微服务,你就会发现,为了解决引入微服务架构所带来的问题,要不断的引入新的技术:服务注册与发现.链路调用跟踪.性能监控.日志收集等等.微服务架构给我们带来方便的同时也会让系统变得越来越复杂,尤 ...

  2. 下一代 Service Mesh -- istio 架构分析

    前面的分享中,我们讲到,出于性能和稳定的考虑,我们没有采用以 istio 为代表的第二代 service mesh技术,而是直接使用了 Envoy 搭配自己的 xDS 服务. 然而我们还是有必要去了解 ...

  3. App5.0 Client安装测试

    在上篇分享中,我给大家分享了服务器的部署,程序抓包过程,程序导入到app-v服务器,那么今天就给大家分享我们的客户端如何安装和配置了,app-v5.0的客户端和以前的客户端大不一样了哦~好了,跟我了解 ...

  4. Service Mesh — Istio

    目录 文章目录 目录 Istio Istio 的软件架构 Istio Istio 提供了一系列高阶的服务治理能力,比如: 服务发现 负载均衡 渐进式交付(灰度发布) 混沌注入与分析 全链路追踪 零信任 ...

  5. OpenShift 4 - 创建Service Mesh运行环境

    <OpenShift 4.x HOL教程汇总> 说明:本文已经在OpenShift 4.10环境中验证 文章目录 安装 OpenShift Service Mesh 和相关依赖 Opera ...

  6. Service Mesh(服务网格)——后 Kubernetes 时代的微服务

    本文转载自:宋净超的博客 这不是一篇教程,本文试图带您梳理清楚 Kubernetes.Envoy(xDS 协议)以及 Istio Service Mesh 之间的关系及内在联系.本文介绍了 Kuber ...

  7. Tensorflow 2.0.0-alpha 安装 Linux系统

    1.TensorFlow2.0的安装测试 Linux python 官网 api :https://tensorflow.google.cn/versions/r2.0/api_docs/python ...

  8. 测试Istio 1.6 Service Mesh引入虚拟机Workload (笔记与感悟)

    序: 五月底Istio官方发布了1.6的正式版, 简化了部署以及对其组件进行了整合. 引起我注意的是Istio正式增强了对非容器形态加入网格的支持, 并声明会做为重要的战略持续优化. 做为VMware ...

  9. Service Mesh:调度千军万马微服务,2.0妥妥的

    冠望 发自 凹非寺 量子位 报道 | 公众号 QbitAI 过去一年,继Kubernetes风靡,Service Mesh已成功上位变成当之无愧的技术网红. TA不但可以极大简化用户使用体验,还将大中 ...

最新文章

  1. pinctrl虚拟spi的linux驱动,LinuxSPI驱动.md
  2. python线下培训-天津python培训,0基础学python线上还是线下好?
  3. Linux find指令
  4. python存储问题_python学习永久存储和异常处理
  5. mysql sqlsugar_.net core +mysqlSugar(最为简单的增删改查)
  6. 我的C语言可变参数的实现
  7. Spring MVC 教程,快速入门,深入分析【转】
  8. Composer的Autoload源码实现2——注册与运行
  9. django返回json格式的数据的方法
  10. dreamweaver cs6配置phonegap环境
  11. 20191202_k-中心聚类算法和k-mean算法Python实现
  12. chrome配置文件校验初始化隐含參数的逆向
  13. ZZULIOJ:1059: 最高分
  14. 无线摄像头接有线如何改协议_WiFi中继器——让无线传输更简单
  15. 破解指纹打卡机 考勤机
  16. TBODY标签的作用介绍
  17. 3.5 计算机网络之介质访问控制(静态划分信道、FDM、TDM、STDM、WDM、CDM)、(动态划分信道、ALOHA、CSMA、CSMA/CD、CSMA/CA)、令牌传递协议
  18. linux进程间信号量
  19. 什么是Excel的快速编号功能?
  20. 修改Matlab的背景颜色

热门文章

  1. android绑定java,Java-android数据绑定-找不到类android.view.data
  2. SQL数据库权限回收revoke
  3. 概率论-2.6 随机变量函数的分布
  4. python类的继承super方法_Python类的继承super相关原理解析
  5. oracle ssh测试不通过,ssh 连接不上 oracle linux 7.2
  6. Sybase identity 字段
  7. Hibernate的拦截器和监听器 .
  8. access violation at address in module Read of address
  9. 【c++】【转】c++中的explicit关键字
  10. 《Java核心技术卷一》p60~p70 学长教我学Java(7)