1

如何让我的 GCE 实例注册到内部 GCP DNS 区域?有没有内置的方法来做到这一点?

编辑:看起来我可以做到这一点https://cloud.google.com/sdk/gcloud/reference/dns/record-sets/transaction/add

4

2 回答 2

2

有关这方面的完整指南,请查看Google Cloud Platform in Action

您可以使用 Cloud DNS API 来注册实例,这非常简单。我认为没有很好记录的部分是如何在启动脚本中获取正确的 IP 地址等。

以下代码片段在 N​​ode.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);
});
于 2018-01-25T12:17:02.397 回答
1

听起来您想要一个内部 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

于 2018-08-10T20:55:05.567 回答