参考

1. 使用 Jaeger

  • jaegertracing/jaeger 是一个用于分布式跟踪的开源软件,提供原生 OpenTracing 支持,向下兼容 ZipKin
  • istio 中采用 Jaeger 作为分布式跟踪组件;
  • istio sidecar 为网格中的应用提供的跟踪功能只能提供调用环节的数据,如果需要支持整条链路,需要根据 OpenTracing 规范对应用进行改写。

1.1 启用 Jaeger

1.1.1 定制 Jaeger values.yaml

  • Jaeger 默认不启用,需要定制安装清单,可以通过 helm template--set 参数定制安装清单文件。
# 同时启用 "ingress" ,开放服务
vim install/kubernetes/helm/istio/charts/tracing/values.yaml ingress:
# 启用 "ingress",默认值 "false"
enabled: true
# Used to create an Ingress record.
hosts:
# 修改 "domain"
- tracing.istio
annotations:
# kubernetes.io/ingress.class: nginx
# kubernetes.io/tls-acme: "true"
tls:
# Secrets must be manually created in the namespace.
# - secretName: tracing-tls
# hosts:
# - tracing.local

1.1.2 渲染并启用 Jaeger

# 直接修改 Jaeger 的 `values.yaml` 文件的 "enabled: false" 为 "enabled: true" 并不生效;
# 但修改 `values.yaml` 文件的其余部分是有效的
helm template install/kubernetes/helm/istio \
--set tracing.enabled=true \
--name istio \
--namespace istio-system > default-tracing.yaml # 查看资源对象
kubectl get pod -n istio-system -w # `values.yaml` 文件的 "contextPath" 参数不体现,默认值即 "/jaeger"
URL: http://tracing.istio/jaeger/ # 构建流量观察 jaeger 服务
kubectl exec -it -c sleep $(kubectl get pod -l app=sleep,version=v1 -o jsonpath={.items[0].metadata.name}) /bin/bash
bash-4.4# for i in `seq 100` ; do http --body http://flaskapp/env/version ; done

1.2 跟踪参数传递

1.2.1 孤立的跟踪信息

# 样例服务在 istio 源代码的 samples 目录下
cd istio-1.1.7/samples/httpbin
kubectl apply -f httpbin.yaml # 在 "sleep" 服务的 Pod 内发起请求,要求 "flaskapp" 调用 "httpbin" 服务的 "/get" 路径,并返回 "httpbin" 给出的响应,同时要显示 "sleep" 发出的请求 Header 的内容;
# 完整路径:"sleep" --> "flaskapp" --> "httpbin",但 "OpenTracing" 所依赖的 `header` 没有被传递,导致 Jaeger 无法确定调用之间的关系
kubectl exec -it -c sleep $(kubectl get pod -l app=sleep,version=v1 -o jsonpath={.items[0].metadata.name}) /bin/bash
bash-4.4# http --debug http://flaskapp/fetch_with_header?url=http://httpbin:8000/get
  • 返回信息中,requests.request 是 httpie 客户端发出请求的 header 的原始内容;
  • flaskapp 收到的 header 内容中有一系列 "X-*" 的请求 header ,是 Evory 代理对请求进行的修改,其中包含分布式跟踪所需要的 Request-Id 等请求 header 。

1.2.2 跟踪参数传递

1.2.2.1 fetch_with_trace
  • flaskapp 服务的代码中定义了一个 fetch_with_trace 方法:
# 路径:"/app/main.py"
@app.route('/fetch_with_trace')
def fetch_with_trace():
url = request.args.get('url', '')
request_headers = dict(request.headers)
new_header = {}
for key in request_headers.keys():
if key.lower() in TRACE_HEADERS:
new_header[key] = request_headers[key] req = Request(url, headers = new_header)
return urlopen(req).read()
  • 通过 fetch_with_trace 方法:将中间服务收到的请求在进行下一级请求时,将其中用于跟踪的 header 传递下去,即可将孤立的跟踪信息融合在一起。
kubectl exec -it -c sleep $(kubectl get pod -l app=sleep,version=v1 -o jsonpath={.items[0].metadata.name}) /bin/bash
bash-4.4# for i in `seq 100` ; do http http://flaskapp/fetch_with_trace?url=http://httpbin:8000/ip ; done
1.2.2.1 fetch_with_header
  • 通过 /fetch_with_header 方法,可以观察 header 传递过程中的变化:
bash-4.4# do http http://flaskapp/fetch_with_header?url=http://httpbin:8000/get
  • 返回两组 http header :

    • 第一组来自 flaskapp ,表示 sleep --> flaskapp 的请求内容;
    • 第二组来自 httpbin ,表示 flaskapp --> httpbin 的请求内容。

2. 使用 Kiali

  • kiali 也是一个用于 istio 可视化的软件:
  • 与 Grafana & Prometheus 不同的是,Kiali 目前专用于 istio 系统;
  • 除提供监控,可视化,跟踪等通用功能外,还专门提供了 istio 的配置验证,健康评估等高级功能。

2.1 启用 Kiali

2.1.1 定制 Kiali values.yaml

  • Kiali 默认未启用,需要定制安装清单,可以通过 helm template--set 参数渲染定制安装清单文件。
# 同时启用 "ingress" ,开放服务
vim install/kubernetes/helm/istio/charts/kiali/values.yaml # 使用当前最新(2019年6月前后)稳定镜像
tag: v0.20
# "ingress" 资源的 "spec.rules.host.http.paths.path" 字段,即 "subpath"
contextPath: /kiali ingress:
# 启用 "ingress",默认值 "false"
enabled: true
# Used to create an Ingress record.
hosts:
# 修改 "domain"
- kiali.istio
annotations:
# kubernetes.io/ingress.class: nginx
# kubernetes.io/tls-acme: "true"
tls:
# Secrets must be manually created in the namespace.
# - secretName: kiali-tls
# hosts:
# - kiali.local dashboard:
# 以名为 "kiali" 的 "Secret" 对象传递登陆账号与密码
secretName: kiali # You must create a secret with this name - one is not provided out-of-box.
# 重定向,以 "ConfigMap" 对象的形式挂载到工作负载
# 注意:可以被访问的外部地址
grafanaURL: http://grafana:3000 # If you have Grafana installed and it is accessible to client browsers, then set this to its external URL. Kiali will redirect users to this URL when Grafana metrics are to be shown.
jaegerURL: http://tracing:80 # If you have Jaeger installed and it is accessible to client browsers, then set this property to its external URL. Kiali will redirect users to this URL when Jaeger tracing is to be shown.

2.1.2 渲染并启用 Kiali

# 直接修改 Jaeger 的 `values.yaml` 文件的 "enabled: false" 为 "enabled: true" 并不生效;
# 但修改 `values.yaml` 文件的其余部分是有效的
helm template install/kubernetes/helm/istio \
--set kiali.enabled=true \
--name istio \
--namespace istio-system > default-tracing.yaml # 创建 "Secret" 对象 "kiali"
kubectl create secret generic kiali -n istio-system --from-literal "username=admin" --from-literal "passphrase=admin" # 查看资源对象
kubectl get pod -n istio-system -w # 访问地址
URL: http://kiali.istio/kiali/

istio部署-istio jaeger & kiali的更多相关文章

  1. istio部署-istio prometheus

    参考 fleeto/sleep fleeto/flaskapp 1. 使用 Prometheus 1.1 访问 Prometheus 1.1.1 端口转发 Prometheus 服务默认启用. # o ...

  2. istio部署-helm

    参考 istio/istio istio/Kubernetes Customizable Install with Helm Istio安装参数介绍 1. Istio Chart 目录结构 PATH: ...

  3. 第五章 用Helm部署Istio

    5.1 Istio Chart概述 Helm是目前Istio官方推荐的安装方式.还可以对输入值进行一些调整,完成对Istio的部分配置工作.Istio Chart是一个总分结构,其分级结构和设计结构是 ...

  4. K8s下部署Istio

    一.环境准备 1.1环境信息 主机名 IP地址 用途 zhengzw-k8s-master 10.10.100.7 K8s Master zhengzw-k8s-node-1 10.10.100.15 ...

  5. istio部署-快速入门

    参考 istio/istio Quick Start Evaluation Install fleeto/sleep fleeto/flaskapp 本文为 istio 快速入门部署,一般用于演示环境 ...

  6. istio部署

    Istio的部署介绍 目录 Istio的部署介绍 部署模型 集群模式 单集群 多集群 网络模型 单网络 多网络 控制面模型 身份和信任模型 网格中的信任 网格之间的信任 网格模型 单网格 多网格 租户 ...

  7. [Istioc]Istio部署sock-shop时rabbitmq出现CrashLoopBackOff

    因Istio官网自带的bookinfo服务依赖关系较少,因此想部署sock-shop进行进一步的实验. kubectl apply -f <(istioctl kube-inject -f so ...

  8. [Istio]Kubernetes集群部署Istio 1.0

    大部分内容都是可以根据https://istio.io/docs/setup/kubernetes/quick-start/来处理的,这里主要谈部署时一些细节的问题 首先,当我们按照 istio 官方 ...

  9. 让istio中的jaeger跑起来

    现在的水平,仅止于让它跑起来.:) 同样的环境,microk8s+istio. 步骤如下: 一,使用kubectl get pod -n istio-system查看所有istio的POD运行正常. ...

随机推荐

  1. pycharm-1

    Python 1.4解释器(运行文件) 1.5注释:#单行,ctrl+/ 多行注释       ””” ””” 2.1变量 assert,except:lambda; nonlocal; 2.2数据类 ...

  2. STL-set&&multiset 集合

    #include <iostream> #include <cstdio> #include <set> // 仿函数的原型 //struct greaters / ...

  3. selenium等待机制

    等待机制 ​ 因为你要查找的标签由于网速等原因迟迟没有加载出来,你就直接获取这个标签,很明显是报错,现有的简单粗暴的解决办法就是time.sleep(3),睡几秒,也就是设置线程等待,等这个标签加载出 ...

  4. BugkuCTF flag.php(反序列化)

    进去后是个登录页面,但是login根本不会跳转,看源码也没提示,但是这道题给了一个提示:hint,那么盲猜应该是一个get参数,因为post不能跳转,那么get总有内容吧,跟上hint参数,随便赋一个 ...

  5. EOFError: Compressed file ended before the end-of-stream marker was reached解决办法(在Windows下查看已下载的MNIST数据文件)

    出现这个问题的原因是因为文件下载到一半就中断了,解决办法是删除datasets中下载到一半的数据包. 下面以我遇到的问题为例: 我下载数据下载到最后一个包就没有反应了,于是我强制终止了运行,可能是因为 ...

  6. flex 属性

    一.flex-direction(元素排列方向) 1.flex-direction:row://从左到右排列 2.flex-direction:column://从上往下排列 二.flex-wrap( ...

  7. 支付宝网站支付接口配置 RSA 公钥 私钥

    个人博客 地址:http://www.wenhaofan.com/article/20190419143333 下载签名工具 访问:https://docs.open.alipay.com/291/1 ...

  8. BurpSuite 汉化版(含注册机)安装教程

      1.注册机使用方法 首先需要完成java安装及环境变量配置. 打开burp-loader-keygen.jar(注册机)--点击run--license text (随意写)--然后将生成的lic ...

  9. 关闭 APIPA

    遇到的问题:我在网卡2上设置了静态ip,可是出现了一个奇怪的ip地址169.254.*.*,如下图. 解决方法:关闭APIPA功能 按照下述的做法,自己在win7企业版上尝试了下,有效.不再出现169 ...

  10. ORACLE10G非归档模式下异机迁库(文件迁移)

    环境信息: 源库 目标库 操作系统 WIN7 WIN SVR 2012 R2 系统盘符 C,D,E,F C,D IP x.x.x.216 x.x.x.112 数据库版本 10.2.0.4.0 - 64 ...