python—如何在kubernetes集群中使用脚本语言连接到数据库

sczxawaw  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(338)

使用googlekubernetes引擎,我在kubernetes中设置了一个mysql数据库部署和服务,很像wordpress示例。我想通过在kubernetes集群(r-user-app,w/2容器)的另一个部署和服务中使用的r来访问它。这与docker中的网络有关。

> kubectl get services
NAME         TYPE           CLUSTER-IP      EXTERNAL-IP      PORT(S)                         AGE
kubernetes   ClusterIP      10.15.240.1     <none>           443/TCP                         8d
mysql        LoadBalancer   10.15.248.129   35.227.123.232   3306:31410/TCP                  3m
r-user-app   LoadBalancer   10.15.255.135   35.227.33.206    3838:31003/TCP,8787:32395/TCP   1d

exec到 r-user-app 部署,我看到mysql服务:

root@r-user-app-1788932656-vgczh:/# getent hosts mysql
10.15.248.129   mysql.default.svc.cluster.local

然而,当我试图通过r获得它时,我没有这样的运气:

root@r-user-app-1788932656-vgczh:/# R
R version 3.4.2 (2017-09-28) -- "Short Summer"
-----
> require("RMySQL")
Loading required package: RMySQL
Loading required package: DBI
> mydb<-dbConnect(MySQL(), user="root", password="mypassword", host="10.15.248.129")
Error in .local(drv, ...) :
  Failed to connect to database: Error: Can't connect to MySQL server on '10.15.248.129' (107)

使用 EXTERNAL-IP 也不管用 port=3306 没用。
在python中也是这样:

> db=MySQLdb.connect("10.15.248.129", "root", "mypassword")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.7/dist-packages/MySQLdb/__init__.py", line 81, in Connect
    return Connection(*args,**kwargs)
  File "/usr/local/lib/python2.7/dist-packages/MySQLdb/connections.py", line 193, in __init__
    super(Connection, self).__init__(*args,**kwargs2)
_mysql_exceptions.OperationalError: (2003, 'Can\'t connect to MySQL server on \'10.15.248.129\' (111 "Connection refused")')

也许我连该问的问题都不知道!请帮帮我#库贝努贝

pbossiut

pbossiut1#

回答我自己的问题:这是yaml的问题。需要确保与 Service ```
selector:
app: my-app
tier: mysql

以及 `Deployment` ```
spec:
  selector:
    matchLabels:
      app: my-app
      tier: mysql

现在我们可以使用“mysql”而不是主机ip地址来访问数据库。

zsbz8rwp

zsbz8rwp2#

你不需要使用ip。您可以通过名称直接访问服务器。您甚至不需要使用带有“mysql.default.svc.cluster.local”的dns全名,只要“mysql”就足够了。
您还应该检查mysql pod,看它是否部署正确。使用 Type=LoadBalancer 对于数据库来说,这不是一个好主意,因为它会将它们开放给外部网络。

相关问题