我使用kubernetes (使用terraform)在google云平台上部署了一个cassandra集群。
cassandra集群工作得很好,我正在用kubectl exec -it cassandra-0 bash运行一些命令,数据正在传播到所有其他节点,一切都运行得很好。
当我运行host cassandra时,我看到以下内容:
cassandra.default.svc.cluster.local has address 10.32.1.4
cassandra.default.svc.cluster.local has address 10.32.1.5
cassandra.default.svc.cluster.local has address 10.32.3.12在此之前,一切都是正确的。
但是现在我有一个我不知道如何解决的问题。我有一个Google Cloud函数,我想连接到这个数据库并插入一些数据。
做这件事最好的方法是什么?我想我不应该把数据库暴露在互联网上。但是当我尝试将云函数连接到cassandra.default.svc.cluster.local时,我看不到服务器。
我在cassandra服务上使用cluster_ip = "None"
更新:添加了以下信息:
我的Google Cloud函数是这样的:
exports.helloGET = function helloGET (req, res) {
const cassandra = require('cassandra-driver');
const client = new cassandra.Client({ contactPoints: ['cassandra.default.svc.cluster.local'], localDataCenter: 'DC1', keyspace: 'my_bd_name' });
const query = 'SELECT * FROM User';
client.execute(query)
.then(result => console.log('Users: ', dump(result.rows)));
res.send('Cassandra loaded... :' + dump(result.rows));
};发布于 2019-03-28 21:18:19
预计会有一个完整的SRV record。
服务器记录
SRV记录是为属于普通或无头服务的命名端口创建的。对于每个命名端口,SRV记录的格式为_my-port-name._my-port-protocol.my-svc.my-namespace.svc.cluster.local。对于常规服务,将解析为端口号和域名:my-svc.my-namespace.svc.cluster.local。对于无头服务,它解析为多个应答,每个应答对应一个支持该服务的pod,并包含auto-generated-name.my-svc.my-namespace.svc.cluster.local形式的pod的端口号和域名。
在您的示例中,您创建了一个无头服务(没有集群IP,因为您使用的是cluster_ip = "None"),并且需要找到auto-generated-name.cassandra.default.svc.cluster.local的auto-generated-name。
https://stackoverflow.com/questions/55398097
复制相似问题