首页 > 数据库 > > 访问 Kubernetes 上的 TiDB 集群
在 Kubernetes 集群内访问 TiDB 时,使用 TiDB service 域名 ${cluster_name}-tidb.${namespace} 即可。
若需要在集群外访问,则需将 TiDB 服务端口暴露出去。在 TidbCluster CR 中,通过 spec.tidb.service 字段进行配置:
spec:
...
tidb:
service:
type: NodePort
# externalTrafficPolicy: Cluster
# annotations:
# cloud.google.com/load-balancer-type: Internal
在没有 LoadBalancer 时,可选择通过 NodePort 暴露。NodePort 有两种模式:
externalTrafficPolicy=Cluster:集群所有的机器都会给 TiDB 分配 TCP 端口,此为默认值
使用 Cluster 模式时,可以通过任意一台机器的 IP 加同一个端口访问 TiDB 服务,如果该机器上没有 TiDB Pod,则相应请求会转发到有 TiDB Pod 的机器上。
注意:
该模式下 TiDB 服务获取到的请求源 IP 是主机 IP,并不是真正的客户端源 IP,所以基于客户端源 IP 的访问权限控制在该模式下不可用。
externalTrafficPolicy=Local:只有运行 TiDB 的机器会分配 TCP 端口,用于访问本地的 TiDB 实例
使用 Local 模式时,建议打开 tidb-scheduler 的 StableScheduling 特性。tidb-scheduler 会尽可能在升级过程中将新 TiDB 实例调度到原机器,这样集群外的客户端便不需要在 TiDB 重启后更新配置。
查看 Service 分配的 Node Port,可通过获取 TiDB 的 Service 对象来获知:
kubectl -n ${namespace} get svc ${cluster_name}-tidb -ojsonpath="{.spec.ports[?(@.name=='mysql-client')].nodePort}{'\n'}"
查看可通过哪些节点的 IP 访问 TiDB 服务,有两种情况:
externalTrafficPolicy 为 Cluster 时,所有节点 IP 均可
externalTrafficPolicy 为 Local 时,可通过以下命令获取指定集群的 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 的环境,比如 GCP/AWS 平台,建议使用云平台的 LoadBalancer 特性。
访问 Kubernetes Service 文档,了解更多 Service 特性以及云平台 Load Balancer 支持。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31537575/viewspace-3136682/ ,如需转载,请注明出处,否则将追究法律责任。