Kiali 为网格管理和可观察性提供了良好的用户体验的可视化工具;
Kiali 为我们提供了查看相关服务与配置提供了统一化的可视化界面,并且能在其中展示他们的关联;同时他还提供了界面让我们可以很方便的验证 istio 配置与错误提示;
官方功能介绍大致如下:
目前官方没有提供能够方便用户一键部署的 yaml 配置文件,需要 clone 项目代码并运行 make k8s-deploy
进行部署,为了部署方便我整理了一份部署 yaml 如下;将该配置复制保存为文件然后运行 kubectl apply -f deploy-kiali.yaml -n istio-system
即可;(注意,一定修改配置里 Secret 里面的用户名密码配置,不然就只是简单的 admin,admin);
注:
目前(18-08-05) kiali 0.5-snapshot 对于 istio1.0 的 prometheus的数据还不是完全兼容,
graph数据不能展示,其他数据页面目测没有问题,作者正在努力进行兼容,兼容后我也会对文章进行修改;
## kiali 运行配置文件
apiVersion: v1
kind: ConfigMap
metadata:
name: kiali
labels:
app: kiali
version: v0.5.1-SNAPSHOT
data:
config.yaml: |
server:
port: 20001
static_content_root_directory: /opt/kiali/console
## 用户命密码配置文件
## 为了安全起见,部署的时候务必修改登录用户与密码
---
apiVersion: v1
kind: Secret
metadata:
name: kiali
labels:
app: kiali
version: v0.5.1-SNAPSHOT
type: Opaque
data:
username: YWRtaW4= # admin
password: YWRtaW4= # admin
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: kiali
labels:
app: kiali
version: v0.5.1-SNAPSHOT
## 部署配置文件
---
apiVersion: v1
kind: Service
metadata:
name: kiali
labels:
app: kiali
version: v0.5.1-SNAPSHOT
spec:
type: NodePort
ports:
- name: tcp
protocol: TCP
port: 20001
selector:
app: kiali
version: v0.5.1-SNAPSHOT
---
apiVersion: v1
kind: Service
metadata:
name: kiali-jaeger
labels:
app: kiali
version: v0.5.1-SNAPSHOT
spec:
type: NodePort
ports:
- name: jaeger
protocol: TCP
nodePort: 32439
port: 20002
selector:
app: kiali
version: v0.5.1-SNAPSHOT
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: kiali
labels:
app: kiali
version: v0.5.1-SNAPSHOT
spec:
backend:
serviceName: kiali
servicePort: 20001
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: kiali
labels:
app: kiali
version: v0.5.1-SNAPSHOT
spec:
replicas: 1
selector:
matchLabels:
app: kiali
version: v0.5.1-SNAPSHOT
strategy:
rollingUpdate:
maxSurge: 1
maxUnavailable: 1
type: RollingUpdate
template:
metadata:
name: kiali
labels:
app: kiali
version: v0.5.1-SNAPSHOT
spec:
serviceAccount: kiali
containers:
- image: kiali/kiali:latest
name: kiali
command:
- "/opt/kiali/kiali"
- "-config"
- "/kiali-configuration/config.yaml"
- "-v"
- "4"
env:
- name: ACTIVE_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: SERVER_CREDENTIALS_USERNAME
valueFrom:
secretKeyRef:
name: kiali
key: username
- name: SERVER_CREDENTIALS_PASSWORD
valueFrom:
secretKeyRef:
name: kiali
key: password
volumeMounts:
- name: kiali-configuration
mountPath: "/kiali-configuration"
volumes:
- name: kiali-configuration
configMap:
name: kiali
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: kiali
labels:
app: kiali
version: v0.5.1-SNAPSHOT
rules:
- apiGroups: ["", "apps", "autoscaling"]
resources:
- configmaps
- namespaces
- nodes
- pods
- projects
- services
- endpoints
- deployments
- horizontalpodautoscalers
verbs:
- get
- list
- watch
- apiGroups: ["config.istio.io"]
resources:
- rules
- circonuses
- deniers
- fluentds
- kubernetesenvs
- listcheckers
- memquotas
- opas
- prometheuses
- rbacs
- servicecontrols
- solarwindses
- stackdrivers
- statsds
- stdios
- apikeys
- authorizations
- checknothings
- kuberneteses
- listentries
- logentries
- metrics
- quotas
- reportnothings
- servicecontrolreports
- quotaspecs
- quotaspecbindings
verbs:
- get
- list
- watch
- apiGroups: ["networking.istio.io"]
resources:
- virtualservices
- destinationrules
- serviceentries
- gateways
verbs:
- get
- list
- watch
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: kiali
labels:
app: kiali
version: v0.5.1-SNAPSHOT
roleRef:
kind: ClusterRole
name: kiali
apiGroup: rbac.authorization.k8s.io
subjects:
- kind: ServiceAccount
name: kiali
namespace: istio-system
部署完成后,我们把service的端口开放既可以访问到 web 页面;这时候需要先用我们配置的用户名与密码进行登录,登陆后可以看到如下页面:
Graph:
该页面是 graph 展示界面,功能与 serviceGraph 相近;
注:
目前(18-08-05) kiali 0.5-snapshot 对于 istio1.0 的 prometheus的数据还不是完全兼容,
graph数据不能展示,其他数据页面目测没有问题,作者正在努力进行兼容,兼容后我也会对文章进行修改;
Service:
service 页面可以查看所有服务,并能区别改服务是否是 istio 服务,同时可以查看服务详情并能在详情页下 istio 相关联的配置信息;可以说比我们在命令行操作查看配置直观和有效率多了;
Istio Config:
改页面展示所有 istio 相关的配置并可以查看 yaml 详情;
Distributed Tracing:
该界面默认需要我们将 istio gaeger 拥有 ExternalIP 才能正常工作,或者我们在 kiali 容器配置中配置了 JAEGER_URL
; 这个页面是应该只是一个 iframe 页面引用了 gaeger 页面;
总结
总得来说 kiali 为我们提供了一个可以查看相关信息的聚合的地方,我觉得他大的方向也应该是这样子的,把istio本身提供的或者周边的一些细小功能进行汇总可视化,这样子也方便用户统一查看,同时它的 service 视图帮助我们把配置进行连接,对于我们查看相关的配置和排查问题提供了很多的便利性;