一、kiali 組件分析
使用如下命令查看 kiali pod 詳情:
kubectl edit pod -n istio-system $(kubectl get pods -n istio-system | grep -i kiali | awk '{print $1}')
kiali pod 內只有一個容器,名稱為 kiali。該容器在啟動的過程中會運行容器內 kiali 進程,該進程會加載 /kiali-configuration/config.yaml 配置文件,該 config.yaml 文件定義了 kiali 進程運行時行為。pod 部分詳情如下:
spec: containers: - command: - /opt/kiali/kiali - -config - /kiali-configuration/config.yaml - -v - "3"
kiali pod 內 /kiali-configuration/config.yaml 配置文件是通過掛載 configmap 獲取到的,如下:
volumeMounts:
- mountPath: /kiali-configuration
name: kiali-configuration
configmap 信息如下:
volumes: - configMap: defaultMode: 420 name: kiali name: kiali-configuration
可以通過語句查看 kiali configmap 內容:
kubectl edit configmap -n istio-system kiali
kiali configmap 部分內容如下:
apiVersion: v1 data: config.yaml: | auth: openid: {} ... kind: ConfigMap metadata: annotations: ...
由上面可知,configmap 最終會以 config.yaml 文件的形式掛載到 kiali pod 中的 /kiali-configuration 目錄下。
查看pod
[root@k8s-master ~]# kubectl get pods -n istio-system |grep kiali kiali-667b888c56-8h7cp 1/1 Running 1 3h26m
進入 kiali pod 查看
[root@k8s-master ~]# kubectl exec -it -n istio-system kiali-667b888c56-8h7cp /bin/bash kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl kubectl exec [POD] -- [COMMAND] instead. [kiali@kiali-667b888c56-8h7cp kiali]$ ls /kiali-configuration/ config.yaml [kiali@kiali-667b888c56-8h7cp kiali]$
config.yaml 文件
config.yaml 內容如下:
[kiali@kiali-667b888c56-8h7cp kiali]$ cat /kiali-configuration/config.yaml auth: openid: {} openshift: client_id_prefix: kiali strategy: anonymous deployment: accessible_namespaces: - '**' additional_service_yaml: {} affinity: node: {} pod: {} pod_anti: {} custom_dashboards: excludes: - "" includes: - '*' image_name: quay.io/kiali/kiali image_pull_policy: Always image_pull_secrets: [] image_version: v1.26 ingress_enabled: false namespace: istio-system node_selector: {} override_ingress_yaml: metadata: {} pod_annotations: sidecar.istio.io/inject: "false" pod_labels: {} priority_class_name: "" replicas: 1 resources: {} secret_name: kiali service_annotations: {} service_type: "" tolerations: [] verbose_mode: "3" version_label: v1.26.0 view_only_mode: false external_services: custom_dashboards: enabled: true identity: cert_file: "" private_key_file: "" istio_namespace: istio-system login_token: signing_key: CHANGEME server: metrics_enabled: true metrics_port: 9090 port: 20001 web_root: /kiali
該配置文件定義了 kiali 行為,下面分別介紹如下:
首先聲明 istio 自身以及 istio 插件在 k8s 哪個命名空間下:
# istio 自身
istio_namespace: istio-system
其次介紹 kiali 鑒權方式:
auth:
openid: {}
openshift:
client_id_prefix: kiali
strategy: anonymous # 通過匿名用戶登錄
再次介紹 kiali deployment 可以訪問的 k8s 命名空間:
deployment: accessible_namespaces: - '**' # 沒有限制,可訪問任何命名空間
接着介紹 kiali 對外服務的端口號和訪問路徑:
server: metrics_enabled: true metrics_port: 9090 port: 20001 web_root: /kiali
本文參考鏈接:
