DM 6.0 web ui无法访问

环境信息:

TiDB 6.0 on k8s
DM 6.0 on k8s
TiDB由5.4.0使用修改spec.version的方式升级,DM 使用kubectl apply -f values-tidb-dm.yaml -n tidb-cluster的方式安装,脚本如下:

apiVersion: pingcap.com/v1alpha1
kind: DMCluster
metadata:
  name: basic
  namespace: tidb-cluster
spec:
  version: v6.0.0
  configUpdateStrategy: RollingUpdate
  pvReclaimPolicy: Retain
  discovery: {}
  master:
    baseImage: pingcap/dm
    maxFailoverCount: 0
    imagePullPolicy: IfNotPresent
    service:
      type: NodePort
      # 需要将 DM-master service 暴露在一个固定的 NodePort 时配置
      # masterNodePort: 30020
    replicas: 1
    storageSize: "10Gi"
    requests:
      cpu: 1
    config: |
      rpc-timeout = "40s"
      openapi = true
  worker:
    baseImage: pingcap/dm
    maxFailoverCount: 0
    replicas: 1
    storageSize: "100Gi"
    requests:
      cpu: 1
    config: |
      keepalive-ttl = 15

遇到的问题

部署好DM之后,测试了一个流程,放置了两天没操作,再次访问,报错:


从k8s上重新部署DM相关pod后,错误依旧。
DM的master和work错误pod如下:
master.log (62.6 KB)
work.log (126.2 KB)

一点小建议


这种配置方式需要grafana开放匿名访问,会被我们内网安全扫描工具提示有安全问题,建议换种方式实现此功能。

1 个赞

以什么方式暴露的 dm web ui?nodeport?

建议打开网页调试工具,看下是什么请求出错然后顺藤摸瓜对症下药。

1 个赞

ingress暴露的,我在内部做了个service,ingress代理了service的8261端口,顺藤没摸到瓜,都是404,哈哈

1 个赞

F12定位下问题所在。

404 可能是 ingress 的问题,看下 ingress 对不对

排查了一下,发现环境变量里面没有openapi配置,查看本地部署文件是有,而且一开始是好用的。


重新kubuctl apple之后,发现有两个环境变量,一个有openapi配置,一个没有,master挂载的是有的


查看容器中的挂载的配置文件,发现配置也有了:
image
重新部署pod之后,还是404,我准备整个delete之后,重新部署试试。

1 个赞

把 pod service ingress 定义导出一份看一下吧。

kubectl -ntidb-cluster get po,svc,ing -lapp.kubernetes.io/instance=basic -oyaml --export

所有的东西都重新搞了一遍,也不行,重装大法不管用了
product.yaml (97.5 KB) product.yaml

kubectl -ntidb-cluster get po,svc,ing -oyaml --export

这样导一下吧,ingress 可能没 label 没导出来,然后说一下你用了哪个 service 哪个 ingress 暴露服务的

product.yaml (107.1 KB) product.yaml
ingress: dm-dashboard
service:basic-dm-master

请问内网扫描工具是如何扫匿名访问的?url 必须经过认证吗?

一开始能访问,但是后面不能访问的原因是通过 svc 去访问 dm-master 时,流量会被均摊到不同的 pod 上,当流量被打倒非 leader 的 pod 上的时候,就会出问题

我们在这个 issue 有跟进,预计下个版本会修复 https://github.com/pingcap/tiflow/issues/5179

1 个赞

从这里能看到 当前 ingress 连接的 ip 是 172.26.255.196,能瞅瞅这个 IP 的 pod 是不是 leader 么?

轮询ip,扫描端口,我们管的很严,在k8s上问题不大,毕竟ingress进去,匿名也扫不到,如果是tiup部署在虚机上,grafana这种组件,匿名访问就被通报了。

1 个赞

就一个master,所以命中的是leader。

明白,感谢。我们会换一种实现方式

给leader加个label是不是就可以解决问题了?

目前可以暂时用这种方式,但是如果起多个 master 会导致 leader 漂移,就会有点麻烦

这是不是意味着dm需要个crd?

大佬有进展么?