云服务器内容精选

  • 概述 GaussDB (DWS)提供了使用 IAM 认证方式访问数据库的功能。当使用JDBC应用程序连接集群时,您可以在JDBC连接中配置IAM用户名及其用户凭证等信息,在连接数据库时系统就会自动生成临时数据库凭证,从而成功连接到数据库。 当前仅支持1.3.1及以上版本的集群及其配套的JDBC驱动程序使用IAM认证方式访问数据库。请先参考下载JDBC或ODBC驱动下载JDBC驱动程序。 IAM用户凭证有密码和访问密钥(Access Key ID和Secret Access Key,简称AK和SK)两种类型,您要为JDBC连接提供IAM访问密钥。 如需使用IAM用户凭证访问数据库,必须先给您的IAM用户授予DWS Database Access权限,同时拥有DWS Administrator和DWS Database Access权限的用户,才能基于IAM用户生成临时数据库用户凭证以连接GaussDB(DWS)数据库。 需要注意的是,DWS Database Access是用户组级别的权限,您可以通过为用户组授权并将用户加入到用户组的方式,使用户具有用户组中的权限。 在IAM中,只有admin用户组的用户可以管理用户。如需给IAM用户授权,您的IAM账号必须属于IAM的admin用户组,否则,请联系IAM账号管理员帮您授权。 使用IAM用户凭证访问数据库的流程如下: 授予IAM用户DWS Database Access权限 创建IAM用户凭证 配置JDBC连接使用IAM认证方式连接集群
  • 创建IAM用户凭证 用户可以登录管理控制台创建访问密钥,如果您已经创建过了,也可以使用已有的访问密钥。 登录管理控制台。 将鼠标移到右上角的用户名,单击“我的凭证”。 再单击“管理访问密钥”页签,可以查看已有的访问密钥,也可以单击“新增访问密钥”进行创建。 访问密钥是IAM身份认证的重要凭证,只有在新增访问密钥时,用户才可以下载到含有Access Key ID(AK)和Secret Access Key(SK)的密钥文件,在管理控制台只能查看到Access Key ID,如果您未曾下载过该密钥文件,请联系您的管理员进行获取,或者重新创建。 每个用户最多可创建2个访问密钥,有效期为永久。为了账号安全性,建议您定期更换并妥善保存访问密钥。
  • 配置JDBC连接使用IAM认证方式连接集群 配置JDBC连接参数 表1 数据库连接参数 参数 描述 url gsjdbc4.jar/gsjdbc200.jar数据库连接描述符。JDBC接口不提供重试连接的能力,您需要在业务代码中实现重试连接的处理。url示例如下: jdbc:dws:iam://dws-IAM-demo:cn-north-4/gaussdb?AccessKeyID=XXXXXXXXXXXXXXXXXXXX&SecretAccessKey=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&DbUser=user_test&AutoCreate=true JDBC URL参数说明: jdbc:dws:iam是URL格式的前缀。 dws-IAM-demo为数据库集群名称。 cn-north-4是集群所在的区域。JDBC会根据所填写区域,访问对应DWS服务,向所在集群下发IAM证书,用于IAM用户认证。DWS服务地址已内置在JDBC配置文件中。 有关GaussDB(DWS)的区域信息,请参考地区和终端节点。 gaussdb是要连接的数据库名。 AccessKeyID/SecretAccessKey为参数DbUser指定的IAM用户所对应的访问密钥ID和秘密访问密钥。 DbUser请设置为IAM用户名,注意,当前版本暂不支持IAM用户名中含有中划线的情况。 如果数据库中已存在DbUser指定的用户,则临时用户凭证具有与现有用户相同的权限。 如果数据库中不存在DbUser指定的用户,且AutoCreate参数值为true,则自动创建一个以DbUser参数值作为用户名的新用户,默认创建的用户为数据库普通用户。 AutoCreate可以不设置,默认为false。该参数表示是否在数据库中自动创建一个以DbUser参数值作为用户名的数据库用户。 true表示自动创建。如果用户已存在则不会再创建。 false表示不会自动创建。如果数据库中不存在DbUser指定的用户名将返回失败。 info 数据库连接属性。常用的属性如下: ssl:Boolean类型。表示是否使用SSL连接。 loglevel:Integer类型。为LogStream或LogWriter设置记录进DriverManager当前值的日志信息量。 目前支持org.postgresql.Driver.DEBUG和org.postgresql.Driver.INFO。值为1时,表示只打印org.postgresql.Driver.INFO,将记录非常少的信息。值大于等于2时,表示打印org.postgresql.Driver.DEBUG和org.postgresql.Driver.INFO,将产生详细的日志信息。默认值为0,表示不打印日志。 charSet:String类型。表示在向数据库发送数据或从数据库接收数据时使用到的字符集。 prepareThreshold:Integer类型。用于确定在转换为服务器端的预备语句之前,要求执行方法PreparedStatement的次数。缺省值是5。 示例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 //以下用例以gsjdbc4.jar为例。 //以下代码将获取数据库连接操作封装为一个接口,可通过给定集群所在的区域、集群名称、AccessKeyID、SecretAccessKey及对应的IAM用户名来连接数据库。 public static Connection GetConnection(String clustername, String regionname, String AK, String SK, String username) { //驱动类。 String driver = "org.postgresql.Driver"; //数据库连接描述符。 String sourceURL = "jdbc:dws:iam://" + clustername + ":" + regionname + "/postgresgaussdb?" + "AccessKeyID=" + AK + "&SecretAccessKey=" + SK + "&DbUser=" + username + "&autoCreate=true"; Connection conn = null; try { //加载驱动。 Class.forName(driver); } catch (ClassNotFoundException e) { return null; } try { //创建连接。 conn = DriverManager.getConnection(sourceURL); System.out.println("Connection succeed!"); } catch (SQLException e) { return null; } return conn; }
  • 相关常见问题 如果使用DAS登录DDS实例时,出现如下报错信息,请参考DAS连接DDS常见问题进行处理。 Command failed with error 18 (AuthenticationFailed): 'Authentication failed.' on server xxx.xxx.xx.xx:xxxx. The full response is { 'ok' : 0.0, 'errmsg' : "Authentication failed.", "code" : 18, "codeName" : "AuthenticationFailed" } 图1 登录失败
  • 连接代码 SSL开启 import ssl from pymongo import MongoClient conn_urls="mongodb://rwuser:rwuserpassword@ip:port/{mydb}?authSource=admin" connection = MongoClient(conn_urls,connectTimeoutMS=5000,ssl=True, ssl_cert_reqs=ssl.CERT_REQUIRED,ssl_match_hostname=False,ssl_ca_certs=${path to certificate authority file}) dbs = connection.database_names() print "connect database success! database names is %s" % dbs SSL关闭 import ssl from pymongo import MongoClient conn_urls="mongodb://rwuser:rwuserpassword@ip:port/{mydb}?authSource=admin" connection = MongoClient(conn_urls,connectTimeoutMS=5000) dbs = connection.database_names() print "connect database success! database names is %s" % dbs
  • 前提条件 连接数据库的弹性云服务器必须和DDS实例之间网络互通,可以使用curl命令连接DDS实例服务端的IP和端口号,测试网络连通性。 curl ip:port 返回“It looks like you are trying to access MongoDB over HTTP on the native driver port.”,说明网络互通。 在弹性云服务器上安装Python以及第三方安装包pymongo。推荐使用pymongo2.8版本。 如果开启SSL,需要在界面上下载根证书,并上传到弹性云服务器。
  • SSL方式 使用SSL方式连接,请务必开启SSL连接,否则会报错。关于如何开启SSL连接,请参见开启和关闭SSL连接。 打开Robo 3T工具,在连接信息页面,单击“Create”。 图2 连接信息 在弹出的“Connection Settings”窗口,设置新建连接的参数。 在“Connection”页签,“Name”填写自定义的新建连接的名称,“Address”填写集群实例绑定的弹性IP和实例的数据库端口。 图3 Connection 在“Authentication”页签,“Database”填写admin,“User Name”填写rwuser,“Password”填写您创建集群实例时设置的管理员密码。 图4 Authentication 在“TLS”页签,勾选“Use TLS protocol”,“Authentication Method”选择“Self-signed Certificate”。 图5 SSL 设置完成后,单击“Save”。 在连接信息页面,单击“Connect”,开始连接集群实例。 图6 集群连接信息 成功连接集群实例,工具界面显示如图7所示。 图7 集群连接成功
  • 非SSL方式 使用非SSL方式连接,请务必关闭SSL连接,否则会出现报错。如何关闭,请参见开启和关闭SSL连接。 打开Robo 3T工具,在连接信息页面,单击“Create”。 图8 连接信息 在弹出的“Connection Settings”窗口,设置新建连接的参数。 在“Connection”页签,“Name”填写自定义的新建连接的名称,“Address”填写集群实例绑定的弹性IP和实例的数据库端口。 图9 Connection 在“Authentication”页签,“Database”填写admin,“User Name”填写rwuser,“Password”填写您创建集群实例时设置的管理员密码。 图10 Authentication 设置完成后,单击“Save”。 在连接信息页面,单击“Connect”,开始连接集群实例。 图11 集群连接信息 成功连接集群实例,工具界面显示如图12所示。 图12 集群连接成功
  • 实例连接方式介绍 文档数据库服务提供使用内网和公网的连接方式。 表1 连接方式 连接方式 IP地址 使用场景 说明 DAS连接 无需使用IP地址 通过数据管理服务管理数据,具备友好的图形化界面,直接在控制台上进行可视化操作。可获得执行SQL、高级数据库管理、智能化运维等功能,做到易用、安全、智能地管理数据库。 文档数据库服务默认开通了DAS连接权限。 易用、安全、高级、智能。 推荐使用DAS连接。 内网连接 内网IP地址 系统默认提供内网IP地址。 当应用部署在弹性云服务器上,且该弹性云服务器与文档数据库实例处于同一区域,同一VPC时,建议使用内网IP地址连接文档数据库实例。 安全性高,可实现DDS的较好性能。 为了获得更快的传输速率和更高的安全性,建议您将应用迁移到与您的DDS实例在同一虚拟私有云子网内,使用内网连接。 公网连接 弹性公网IP 当应用部署在弹性云服务器上,且该弹性云服务器与文档数据库实例处于不同区域时,建议使用弹性公网IP连接文档数据库实例。 如果您使用华为云以外的设备(例如本地设备、其他云厂商服务器等)连接文档数据库实例,您可以使用弹性公网IP连接文档数据库实例。 降低安全性。 公网连接需要购买弹性公网IP,请参见弹性公网IP计费说明。 父主题: 连接集群实例
  • 使用CloudShell连接集群 CloudShell是一款用于管理与运维云资源的网页版Shell工具,CCE支持使用CloudShell连接集群,如图1所示,单击“命令行工具”即可在CloudShell中使用kubectl访问集群。 CloudShell中kubectl证书有效期为1天,从云容器引擎重新跳转可以重置有效期。 集群必须安装CoreDNS才能使用CloudShell。 CloudShell暂不支持委托账号和子项目。 图1 CloudShell 图2 在CloudShell中使用kubectl
  • 在“连接客户端”页面获取集群连接地址 登录GaussDB(DWS)管理控制台。 在左侧导航栏中,单击“连接客户端”。 在“ 数据仓库 连接信息”区域,选择一个可用的集群名称。 只能选择状态为“可用”的集群。 图1 数据仓库连接信息 查看并获取集群的连接信息。 “内网IP” “公网IP” “弹性负载均衡地址” “JDBC连接字符串(内网)” “JDBC连接字符串(公网)” “ODBC连接字符串” 如果创建集群时没有自动绑定弹性IP,“公网IP”显示为空。如果您想使用公网访问地址(由弹性IP和数据库端口组成)从互联网访问集群,可以单击“绑定弹性IP”为集群绑定弹性IP。 如果创建集群时绑定了弹性IP,如果您不想使用公网访问地址访问集群,可以单击“解绑弹性IP”为集群解绑弹性IP。弹性IP解绑后,“公网IP”显示为空。 如果创建集群时没有绑定弹性负载均衡,“弹性负载均衡地址”显示为空,可以单击“绑定弹性负载均衡”进行绑定,解决CN单点故障。 如果集群绑定了弹性负载均衡,为保证集群高可用,请优先使用弹性负载均衡地址连接集群。 如果集群开启了IPv6双栈网络功能,则内网IP既有IPv4,也有IPv6,您可根据需要选择IPv4或IPv6进行DWS集群的连接。
  • 常见问题 Error from server Forbidden 使用kubectl在创建或查询Kubernetes资源时,显示如下内容: # kubectl get deploy Error from server (Forbidden): deployments.apps is forbidden: User "0c97ac3cb280f4d91fa7c0096739e1f8" cannot list resource "deployments" in API group "apps" in the namespace "default" 原因是用户没有操作该Kubernetes资源的权限,请参见命名空间权限(Kubernetes RBAC授权)为用户授权。 The connection to the server localhost:8080 was refused 使用kubectl在创建或查询Kubernetes资源时,显示如下内容: The connection to the server localhost:8080 was refused - did you specify the right host or port? 原因是由于该kubectl客户端未配置集群认证,请参见4进行配置。
  • 使用kubectl连接集群 若您需要从客户端计算机连接到Kubernetes集群,可使用Kubernetes命令行客户端kubectl,您可登录CCE控制台,单击待连接集群名称,在集群“总览”页面查看访问地址以及kubectl的连接步骤。 图1 集群连接信息 您需要先下载kubectl以及配置文件,复制到您的客户端机器,完成配置后,即可以访问Kubernetes集群。使用kubectl连接集群的步骤如下: 准备环境 您需要准备一台与集群同VPC的虚拟机,并绑定弹性公网IP用于下载kubectl。 下载kubectl 如果已经安装kubectl,则跳过此步骤,您可执行kubectl version命令判断是否已安装kubectl。 本文以Linux环境为例安装和配置kubectl,详情请参考安装kubectl。 登录到您的客户端机器,下载kubectl。 cd /home curl -LO https://dl.k8s.io/release/{v1.25.0}/bin/linux/amd64/kubectl 其中{v1.25.0}为指定的版本号,请根据集群版本进行替换。 安装kubectl。 chmod +x kubectl mv -f kubectl /usr/local/bin 获取kubectl配置文件 在集群概览页中的“连接信息”版块,单击kubectl后的“配置”按钮,查看kubectl的连接信息,并在弹出页面中下载配置文件。 图2 下载配置文件 kubectl配置文件(kubeconfig.json)用于对接认证集群,请您妥善保存该认证凭据,防止文件泄露后,集群有被攻击的风险。 IAM用户下载的配置文件所拥有的Kubernetes权限与CCE控制台上IAM用户所拥有的权限一致。 如果Linux系统里面配置了KUBECONFIG环境变量,kubectl会优先加载KUBECONFIG环境变量,而不是$home/.kube/config,使用时请注意。 配置kubectl 以Linux环境为例配置kubectl。 登录到您的客户端机器,复制3中下载的配置文件(kubeconfig.json)到您客户端机器的/home目录下。 配置kubectl认证文件。 cd /home mkdir -p $HOME/.kube mv -f kubeconfig.json $HOME/.kube/config 切换kubectl的访问模式。 kubectl config use-context internal
  • 权限说明 kubectl访问CCE集群是通过集群上生成的配置文件(kubeconfig.json)进行认证,kubeconfig.json文件内包含用户信息,CCE根据用户信息的权限判断kubectl有权限访问哪些Kubernetes资源。即哪个用户获取的kubeconfig.json文件,kubeconfig.json就拥有哪个用户的信息,这样使用kubectl访问时就拥有这个用户的权限。 用户拥有的权限请参见集群权限(IAM授权)与命名空间权限(Kubernetes RBAC授权)的关系。
  • 为API Server绑定EIP 登录CCE控制台,单击集群名称进入集群。 查看集群概览页,在右边“连接信息”下公网地址一栏,单击“绑定”。 选择一个已有的弹性公网IP。如果无可用IP,可单击“创建弹性IP”前往EIP控制台进行创建。 通过绑定EIP实现公网访问,集群存在风险,建议绑定的EIP配置 DDoS高防服务 或配置API Server访问策略。 绑定EIP将会短暂重启集群API Server并更新kubeconfig证书,请避免在此期间操作集群。 单击“确定”。