[英]How to connect mysql kubernetes container internally with nodejs k8s container?
我在同一个命名空间下创建了 mysql k8s 容器和 nodejs k8s 容器。我无法连接 mysql db。(sequalize)
我尝试使用 ''' http://mysql.e-commerce.svc.cluster.local:3306 ''' 进行连接。但是我收到了“SequelizeHostNotFoundError”错误。
这是我的服务和部署 yaml 文件。
kind: Service
metadata:
labels:
app: mysql
name: mysql
namespace: e-commerce
spec:
type: NodePort
ports:
- port: 3306
targetPort: 3306
nodePort: 30306
selector:
app: mysql
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: mysql
namespace: e-commerce
spec:
replicas: 1
template:
metadata:
labels:
app: mysql
spec:
containers:
- image: mysql:5.6
name: mysql-container
env:
- name: MYSQL_ROOT_PASSWORD
value: password
ports:
- containerPort: 3306
name: mysql
volumeMounts:
- name: mysql-persistent-storage
mountPath: /var/lib/mysql
volumes:
- name: mysql-persistent-storage
persistentVolumeClaim:
claimName: mysql-pv-claim```
您正在尝试使用 http 协议访问数据库,保留它或更改为 mysql://ip:3306。 有些客户端不接受数据库的 DNS 名称,因此您可以检查服务的 ClusterIP 并尝试该 IP。
正如社区成员FL3SH所提到的,您可以将您的spec.type
更改为clusterIP
。 您可以使用稳定的掌舵图表wordpress/mysql重现此任务。
对于新创建的 pod:
mysql-mariadb-0
mysql-wordpress
和服务:
mysql-mariadb
mysql-wordpress
成功部署后,您可以通过运行以下命令来验证您的服务是否在mysql-wordpress
pod 中工作:
kubectl exec -it mysql-wordpress-7cb4958654-tqxm6 -- /bin/bash
此外,您还可以安装其他工具,例如 nslooukp、telnet:
apt-get update && apt-get install dnsutils telnet
您可以通过运行这些命令来测试服务和与 db 的连接:
nslookup mysql-mariadb
telnet mysql-mariadb 3306
mysql -uroot -hmysql-mariadb -p<your_db_password>
示例输出:
nslookup mysql-mariadb
Server: 10.125.0.10
Address: 10.125.0.10#53
Non-authoritative answer:
Name: mysql-mariadb.default.svc.cluster.local
Address: 10.125.0.76
mysql -u root -hmysql-mariadb -p<your_db_password>
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 2068
Server version: 10.1.40-MariaDB Source distribution
您应该能够使用服务名称或使用 IP 地址进行连接。 在这个掌舵图中,您还可以找到 statefulset 的模板,以便创建 mysql pod。
更新
从第二个 pod fe ubuntu 运行这个例子 - Node.js Mysql ,安装 node.js 并创建到数据库demo_db_connection.js 的连接
例子:
var mysql = require('mysql');
var con = mysql.createConnection({
host: "mysql-mariadb",
user: "root",
password: "yourpassword"
});
con.connect(function(err) {
if (err) throw err;
console.log("Connected!");
});
运行:
root@ubuntu:~/test# node demo_db_connection.js
Connected!
尝试:
kind: Service
metadata:
labels:
app: mysql
name: mysql
namespace: e-commerce
spec:
clusterIP: None
type: ClusterIP
ports:
- port: 3306
targetPort: 3306
selector:
app: mysql
使用相同的连接字符串。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.