OpenTracing
支持,向下兼容 ZipKin
;OpenTracing
规范对应用进行改写。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
# 直接修改 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
# 样例服务在 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 。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
/fetch_with_header
方法,可以观察 header 传递过程中的变化:bash-4.4# do http http://flaskapp/fetch_with_header?url=http://httpbin:8000/get
flaskapp
,表示 sleep --> flaskapp
的请求内容;httpbin
,表示 flaskapp --> httpbin
的请求内容。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.
# 直接修改 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/
原文:https://www.cnblogs.com/netonline/p/12219176.html