最简单的一种Istio日志记录是Envoy访问日志记录。Envoy代理将访问信息打印到其标准输出。然后,kubectl日志命令可以打印特使容器的标准输出。
1. 准备工作
- 部署sleep应用用于测试
- 开启自动的sidecar注入的话,执行如下
$ kubectl apply -f samples/sleep/sleep.yaml
- 手工注入的话执行如下命令
$ kubectl apply -f <(istioctl kube-inject -f samples/sleep/sleep.yaml)
- 获取source pod的名称并把赋值给
SOURCE_POD
的变量
$ export SOURCE_POD=$(kubectl get pod -l app=sleep -o jsonpath={.items..metadata.name})
- 启动httpbin的服务
- 自动注入sidecar执行如下命令
$ kubectl apply -f samples/httpbin/httpbin.yaml
- 手工注入sidecar的话,执行如下命令
$ kubectl apply -f <(istioctl kube-inject -f samples/httpbin/httpbin.yaml)
2. 开启Envoy’s的访问日志
$ istioctl manifest apply --set profile=demo --set meshConfig.accessLogFile="/dev/stdout"
3. 测试访问日志
- 从sleep发送请求到httpbin
$ kubectl exec -it $(kubectl get pod -l app=sleep -o jsonpath='{.items[0].metadata.name}') -c sleep -- curl -v httpbin:8000/status/418
- 检查sleep的日志
$ kubectl logs -l app=sleep -c istio-proxy
- 检查httpbin的日志
$ kubectl logs -l app=httpbin -c istio-proxy
4. 清除本实验
- 关闭sleep和httpbin的服务
$ kubectl delete -f samples/sleep/sleep.yaml
$ kubectl delete -f samples/httpbin/httpbin.yaml
5. 关闭Envoy的访问日志
$ istioctl manifest apply --set profile=demo