【问题标题】:How to get the cluster node IPs using Pulumi如何使用 Pulumi 获取集群节点 IP
【发布时间】:2022-01-06 09:43:24
【问题描述】:

这是在 DigitalOcean 上创建托管 Kubernetes 集群的示例。

import * as pulumi from "@pulumi/pulumi";
import * as digitalocean from "@pulumi/digitalocean";

const foo = new digitalocean.KubernetesCluster("foo", {
    region: "nyc1",
    version: "1.20.2-do.0",
    nodePool: {
        name: "front-end-pool",
        size: "s-2vcpu-2gb",
        nodeCount: 3,
    },
});

取自Pulumi DigitalOcean package documentation的示例代码。

如何检索 Droplet 节点 IPv4 地址以用于创建 DnsRecord 资源?

const _default = new digitalocean.Domain("default", {name: "example.com"});

// This code doesn't work because foo.nodePool is just the inputs.
const dnsRecords = foo.nodePool.nodes(node => new digitalocean.DnsRecord("www", {
    domain: _default.name,
    type: "A",
    value: node.ipv4Address,
}));

【问题讨论】:

    标签: javascript digital-ocean pulumi


    【解决方案1】:

    DigitalOcean 不会从您创建的 Kubernetes 集群返回节点 IP 地址列表。您可以使用getDroplet 函数检索这些值。

    但是,您需要在 apply() 中执行此迭代,如下所示:

    const addresses = foo.nodePool.nodes.apply(
        nodes => nodes.forEach(
            (node) => {
                let n = digitalocean.getDropletOutput({
                    name: node.name
                })
                new digitalocean.DnsRecord("www", {
                    domain: domain.name,
                    type: "A",
                    value: n.ipv4Address,
                })
            }
        )
    )
    

    在这里使用 apply 让我们等到 API 创建了 foo.nodePool.nodes。然后我们可以像普通数组一样对其进行迭代,获取液滴,将其分配给变量n,然后为每个节点创建一个新的 DNS 记录

    【讨论】:

    • getDropletOutput 返回一个承诺不需要等待吗?
    • 如果您将结果传递给另一个资源,则不会。
    猜你喜欢
    • 1970-01-01
    • 2021-11-14
    • 1970-01-01
    • 1970-01-01
    • 2017-07-09
    • 2019-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多