【 TiDB 使用环境`】测试环境
【 TiDB 版本】5.4.0
【遇到的问题】使用TiDB Operator在Rancher管理的私有Kubernetes集群上部署TiDB, 无法通过NodePort访问到TiDB服务
【复现路径】Rancher应用商店中添加pingcap的helm chart仓库,根据官方文档指导部署TiDB Operator和TiDB Cluster。所有Pod节点均正常。
【问题现象及影响】无法通过NodePort访问到TiDB服务。通过https://docs.pingcap.com/zh/tidb-in-kubernetes/stable/network-issues这部分指导,发现${cluster_name}-tidb Service的endpoints对象为None,但“检查 Pod 的健康状态以及 kube-controller-manager ”未发现异常。不清楚该再怎么排除故障?
【TiDB Operator 版本】:1.3.2
【K8s 版本】:1.20.11
【Docker 版本】:20.10.15
【节点系统版本】:CentOS7.9.2009 内核版本3.10.0-1160.62.1.el7.x86_64
【Rancher 版本】:2.5.8
能看一下你nodeport的配置吗?
还有就是,TiDB Operator CRDs,安装了吗?其次就是TiDB Cluster是用helm chart里面现有的,还是用官方提供的yaml,用kubectl安装的?
1.TiDB Operator CRDs 已安装,使用官方教程中的
https://raw.githubusercontent.com/pingcap/tidb-operator/v1.3.2/manifests/crd.yaml
该yaml文件,执行kubectl create安装。
> kubectl get crd
NAME CREATED AT
backups.pingcap.com 2022-05-11T02:52:44Z
backupschedules.pingcap.com 2022-05-11T02:52:44Z
dmclusters.pingcap.com 2022-05-11T02:52:44Z
tidbclusterautoscalers.pingcap.com 2022-05-11T02:52:44Z
tidbclusters.pingcap.com 2022-05-11T02:52:44Z
tidbinitializers.pingcap.com 2022-05-11T02:52:44Z
tidbmonitors.pingcap.com 2022-05-11T02:52:44Z
tidbngmonitorings.pingcap.com 2022-05-11T02:52:45Z
- TiDB Cluster 使用Rancher 配置的PingCap商店中的Helm Chart安装,有配置longhorn块存储作为StorageClass.
> kubectl get po -n tidb-cluster
NAME READY STATUS RESTARTS AGE
tidb-cluster-discovery-65cbc864d7-kf4fb 1/1 Running 0 3h6m
tidb-cluster-monitor-9779f77c8-9nrfm 3/3 Running 0 3h6m
tidb-cluster-pd-0 1/1 Running 0 3h6m
tidb-cluster-pd-1 1/1 Running 0 3h6m
tidb-cluster-pd-2 1/1 Running 1 3h6m
tidb-cluster-tidb-0 2/2 Running 0 3h3m
tidb-cluster-tidb-1 2/2 Running 0 3h3m
tidb-cluster-tikv-0 1/1 Running 0 3h4m
tidb-cluster-tikv-1 1/1 Running 0 3h4m
tidb-cluster-tikv-2 1/1 Running 0 3h4m
- NodePort配置
没有单独配置,而是使用的Helm Chart中的TiDB Cluster的默认配置。部分生成配置如下:
spec:
clusterIP: 10.43.181.65
clusterIPs:
- 10.43.181.65
externalTrafficPolicy: Cluster
ports:
- name: mysql-client
nodePort: 32328
port: 4000
protocol: TCP
targetPort: 4000
- name: status
nodePort: 32535
port: 10080
protocol: TCP
targetPort: 10080
selector:
app.kubernetes.io/component: tidb
app.kubernetes.io/instance: tidb-cluster
app.kubernetes.io/name: tidb-cluster
io.cattle.field/appId: tidb-cluster
sessionAffinity: None
type: NodePort
status:
loadBalancer: {}
- 其他信息
> kubectl get service tidb-cluster-tidb -n tidb-cluster
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
tidb-cluster-tidb NodePort 10.43.181.65 <none> 4000:32328/TCP,10080:32535/TCP 3h7m
> kubectl -n tidb-cluster get endpoints tidb-cluster-tidb
NAME ENDPOINTS AGE
tidb-cluster-tidb <none> 3h8m
monitor端口可正常打开,也可以telnet通。TiDB的nodeport 32328、32535端口,无法在远端telnet通。(尝试了很多次,随机生成的TiDB的nodeport 端口都无法telnet通,其他monitor之类的端口都正常)
另外 K8s节点的主机由于没有外网环境,在创建私有K8s集群时,配置了网络代理。其中NO_PROXY的设定为:localhost,127.0.0.1,0.0.0.0,10.0.0.0/8,192.168.10.0/24,.svc,.cluster.local。不清楚是否网络代理对TiDB的访问有没有影响。
是否有设置白名单?
不清楚所说的白名单是怎么设置?是说的官方文档中的这部分吗
在 ${cluster_name}/tidb-initializer.yaml 中设置 permitHost: ${mysql_client_host_name} 配置项来设置允许访问 TiDB 的主机 host_name。如果不设置,则允许所有主机访问。详情请参考 MySQL GRANT host name。
如果是这部分的话,是直接使用的TiDB cluster Helm Chart中的默认配置,看说明中默认是不配置的,也就是允许所有主机可访问TiDB
我在在我的Rancher环境搭一套跟你一样的,不过我的Rancher是v2.5.5,影响应该不大。
遇到的问题跟你相同,我认为这可能是个bug?可以考虑提一个issue。
我的解决方法是,在rancher的service界面,克隆tidb-cluster-tidb的service,把select选择更改成 One or more workloads
,如下图
这样登录是OK的,如下:
我认为可能是自动生成的 service 中 selector 规则未生效,至于为什么,我也不是很清楚。
向monitor的selector规则就是正常的,所以在workloads界面中,monitor的workloads下会显示有哪些端口是可以访问的,但是tidb下面就没有,说明rancher不能准确识别到那个service的应该归属于哪个服务。
在rancher中克隆出tidb-cluster-tidb service时,在保存配置时报这种错误,想了解下你那边有遇到这种错误吗?
Validation failed in API: Service "test" is invalid: spec.clusterIPs: Invalid value: []string{"10.43.155.191"}: must be empty when clusterIP is empty
没遇到过,方便告诉我你具体怎么操作的吗?
点击tidb-cluster-tidb 这个service界面中的克隆,然后按照你所说的设置为 One or more workloads,其他配置与被克隆的service配置相同,点击保存报上述错误。我在rancher的ui界面中貌似看不到配置或者设置clusterip的地方(可能是rancher版本的问题),不清楚在yaml配置文件中该如何调整修改?方便把你克隆出来的service的yaml配置粘贴看下吗?
可否帮贴下yaml的配置参考下,我这边UI操作一直无法成功。我参考下你的yaml文件的配置在yaml文件中修改下试试
按上述方法操作,已成功连接到TiDB 服务,非常感谢。另: 感觉可直接在该service修改升级,我这边按直接修改升级操作的,使用的rancher版本估计有bug,克隆出来的一直保存不了。
我rancher从2.4.0升到2.5.5就没敢动了,感觉2.5.5后面的小问题挺多的。2.6的UI风格不习惯,后面再考虑升级,不过TiDB连上就行。目前官方好像不太推荐用helm chart里面的tidb-cluster,之前一直以为官方chart库就一个operator,太久没关注了。