radondb-mysql-kubernetes icon indicating copy to clipboard operation
radondb-mysql-kubernetes copied to clipboard

关于启用root用户的问题!

Open leon1509 opened this issue 3 years ago • 18 comments
trafficstars

按照issue中所说:将allowEmptyRootPassword设置为false,客户端连接时还是提示: image

配置文件如下: radondb

leon1509 avatar Dec 20 '21 06:12 leon1509

Hi! thanks for your contribution! great first issue!

github-actions[bot] avatar Dec 20 '21 06:12 github-actions[bot]

你好,你安装的是helm版本,现在我们主要维护功能更强大的operator版本,建议你安装体验operator版本

runkecheng avatar Dec 20 '21 06:12 runkecheng

您的意思是helm版本的,启用root这部分是有问题的是吗?我是在kubesphere的应用商店中安装的。

leon1509 avatar Dec 20 '21 06:12 leon1509

image

leon1509 avatar Dec 20 '21 06:12 leon1509

operator版本的需要您按照文档来部署,目前还不支持直接通过kubesphere一键部署。部署文档

runkecheng avatar Dec 20 '21 06:12 runkecheng

From: https://github.com/kubesphere/website/issues/2202

andyli029 avatar Dec 27 '21 02:12 andyli029

operator 版本也遇到类似情况。

我的需求:打开 root 的远程有密码访问

但我找不到途径满足它。


我试过两种方法:

  • 尝试在创建 MysqlCluster 资源的时候,把 spec.mysqlOpts.rootHost 设为了 "%" ;但,不管用。
  • 尝试根据文档 https://radondb.com/docs/mysql/v2.1.3/feature/mysqluser 内的线索,去寻找 root 用户的配置;但是,什么也没有。

这是我的资源:

apiVersion: mysql.radondb.com/v1alpha1
kind: MysqlCluster
metadata:
  name: mysql
  namespace: mysql-bdp
spec:
  replicas: 3
  mysqlVersion: "5.7"
  
  # the backupSecretName specify the secret file name which store S3 information,
  # if you want S3 backup or restore, please create backup_secret.yaml, uncomment below and fill secret name:
  # backupSecretName: 
  
  # if you want create mysqlcluster from S3, uncomment and fill the directory in S3 bucket below:
  # restoreFrom: 
  
  mysqlOpts:
    rootPassword: "RadonDB@123"
    rootHost: "%"
    user: radondb_usr
    password: RadonDB@123
    database: radondb
    initTokuDB: true

    # A simple map between string and string.
    # Such as:
    #    mysqlConf:
    #      expire_logs_days: "7"
    mysqlConf:
      expire_logs_days: "7"

    resources:
      requests:
        cpu: 100m
        memory: 256Mi
      limits:
        cpu: 500m
        memory: 1Gi

  xenonOpts:
    image: radondb/xenon:1.1.5-alpha
    admitDefeatHearbeatCount: 5
    electionTimeout: 10000

    resources:
      requests:
        cpu: 50m
        memory: 128Mi
      limits:
        cpu: 100m
        memory: 256Mi

  metricsOpts:
    enabled: false
    image: prom/mysqld-exporter:v0.12.1

    resources:
      requests:
        cpu: 10m
        memory: 32Mi
      limits:
        cpu: 100m
        memory: 128Mi

  podPolicy:
    imagePullPolicy: IfNotPresent
    sidecarImage: radondb/mysql-sidecar:v2.1.4
    busyboxImage: busybox:1.32

    slowLogTail: false
    auditLogTail: false

    labels: {}
    annotations: {}
    affinity: {}
    priorityClassName: ""
    tolerations: []
    schedulerName: ""
    # extraResources defines quotas for containers other than mysql or xenon.
    extraResources:
      requests:
        cpu: 10m
        memory: 32Mi

  persistence:
    enabled: true
    accessModes:
    - ReadWriteOnce
    #storageClass: ""
    size: 20Gi

其中我把 spec.mysqlOpts.rootHost 设为了 "%" ,它原本是 localhost

apply 这个 yaml ,等待有状态副本集的 Pod 都正常运行后,我尝试连接,却仍然不妥:

image

如图,我先分别试过了用 -p 和不用,但都不行;但换做 radondb_usr 就可以了。

这是我寻找 root 用户的 MysqlUser 资源时看到的:

image

暂时算是解决了。

我通过 mysql-leader 服务找到对应 Pod 并进入 mysql 容器的终端,然后执行 grant 命令即可:

grant all privileges on *.* to 'root'@'%' identified by 'RadonDB@123' with grant option ;
image

然后就可以远程登陆了:

image

这个改动按说是作用于持久卷了的。因此,按说是不怕 Pod 重建把它给冲没了。不过我没测试就是了。

yhm-amber avatar Jun 10 '22 09:06 yhm-amber

@yhm-amber

你好,目前默认禁止使用远程root,可以通过创建超级用户来代替。 #182

runkecheng avatar Jun 10 '22 13:06 runkecheng

@yhm-amber

你好,目前默认禁止使用远程root,可以通过创建超级用户来代替。 #182

了解,我也找到了让微服务不要用名为 root 的用户登录的途径。

但是问个事:我上面这样打开的 root 远程登录,经过集群/Pod等重启后,它会失效吗?

grant all privileges on *.* to 'root'@'%' identified by 'RadonDB@123' with grant option ;

因为我没看到像 mysql 那样的管理用户信息的库(应该是 mysql 库)在这个 radondb 的 mysql 里存在,所以我不知道我用 grant 命令这样做,会不会有啥问题。。。

yhm-amber avatar Jun 14 '22 02:06 yhm-amber

@yhm-amber 你好,目前默认禁止使用远程root,可以通过创建超级用户来代替。 #182

了解,我也找到了让微服务不要用名为 root 的用户登录的途径。

但是问个事:我上面这样打开的 root 远程登录,经过集群/Pod等重启后,它会失效吗?

grant all privileges on *.* to 'root'@'%' identified by 'RadonDB@123' with grant option ;

因为我没看到像 mysql 那样的管理用户信息的库(应该是 mysql 库)在这个 radondb 的 mysql 里存在,所以我不知道我用 grant 命令这样做,会不会有啥问题。。。

不建议这么使用,因为operator会使用到这个用户,并且初始化了随机密码,更改后可能会影响operator的功能。

runkecheng avatar Jun 14 '22 02:06 runkecheng

不建议这么使用,因为operator会使用到这个用户,并且初始化了随机密码,更改后可能会影响operator的功能。

。。。还好改回来不?

yhm-amber avatar Jun 14 '22 02:06 yhm-amber

不建议这么使用,因为operator会使用到这个用户,并且初始化了随机密码,更改后可能会影响operator的功能。

。。。还好改回来不?

节点重启之后会恢复(sts的节点,为了保持一致,建议重建sts,如果不想停服务,更改cluster的配置,触发一次滚动更新即可)

runkecheng avatar Jun 14 '22 02:06 runkecheng

不建议这么使用,因为operator会使用到这个用户,并且初始化了随机密码,更改后可能会影响operator的功能。

。。。还好改回来不?

节点重启之后会恢复

这个节点是指 STS 就算,还是必须是 k8s 的 node 重启才能恢复它?(我猜应该是前者……对吧,不会必须重启 node 吧。。。)


另外,关于普通用户的问题:

我有一堆通过 grant 创建微服务用户与库并给权限的代码。果普通用户只能用 Yaml 创建 MysqlUser 的 Kind 来创建用户的话,以前在 MySQL 的一些初始化代码岂不是不能复用了。。。

普通用户和数据库(以及相关权限)可以用 grant 创建,并能,不受(任何一种)重启所影响地、持久地存在吗?

示例:

create database if not exists `{}` DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci ;
grant all on `{}`.* to "{}"@"%" identified by "{}-P@88w0rd" ;
show grants for "{}"@"%" ;

这是个模板,实际使用把 {} 换成服务名称。

yhm-amber avatar Jun 14 '22 02:06 yhm-amber

不建议这么使用,因为operator会使用到这个用户,并且初始化了随机密码,更改后可能会影响operator的功能。

。。。还好改回来不?

节点重启之后会恢复

这个节点是指 STS 就算,还是必须是 k8s 的 node 重启才能恢复它?(我猜应该是前者……对吧,不会必须重启 node 吧。。。)

另外,关于普通用户的问题:

我有一堆通过 grant 创建微服务用户与库并给权限的代码。果普通用户只能用 Yaml 创建 MysqlUser 的 Kind 来创建用户的话,以前在 MySQL 的一些初始化代码岂不是不能复用了。。。

普通用户和数据库(以及相关权限)可以用 grant 创建,并能,不受(任何一种)重启所影响地、持久地存在吗?

普通用户可以直接使用sql操作,operator仅限制内置的用户,如root,replication-user,metrics-user等

runkecheng avatar Jun 14 '22 02:06 runkecheng

普通用户可以直接使用sql操作,operator仅限制内置的用户,如root,replication-user,metrics-user等

好的。

另外,那个 MysqlUser 类型的资源,是不是,它并不能同步显示所有存在用户,只是单向地影响已有的 RadonDB MySQL 集群实例用的?

因为,我在(上面提到的)创建集群实例的 Yaml 里有设置 spec.mysqlOpts.user = radondb_usr ,但我仍然没看到我有任何的 MysqlUser 类型的资源被创建。

yhm-amber avatar Jun 14 '22 02:06 yhm-amber

普通用户可以直接使用sql操作,operator仅限制内置的用户,如root,replication-user,metrics-user等

好的。

另外,那个 MysqlUser 类型的资源,是不是,它并不能同步显示所有存在用户,只是单向地影响已有的 RadonDB MySQL 集群实例用的?

因为,我在(上面提到的)创建集群实例的 Yaml 里有设置 spec.mysqlOpts.user = radondb_usr ,但我仍然没看到我有任何的 MysqlUser 类型的资源被创建。

  1. mysqluser 不会同步mysql中已有的用户,只能保存使用它声明的用户的信息。
  2. 默认创建的几个用户(内置用户,不提供使用)是直接写到init.sql的,并不是通过mysqluser cr来管理。

runkecheng avatar Jun 14 '22 02:06 runkecheng

  1. mysqluser 不会同步mysql中已有的用户,只能保存使用它声明的用户的信息。
  2. 默认创建的几个用户(内置用户,不提供使用)是直接写到init.sql的,并不是通过mysqluser cr来管理。

有没有一个类似于 init.sql.d 的目录,能让我用 configmap 挂进去在启动容器的时候做初始化?

我在 kubectl explain MysqlCluster 里靠猜来找了一下,没找到。。。

yhm-amber avatar Jun 14 '22 03:06 yhm-amber

  1. mysqluser 不会同步mysql中已有的用户,只能保存使用它声明的用户的信息。
  2. 默认创建的几个用户(内置用户,不提供使用)是直接写到init.sql的,并不是通过mysqluser cr来管理。

有没有一个类似于 init.sql.d 的目录,能让我用 configmap 挂进去在启动容器的时候做初始化?

我在 kubectl explain MysqlCluster 里靠猜来找了一下,没找到。。。

这个后续会支持

runkecheng avatar Jun 14 '22 03:06 runkecheng