繁体   English   中英

如何在内部将 mysql kubernetes 容器与 nodejs k8s 容器连接?

[英]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!

从 ClusterIP 为我工作或更好的方式去使用本地集群服务的主机名 ex。 db-mysql.default.svc.cluster.local 这样,如果您的集群重新启动并且您的 IP 发生变化,那么您就可以解决它。

在此处输入图片说明

尝试:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM