首页 > 解决方案 > 在 DigitalOcean 上使用 terraform 预部署 Kubernetes 负载均衡器?

问题描述

我正在学习如何使用 terraform 在 DO 上创建一个 k8s 集群,我一直在尝试使用ID我创建的单个 K8s 节点,并从负载均衡器中引用它。

这样做的主要原因是我可以在.tf文件中声明 FQDN。

首先,这是集群声明:


variable "digitalocean_token" {}

provider "digitalocean" {
  token = "${var.digitalocean_token}"
}

resource "digitalocean_kubernetes_cluster" "foo" {
  name    = "foo"
  region  = "nyc1"
  version = "1.12.1-do.2"

  node_pool {
    name       = "woker-pool"
    size       = "s-1vcpu-2gb"
    node_count = 1
  }
}

这是负载均衡器声明:

resource "digitalocean_loadbalancer" "foo" {
  name = "k8s-lb.nyc1"
  region = "nyc1"

  forwarding_rule {
    entry_port = 80
    entry_protocol = "http"

    target_port     = 80
    target_protocol = "http"
  }
  droplet_ids = ["${digitalocean_kubernetes_cluster.foo.node_pool.0.id}"]
}

output "loadbalancer_ip" {
  value = "${digitalocean_loadbalancer.foo.ip}"
}

resource "digitalocean_record" "terraform" {
  domain = "example.com" # "${digitalocean_domain.example.name}"
  type   = "A"
  name   = "terraform"
  value  =  "${digitalocean_loadbalancer.foo.ip}"
}

# Output the FQDN for the record
output "fqdn" {
  value = "${digitalocean_record.terraform.fqdn}"
}

我猜也许这些digitalocean_loadbalancer资源仅设置为与单个液滴一起使用?


以下是输出错误:当我运行时terraform apply

* output.loadbalancer_ip: Resource 'digitalocean_loadbalancer.foo' not found for variable 'digitalocean_loadbalancer.foo.ip'

* digitalocean_record.terraform: Resource 'digitalocean_loadbalancer.foo' not found for variable 'digitalocean_loadbalancer.foo.ip'

* digitalocean_loadbalancer.foo: droplet_ids.0: cannot parse '' as int: strconv.ParseInt: parsing "d4292e64-9c0a-4afb-83fc-83f239bcb4af": invalid syntax

铂。2

我添加了一个digitalocean_droplet资源,以查看传递给负载均衡器的 id 类型。

resource "digitalocean_droplet" "web" {
  name      = "web-1"
  size      = "s-1vcpu-1gb"
  image     = "ubuntu-18-04-x64"
  region    = "nyc1"
}

digitalocean_kubernetes_cluster.foo.node_pool.0.id = '6ae6a787-d837-4e78-a915-cb52155f66fe'

digitalocean_droplet.web.id = 132533158

标签: kubernetesload-balancingterraformdigital-ocean

解决方案


因此,digitalocean_loadbalancer资源有一个可选droplet_tag参数,可用于提供给创建的节点/液滴的公共标签。

但是,当在 Kubernetes 中声明负载均衡器时,仍会创建一个新的负载均衡器。因此,至少目前看来,在 digitalocean 上无法使用 terraform 定义域/CNAME 记录


推荐阅读