使用Google Kubernetes Engine,我已经设置了一个mysql数据库部署&在kubernetes服务,很像wordpress example。我希望通过R和R访问它,我在另一个部署&在我的kubernetes集群中服务(r-user-app,w / 2个容器)。这适用于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
执行r-user-app
部署中的rstudio容器,我看到了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")')
也许我甚至不知道要问的正确问题!请帮忙! #kubenube
答案 0 :(得分:1)
您不需要使用IP。您可以直接按名称访问服务器。您甚至不需要使用完整的DNS名称和#34; mysql.default.svc.cluster.local&#34;,只是&#34; mysql&#34;就够了。
如果部署正确,您还应该检查mysql pod。使用Type=LoadBalancer
对数据库来说不是一个好主意,因为它会将它们打开到外部网络。
答案 1 :(得分:0)
回答我自己的问题:这是yaml的一个问题。需要确保匹配Service
selector:
app: my-app
tier: mysql
和Deployment
spec:
selector:
matchLabels:
app: my-app
tier: mysql
现在我们可以使用&#34; mysql&#34;来访问数据库。而不是主机IP地址。