描述
Kiali页面流量拓扑图未展示用户部署的服务。
解决方案
步骤一:确认命名空间是否选择正确
步骤二:确认服务是否有网络流量
确认服务有发起或者接收到请求,可结合pod日志进行查看:kubectl logs <服务对应pod名称> -n <服务所在命名空间>
步骤三:确认命名空间sidecar注入标签
kubectl get namespace <服务所在命名空间> -oyaml
apiVersion: v1
kind: Namespace
metadata:
...
labels:
kubernetes.io/metadata.name: <服务所在命名空间>
istio-injection: enabled
name: <服务所在命名空间>
...
如果命名空间不存在标签istio-injection=enabled
,执行以下命令给命名空间打上标签。kubectl label namespace <服务所在命名空间> istio-injection=enabled
或者如果只希望单独为服务添加注入标签开启sidecar注入,请参考步骤四中的场景2。
步骤四:确认sidecar注入相关的工作负载标签和注解
场景一:所在命名空间已有sidecar注入标签
确认pod模板没有禁止sidecar注入的标签或者注解(注解方式不推荐使用)kubectl get deploy <服务对应的deployment名称> -n <服务所在命名空间>
...
spec:
...
template:
metadata:
...
labels:
sidecar.istio.io/inject: false
...
annotations:
sidecar.istio.io/inject: false #注解方式不推荐使用,与标签二选一配置即可
spec:
...
...
如标签或者注解为sidecar.istio.io/inject: false
,编辑deployment
,删除pod
模板中的sidecar.istio.io/inject
标签或者注解即可。kubectl edit deploy <服务对应的deployment名称> -n <服务所在命名空间>
场景二:所在命名空间没有sidecar注入标签,希望单独为服务添加注入标签
kubectl edit deploy <服务对应的deployment名称> -n <服务所在命名空间>
编辑deployment
中的pod
模板,为pod
添加注入标签
...
spec:
...
template:
metadata:
...
labels:
sidecar.istio.io/inject: true #推荐用法
...
annotations:
sidecar.istio.io/inject: true #注解方式不推荐使用,与标签二选一配置即可
spec:
...
...
保存退出,等待服务滚动升级完成。
步骤五:标签配置正确的情况,检查pod中是否有sidecar
如果前面步骤检查都没问题,但Kiali页面仍未展示相关的流量拓扑,需要检查sidecar实际是否注入。
kubectl get pod <服务对应的pod> -o jsonpath={.spec.containers[*].name} -n <服务所在命名空间>
<服务对应的容器> ... istio-proxy
输出的容器名称有istio-proxy
即已经注入了sidecar
。
如果istio-proxy
容器不存在,可以选择对相应的deployment
进行滚动升级,sidecar
会自动注入。kubectl edit deploy <服务对应的deployment名称> -n <服务所在命名空间>
编辑服务对应的deployment
,推荐通过添加自定义pod
模板标签的方式进行滚动升级。
...
spec:
...
template:
metadata:
...
labels:
try-inject: '12345678' #无特殊要求,可自定义
...
spec:
...
...
等待滚动升级完成。