访问 TiDB 集群

Service 可以根据场景配置不同的类型,比如 ClusterIPNodePortLoadBalancer 等,对于不同的类型可以有不同的访问方式。

可以通过如下命令获取 TiDB Service 信息:

kubectl get svc ${serviceName} -n ${namespace}

示例:

# kubectl get svc basic-tidb -n default
NAME         TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)                          AGE
basic-tidb   NodePort   10.233.6.240   <none>        4000:32498/TCP,10080:30171/TCP   61d

上述示例描述了 default namespace 下 basic-tidb 服务的信息,类型为 NodePort,ClusterIP 为 10.233.6.240,ServicePort 为 400010080,对应的 NodePort 分别为 3249830171

ClusterIP

ClusterIP 是通过集群的内部 IP 暴露服务,选择该类型的服务时,只能在集群内部访问,可以通过如下方式访问:

  • ClusterIP + ServicePort
  • Service 域名 (${serviceName}.${namespace}) + ServicePort

NodePort

在没有 LoadBalancer 时,可选择通过 NodePort 暴露。NodePort 是通过节点的 IP 和静态端口暴露服务。通过请求 NodeIP + NodePort,可以从集群的外部访问一个 NodePort 服务。

查看 Service 分配的 Node Port,可通过获取 TiDB 的 Service 对象来获知:

kubectl -n ${namespace} get svc ${cluster_name}-tidb -ojsonpath="{.spec.ports[?(@.name=='mysql-client')].nodePort}{'\n'}"

查看可通过哪些节点的 IP 访问 TiDB 服务,有两种情况:

  • externalTrafficPolicyCluster 时,所有节点 IP 均可

  • externalTrafficPolicyLocal 时,可通过以下命令获取指定集群的 TiDB 实例所在的节点

    kubectl -n ${namespace} get pods -l "app.kubernetes.io/component=tidb,app.kubernetes.io/instance=${cluster_name}" -ojsonpath="{range .items[*]}{.spec.nodeName}{'\n'}{end}"
    

LoadBalancer

若运行在有 LoadBalancer 的环境,比如 GCP/AWS 平台,建议使用云平台的 LoadBalancer 特性。

参考 EKSGKEACK 文档,通过 LoadBalancer 访问 TiDB 服务。

访问 Kubernetes Service 文档,了解更多 Service 特性以及云平台 Load Balancer 支持。

下载 PDF文档反馈社区交流
文档内容是否有帮助?
产品
TiDB
学习
客户案例
PingCAP Education
TiDB in Action
© 2022 PingCAP. All Rights Reserved.