云原生專欄大綱
文章目錄
- 可觀測性
- kiali介紹
- Overview(概觀)
- Application(應用維度)
- workloads(負載維度)
- Services(服務維度)
- Istio Config(配置維度)
- Kiali部署
- 通過 Gateway 訪問 Kiali
- 查看鏈路追蹤數據
- 查看Jaeger中鏈路追蹤詳情
- Kiali可能出現的問題
- Kiali 一直顯示 Empty Graph
- 可能失敗的原因
- 分布式鏈路追蹤按鈕跳轉問題
可觀測性
Istio 集成了 Jaeger、Zipkin 和 Skywalking 等鏈路追蹤應用,能夠有效地捕獲服務網格的結構,展示網絡拓撲結構,并分析網格的健康狀況。
這一切都得益于 Envoy 代理的實現。由于所有進出流量都需要經過 Envoy 代理,Envoy 可以捕獲這些流量記錄,并將其推送到相應的鏈路追蹤系統中。這樣一來,可以鏈路追蹤系統輕松地監控和分析服務網格內的流量情況。
另外 Istio 還支持 Prometheus、 Grafana 收集指標數據。
下面我們將使用官方的模板部署 Kiali 、 還有 Jaeger,然后通過 Kiali 統一查看集群的指標信息。
Kiali是一個用于可視化和監控Istio服務網格的控制面板。它提供了一個直觀的用戶界面,幫助用戶了解和管理服務網格中的微服務應用程序。
kiali 架構還是比較簡單的,屬于單體應用。kiali 后臺既可以跟外部服務 prometheus、cluster API 進行通信獲取 istio 服務網格信息,也可以集成可選服務 jaeger 和 grafana做全鏈路跟蹤和可視化指標度量。
以下是Kiali控制面板的主要功能和特點:
- 服務拓撲圖:Kiali通過繪制服務之間的關系和通信流量,展示了服務網格的拓撲結構。用戶可以查看微服務應用程序的整體架構,了解服務之間的依賴關系和通信路徑。
- 流量可視化:Kiali能夠顯示服務之間的實時流量,并以圖形化方式展示流量的分布和流向。用戶可以輕松地追蹤和監控流量路由、負載均衡和流量控制策略的情況。
- 性能指標和健康狀態:Kiali提供了服務的性能指標和健康狀態的可視化展示。用戶可以查看服務的請求量、延遲、錯誤率等指標,并快速識別出性能瓶頸和故障。
- 故障診斷和故障排查:Kiali允許用戶跟蹤請求的路徑,并提供了故障診斷和故障排查的工具。用戶可以追蹤請求的流程,查找和定位故障點,并進行故障排查和修復。
- 安全策略可視化:Kiali能夠展示服務網格中的安全策略和訪問控制規則。用戶可以查看和管理服務的身份認證、流量加密和訪問控制策略,確保服務之間的通信是安全的。
- 智能建議和自動化分析:Kiali提供了智能建議和自動化分析的功能,幫助用戶優化服務網格的配置和性能。它可以檢測潛在的問題和優化機會,并提供建議和指導。
總而言之,Kiali控制面板為用戶提供了一個直觀和全面的視圖,幫助他們監控、管理和故障排查Istio服務網格。它提供了豐富的可視化功能,使用戶能夠更好地理解和優化服務之間的通信和性能。
Kiali kiali官網
- kiali登錄token獲取
kubectl get secrets -n istio-system
kubectl describe secrets -n istio-system <kiali-token>
kiali介紹
Overview(概觀)
該菜單全局性展示所有命名空間下服務的流量(traffic)、配置狀態(config status)、健康狀態(?)、應用數量(Applications)等。
Application(應用維度)
applications 指運行中的應用,kiali 獨有概念。
注意:kiali只能識別設置了app標簽的應用。如果一個應用有多個版本,需要將這幾個版本的 app 標簽設置為相同的值。
workloads(負載維度)
kiali 中的負載(workloads)跟 k8s 中的資源對應(比如 deployment、Job、Daemonset、Statefulset 等)。k8s 中的這些資源都可以在 kiali 中檢測到,不管這些資源有沒有加入到 istio 服務網格中。
Services(服務維度)
對應 k8s 的 service 資源類型
Istio Config(配置維度)
istio 相關配置類信息。比如這里選擇 istio type 類型,將顯示有關 istio 服務網格下面的各個類型對應的配置信息狀態(? 表示配置有效;!表示告警)
Kiali部署
拉取 Istio 官方的倉庫:
git clone https://github.com/istio/istio.git
在 samples/addons/ 目錄中有以下目錄或文件:
samples/addons/
├── extras
│ ├── prometheus-operator.yaml
│ ├── prometheus_vm_tls.yaml
│ ├── prometheus_vm.yaml
│ ├── skywalking.yaml
│ └── zipkin.yaml
├── grafana.yaml
├── jaeger.yaml
├── kiali.yaml
├── prometheus.yaml
└── README.md
我們啟用 grafana.yaml、jaeger.yaml、kiali.yaml、prometheus.yaml 四個文件。
kubectl apply -f samples/addons
Istio 默認使用 Jaeger 做鏈路追蹤,我們也可以使用 Skywalking 來做追蹤。extras 目錄中的配置我們可以自行部署。
執行命令查看其 Service 對應的 IP 和端口:
kubectl get svc -n istio-system
現在,我們有兩種方式讓 kiali 在外部訪問,一種是修改 Service 配置,將其訪問類型修改為 NodePort,另一種是使用 istio-ingressgateway 配置流量入口。
通過 Gateway 訪問 Kiali
kiali_gateway.yaml
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata: name: kiali-gateway
spec: selector: istio: ingressgateway servers: - port: number: 15029 name: http-kiali protocol: HTTP hosts: - "*"
kubectl -n istio-system apply -f kiali_gateway.yaml
接下來,創建一個 VirtualService 資源,將 Gateway 路由到 Kiali 服務.
kiali_vs.yaml
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata: name: kiali
spec: hosts: - "*" gateways: - kiali-gateway http: - match: - uri: prefix: /kiali route: - destination: host: kiali.istio-system.svc.cluster.local port: number: 20001
kubectl -n istio-system apply -f kiali_vs.yaml
然后修改 istio-ingressgateway,新增加一個配置為 kiali 暴露服務。
kubectl edit svc istio-ingressgateway -n istio-system
- name: kialinodePort: 32667port: 15029protocol: TCPtargetPort: 15029
然后訪問
查看鏈路追蹤數據
- kiali登錄token獲取
kubectl get secrets -n istio-system
kubectl describe secrets -n istio-system <kiali-token>
- 制作請求
因為默認鏈路追蹤采樣率是 1%,所以可以將請求次數設置大一些。
for i in `seq 1 1000`; do curl -s -o /dev/null http://192.168.31.21:32666/productpage; done
- 查看鏈路圖
Kiali 的 Graph 數據主要來自兩個來源:Prometheus 和 Istio 本身的遙測數據。
- Prometheus:Prometheus 是一個開源監控和警報工具,它用于收集和存儲 Istio 服務網格中的指標數據。Istio 使用 Envoy 代理收集遙測數據,這些數據隨后被 Prometheus 抓取和存儲。Kiali 使用這些 Prometheus 數據來生成服務之間的流量、錯誤率、延遲等指標。
- Istio 遙測數據:Istio 服務網格生成的遙測數據包括請求、響應、延遲以及 Envoy 代理的其他性能指標。這些數據由 Istio 組件(例如 Mixer 和 Pilot)以及 Envoy 代理本身生成。Kiali 從這些遙測數據中獲取服務拓撲信息,以創建服務之間的依賴關系圖。
Kiali 將這兩個數據源的信息整合在一起,生成 Graph,它展示了服務網格的拓撲結構、服務之間的流量以及其他性能指標。這有助于用戶更好地理解服務之間的依賴關系,發現潛在的性能問題,并優化服務網格配置。
查看Jaeger中鏈路追蹤詳情
- 暴露jaeger-query
- 登錄查看
- 查看詳情
Kiali可能出現的問題
Kiali 一直顯示 Empty Graph
可能失敗的原因
如果你的 Kiali 一直顯示 Empty Graph。請關注以下幾種可能的情況:
- 集群版本低于 1.23 ,需要升級 Kubernetes 集群。
- 訪問的地址不正確,沒有配置對 /productpage 的訪問地址,請求流量沒有打入集群。
- Pod 沒有被注入 istio-proxy。
你可以在 Kiali 的 Workloads 查看每個負載的 Pod 信息,正常情況應當如下所示:
分布式鏈路追蹤按鈕跳轉問題
點擊下圖分布式鏈路追蹤按鈕會出現問題
查看jaeger-query組件svc,服務并沒暴露,自行配置nodeport暴露方式
修改kiali的jaeger-query配置,使用暴露ip+port
將http://jaeger-query.istio-system.svc:16686修改為http://192.168.31.21:31051
重啟kiali
訪問測試: