如何让我的 GCE 实例注册到内部 GCP DNS 区域?有没有内置的方法来做到这一点?
编辑:看起来我可以做到这一点https://cloud.google.com/sdk/gcloud/reference/dns/record-sets/transaction/add
如何让我的 GCE 实例注册到内部 GCP DNS 区域?有没有内置的方法来做到这一点?
编辑:看起来我可以做到这一点https://cloud.google.com/sdk/gcloud/reference/dns/record-sets/transaction/add
有关这方面的完整指南,请查看Google Cloud Platform in Action。
您可以使用 Cloud DNS API 来注册实例,这非常简单。我认为没有很好记录的部分是如何在启动脚本中获取正确的 IP 地址等。
以下代码片段在 Node.js 中有一些帮助程序,它们可以下拉实例名称、区域和 IP 地址,然后您可以使用它们向 Cloud DNS 注册。
const request = require('request');
const metadataUrl = 'http://metadata.google.internal/computeMetadata/v1/';
const metadataHeader = {'Metadata-Flavor': 'Google'};
const getMetadata = (path) => {
const options = {
url: metadataUrl + path,
headers: metadataHeader
};
return new Promise((resolve, reject) => {
request(options, (err, resp, body) => {
resolve(body) ? err === null : reject(err);
});
});
};
const getInstanceName = () => {
return getMetadata('instance/name');
};
const getInstanceZone = () => {
return getMetadata('instance/zone').then((data) => {
const parts = data.split('/');
return parts[parts.length-1];
})
};
const getInstanceIp = () => {
const path = 'instance/network-interfaces/0/access-configs/0/external-ip';
return getMetadata(path);
};
const getInstanceDetails = () => {
const promises = [getInstanceName(), getInstanceZone(), getInstanceIp()];
return Promise.all(promises).then((data) => {
return {
name: data[0],
zone: data[1],
ip: data[2]
};
});
};
因此,在 Cloud DNS 中,您可以通过执行以下操作来使用这些帮助程序进行注册(请注意,这是使用 DNS 库的早期版本编写的——您可以通过运行来安装它npm install @google-cloud/dns@0.6.1
)。
const dns = require('@google-cloud/dns')({
projectId: 'your-project-id'
});
const zone = dns.zone('mydomain-dot-com');
getInstanceDetails().then((details) => {
return zone.record('a', {
name: [details.name, details.zone].join('-') + '.mydomain.com.',
data: details.ip,
ttl: 86400
});
}).then((record) =>{
return zone.createChange({add: record});
}).then((data) => {
const change = data[0];
console.log('Change created at', change.metadata.startTime,
'as Change ID', change.metadata.id);
console.log('Change status is currently', change.metadata.status);
});
听起来您想要一个内部 DNS 注册,在这种情况下,这会自动发生。请参阅https://cloud.google.com/compute/docs/internal-dns。
例如,如果您创建一个名为“instance-1”的实例,它将自动从与instance-1
或 FQDN:相同的网络和项目中的任何实例解析[HOST_NAME].c.[PROJECT_ID].internal
。
注意:自动外部 DNS 注册现在处于 alpha 阶段:https ://issuetracker.google.com/issues/35904549