Merge pull request #57 from HideyoshiSolutions/implements-kubeconfig

Implements KUBECONFIG Env Secret for Github
This commit is contained in:
2024-10-20 22:17:38 -03:00
committed by GitHub
9 changed files with 169 additions and 57 deletions

92
.terraform.lock.hcl generated
View File

@@ -2,30 +2,31 @@
# Manual edits may be lost in future updates. # Manual edits may be lost in future updates.
provider "registry.terraform.io/cloudflare/cloudflare" { provider "registry.terraform.io/cloudflare/cloudflare" {
version = "4.37.0" version = "4.44.0"
constraints = "~> 4.0" constraints = "~> 4.0"
hashes = [ hashes = [
"h1:0h0qRJYPHL92Dx3NYZO2WJ21cxyZGEoldzw9aYhPnew=", "h1:MeMGdavako/OPTU/qAgKRIQKD49x9tn4PGrOTWi9tFE=",
"zh:012a6c3e8bf4aca0ebe0884e15bd42fd018659193f2159d5d2bf9948a9be1bc4", "zh:0cae95e8c9d2d979669712745251dcf5720cee2a59bb81d8ad2c2dcf0e6e0c7a",
"zh:079666c0a079237af46ed19ffc4143655ee0e8920a274868e44fbc3db88f346d", "zh:1220aee9549e7938648f6a36237929ead0de8244c6a00f8e8cded559f4b65a2f",
"zh:08e7ff86f6848f3109d59ad46f8c0987178eff2f70c8ef03f2d44ae68e42dfb3", "zh:23ae1862e5fe5b583b8ec2c96f80a5ba0e3883be8e1169a0484a45106cc238ce",
"zh:1ce8a499fdf8f484f7d18ec91566bc0759b07d0ca710990cd60d32b222e416b1", "zh:3034654c6f34e419c53dcd6ea558b715e1150fbcc70c93209c5ee88a03025072",
"zh:348e72338095bffccf7c46c7e6b9d0e063a22d9ae761061b0b31dea1aad22cd9", "zh:3b64a66f3ddeb04345511262ad9376eb3c26e0683a78f47a3fd7f5e71f3f7e27",
"zh:47d39343dea1ef469a2c8e51c8d5993687af427a132da5379796fec27acb5710", "zh:4b29435e1e8f970b92bb38eca52820f7a8362c16235334aef9a83be32bd00094",
"zh:4cdf8e9579f9af3c72270088fc6e22208f0f91fd4382bc4a860d16040c86917b", "zh:4f8fe69db7f54bce0e78a4c671aa5db20515114626035051f387d9833f4a5a91",
"zh:4fbebb21ecebc7e5ac0ea9e341c5dbea3094fc0579e4dc5b40bfe693164e022e", "zh:86776bfbdabd2095975be9b3ca999c2f47ca5194ece6c58c69130ccfa2e3c97d",
"zh:778578dda7dd98576a3fe228132c8b60f646f4cf113638c94f1c40e2b11c027c",
"zh:890df766e9b839623b1f0437355032a3c006226a6c200cd911e15ee1a9014e9f", "zh:890df766e9b839623b1f0437355032a3c006226a6c200cd911e15ee1a9014e9f",
"zh:894071f0f42571f820918d1a4316704923e29c5b2392704c1cbd063a04a641b8", "zh:9d50271a09ee01a7105c06e582c52743a3baaf46f298d52bfc9e64cd7bfaa712",
"zh:8d11dd73dd499c74d89f77a7e1b3d4a077ac88b0c9c3412e9a6a1b4efe17d107", "zh:a1e12d1c3472d457140de0e8b77a4b09e5cdcd3e2f6c0be0fe0dae0526d368db",
"zh:991e088be8381a73872cd33bb659e9dd69d7ab1f1f8d89b3cd17ffe59dffc65f", "zh:ad638e2c91490367d55ec6fe46ee34a9f7c151ca6e3cc52e5bad9f358e77f1aa",
"zh:9c0848b9c7e6799c9ffcf3afa70ad94a027f3e15a94679d56790714de0b072c5", "zh:cc4c496f2c594994a9d966f7ebe00a797eca9b924ac1bbe5aef26ec83ec7f833",
"zh:ad71ae800065ffc24b94d994250136ae8a9f6da704cf91b0dc9e14989e947369", "zh:e74d5a3695deb38c2858d1c99c424495900e9b298ca8961c0a2fc1b3714c4c77",
"zh:f4b6efa4c2b4c85c92171dc0824dbf42af9dde5250131494de803e0b9fe1ea3c",
] ]
} }
provider "registry.terraform.io/hashicorp/aws" { provider "registry.terraform.io/hashicorp/aws" {
version = "5.17.0" version = "5.17.0"
constraints = "5.17.0"
hashes = [ hashes = [
"h1:U+EDfeUqefebA1h7KyBMD1xH0h311LMi7wijPDPkC/0=", "h1:U+EDfeUqefebA1h7KyBMD1xH0h311LMi7wijPDPkC/0=",
"zh:0087b9dd2c9c638fd63e527e5b9b70988008e263d480a199f180efe5a4f070f0", "zh:0087b9dd2c9c638fd63e527e5b9b70988008e263d480a199f180efe5a4f070f0",
@@ -66,24 +67,47 @@ provider "registry.terraform.io/hashicorp/tls" {
} }
provider "registry.terraform.io/hideyoshinakazone/yoshik3s" { provider "registry.terraform.io/hideyoshinakazone/yoshik3s" {
version = "1.0.0" version = "1.1.0"
constraints = "1.0.0" constraints = "1.1.0"
hashes = [ hashes = [
"h1:ScD2CIoiTLlKljR2+t7lrUGYiQJuC2RLWV1okq6xEXM=", "h1:PU3LP/kaYBNQ1Xz4yU5Fks9U0GP1FXsdPlh0TuH0ojE=",
"zh:047b1b2c0299a47344a73c8c4b85f5e30eb4f32f275647e2807b3100ef283d39", "zh:0207cc1fe7d13f72a1e32deefbec269ee7abe19b74feda0b1faa458a2699c770",
"zh:36c52b3819ea96dad8bd567f0aed798414f6138169826b8550bc88fbd56aa4cf", "zh:1c93ca95f4ec0dd2c787e9daa3ee7c9d657f25d5b6e2cd4aaa69e0334586c50f",
"zh:615280841dd4160873b5dbfda432dd363a5460ec33995078658c980a1bf288af", "zh:1d1b3d62445001e240788ff3f482087511d5e8995b71ffc1ab71a668d713b94b",
"zh:761d4cd506a5b67d8fdf1db39ead44c5fb3d77b624546005f6221bba9a6c94af", "zh:4df95751142f5bd0181aaec97f051a9964c23ed989461342c050442556d0ea46",
"zh:7eb64df7b548faba767bd90b70ccb3a9f20906abf780eb87d7e8ad592d69d99f", "zh:56f924030c030e01cab9fd44e18476c5db336da6bbcf4a4ddb9213185cd21185",
"zh:6e16fdb535791b4ec4167d3068b91fd24ba1fdc76e9e3bac137b0d44b95eb0c9",
"zh:773366ab4b8b7f9e045ec09c5c2b9dcb4452a10329e1d3493addf95e3024520d",
"zh:7f7c384e4ef942061cbc0695250176f1922d6496ac21407f0b27bf78f2968586",
"zh:890df766e9b839623b1f0437355032a3c006226a6c200cd911e15ee1a9014e9f", "zh:890df766e9b839623b1f0437355032a3c006226a6c200cd911e15ee1a9014e9f",
"zh:940bea22d514171fb63196504c846c18ff1649ee13f5dda955d684d574e895b3", "zh:8e9ff607e9d9d935b4038b018aa68c6c062a1a54203835500ac9146937a996d8",
"zh:ae50578500696385c50bb818d1c44169f041cb0349f8289dbfb6e217be7ce8ae", "zh:ba8cc43465c0a6fb64219f52d05713f8b91dc43515becd073db1aec40ebed34c",
"zh:af132cb60a9638356113645f2bf73eb6ec8d168557e8025872b5d1f8e956aa25", "zh:be6457d1312956109898ca31b3d57418c4b1c2849c2d5d1d96fda994f0a15290",
"zh:d425e036680897ec684a437ca076103e2595458cc1714505ee95ba045a1c32f3", "zh:c50af979b6c2f3bf2836b2160c300261038fd6dfcf073abc2cf620683e7f2ba3",
"zh:da8ec1a687df6a00b4fc21b7b419c820bf1abc9c4d4d5021c9f52bef532f3b28", "zh:e7249e82db4f0599c9c7258f695bb69167d90bac18b76f4b796c500828287f08",
"zh:e06e316874b3f286d5864465c1b2e9eccf6d04416e8f7fdfc52e537349ea1c4b", "zh:f61160d21e55264065a0c4c818344c6afd1b5dca2a89b1b65b6767023805045a",
"zh:e0c686ad3f969d86d6296ae1fd4629a3185982fee18f321311303c33a9c88157", ]
"zh:e7b406c5bc3c64158956660b7a7e126ecaa7e063cc27d69235099b2adf538140", }
"zh:f6bd78aadcccf6c19826896a7fc2d1eb5b91748f48618575ca207fdfea4b31b3",
provider "registry.terraform.io/integrations/github" {
version = "6.3.1"
constraints = "6.3.1"
hashes = [
"h1:kNCbU7jr9j09hqWwyXGFDN95Un28gWO2kY2yImv1MDY=",
"zh:25ae1cb97ec528e6b7e9330489f4a33acc0fa80b909c113a8445656bc524c5b9",
"zh:3e1f6300dc10e52a54f13352770ed79f25ff4ba9ac49b776c52a655a3488a20b",
"zh:4aaf2877ec22e63358d7c9cd48c7d7947d1a1dc4d03231f0af193d8975d5918a",
"zh:4b904a81fac12a2a7606c8d811cb9c4e13581adcaaa19e503a067ac95c515925",
"zh:54fe7e0dca04e698631a5b86bdd43ef09a31375e68f8f89970b4315cd5fc6312",
"zh:6b14f92cf62784eaf20f43ef58ce966735f30d43deeab077943bd410c0d8b8b2",
"zh:86c49a1c11c024b26b6750c446f104922a3fe8464d3706a5fb9a4a05c6ca0b0a",
"zh:8939fb6332c4a58c4e90245eb9f0110987ccafff06b45a7ed513f2759a2abe6a",
"zh:8b4068a78c1f357325d1151facdb1aff506b9cd79d2bab21a55651255a130e2f",
"zh:ae22f5e52f534f19811d7f9480b4eb442f12ff16367b3893abb4e449b029ff6b",
"zh:afae9cfd9d49002ddfea552aa4844074b9974bd56ff2c2458f2297fe0df56a5b",
"zh:bc7a434408eb16a4fbceec0bd86b108a491408b727071402ad572cdb1afa2eb7",
"zh:c8e4728ea2d2c6e3d2c1bc5e7d92ed1121c02bab687702ec2748e3a6a0844150",
"zh:f6314b2cff0c0a07a216501cda51b35e6a4c66a2418c7c9966ccfe701e01b6b0",
"zh:fbd1fee2c9df3aa19cf8851ce134dea6e45ea01cb85695c1726670c285797e25",
] ]
} }

View File

@@ -13,6 +13,8 @@ terraform {
resource "aws_s3_bucket" "default" { resource "aws_s3_bucket" "default" {
bucket = "${var.project_name}-bucket" bucket = "${var.project_name}-bucket"
force_destroy = true
} }
resource "aws_s3_bucket_public_access_block" "bucket_public_disabled" { resource "aws_s3_bucket_public_access_block" "bucket_public_disabled" {

View File

@@ -15,6 +15,7 @@ variable "project_domain" {
variable "k3s_token" { variable "k3s_token" {
type = string type = string
sensitive = true
} }
variable "number_of_workers" { variable "number_of_workers" {
@@ -25,14 +26,17 @@ variable "number_of_workers" {
variable "aws_region" { variable "aws_region" {
type = string type = string
default = "sa-east-1" default = "sa-east-1"
sensitive = true
} }
variable "aws_access" { variable "aws_access" {
type = string type = string
sensitive = true
} }
variable "aws_secret" { variable "aws_secret" {
type = string type = string
sensitive = true
} }
variable "aws_instance_type" { variable "aws_instance_type" {
@@ -47,16 +51,35 @@ variable "aws_ami" {
variable "cloudflare_api_token" { variable "cloudflare_api_token" {
type = string type = string
sensitive = true
} }
variable "cloudflare_zone_id" { variable "cloudflare_zone_id" {
type = string type = string
sensitive = true
} }
variable "ssh_public_key_main" { variable "ssh_public_key_main" {
type = string type = string
sensitive = true
} }
variable "ssh_public_key_ci_cd" { variable "ssh_public_key_ci_cd" {
type = string type = string
sensitive = true
}
variable "github_owner" {
type = string
default = "HideyoshiSolutions"
}
variable "github_token" {
type = string
sensitive = true
}
variable "github_repository" {
type = string
default = "infra-hideyoshi.com"
} }

19
github/config.tf Normal file
View File

@@ -0,0 +1,19 @@
variable "environment_name" {
type = string
}
variable "github_owner" {
type = string
default = "HideyoshiSolutions"
}
variable "github_repository" {
type = string
default = "infra-hideyoshi.com"
}
variable "cluster_kubeconfig" {
type = string
sensitive = true
}

23
github/github.tf Normal file
View File

@@ -0,0 +1,23 @@
terraform {
required_providers {
github = {
source = "integrations/github"
version = "6.3.1"
}
}
}
data "github_user" "current" {
username = ""
}
data "github_repository" "infra_hideyoshi_com" {
full_name = "${var.github_owner}/${var.github_repository}"
}
resource "github_actions_environment_secret" "cluster_kubeconfig" {
repository = data.github_repository.infra_hideyoshi_com.name
environment = var.environment_name
secret_name = "KUBECONFIG"
plaintext_value = var.cluster_kubeconfig
}

View File

@@ -118,7 +118,7 @@ resource "aws_instance" "worker" {
instance_market_options { instance_market_options {
market_type = "spot" market_type = "spot"
spot_options { spot_options {
max_price = 0.0014 max_price = 0.0020
instance_interruption_behavior = "stop" instance_interruption_behavior = "stop"
spot_instance_type = "persistent" spot_instance_type = "persistent"
} }
@@ -166,14 +166,12 @@ output "pool_master_public_ip" {
} }
output "pool_master_instance" { output "pool_master_instance" {
value = [ value = {
{ host: aws_instance.main.public_ip
host: aws_instance.main.public_ip port: 22
port: 22 user: "ubuntu"
user: "ubuntu" private_key: tls_private_key.terraform_ssh_key.private_key_pem
private_key: tls_private_key.terraform_ssh_key.private_key_pem }
}
]
} }
output "pool_worker_instances" { output "pool_worker_instances" {

View File

@@ -15,12 +15,12 @@ variable "master_server_address" {
} }
variable "cluster_main_node" { variable "cluster_main_node" {
type = list(object({ type = object({
host = string host = string
port = string port = string
user = string user = string
private_key = string private_key = string
})) })
description = "map of objects - main cluster nodes - [host, port]" description = "map of objects - main cluster nodes - [host, port]"
} }

View File

@@ -2,7 +2,7 @@ terraform {
required_providers { required_providers {
yoshik3s = { yoshik3s = {
source = "HideyoshiNakazone/yoshik3s" source = "HideyoshiNakazone/yoshik3s"
version = "1.0.0" version = "1.1.0"
} }
} }
} }
@@ -13,34 +13,29 @@ terraform {
resource "yoshik3s_cluster" "main_cluster" { resource "yoshik3s_cluster" "main_cluster" {
name = "main-cluster" name = "main-cluster"
token = var.cluster_token token = var.cluster_token
address = var.cluster_domain
k3s_version = "v1.30.2+k3s2" k3s_version = "v1.30.2+k3s2"
} }
resource "yoshik3s_master_node" "master_node" { resource "yoshik3s_master_node" "master_node" {
cluster = yoshik3s_cluster.main_cluster cluster = yoshik3s_cluster.main_cluster
count = length(var.cluster_main_node)
node_connection = { node_connection = {
host = var.cluster_main_node[count.index].host host = var.cluster_main_node.host
port = var.cluster_main_node[count.index].port port = var.cluster_main_node.port
user = var.cluster_main_node[count.index].user user = var.cluster_main_node.user
private_key = var.cluster_main_node[count.index].private_key private_key = var.cluster_main_node.private_key
} }
node_options = [ node_options = [
"--write-kubeconfig-mode 644",
"--disable traefik", "--disable traefik",
"--node-label node_type=master", "--node-label node_type=master",
"--tls-san ${var.cluster_domain}"
] ]
} }
resource "yoshik3s_worker_node" "worker_node" { resource "yoshik3s_worker_node" "worker_node" {
master_server_address = var.master_server_address
cluster = yoshik3s_cluster.main_cluster cluster = yoshik3s_cluster.main_cluster
count = length(var.cluster_worker_node) count = length(var.cluster_worker_node)
@@ -55,4 +50,12 @@ resource "yoshik3s_worker_node" "worker_node" {
node_options = [ node_options = [
"--node-label node_type=worker", "--node-label node_type=worker",
] ]
depends_on = [yoshik3s_master_node.master_node]
} }
output "cluster_kubeconfig" {
value = yoshik3s_master_node.master_node.kubeconfig
sensitive = true
}

22
main.tf
View File

@@ -12,7 +12,11 @@ terraform {
} }
yoshik3s = { yoshik3s = {
source = "HideyoshiNakazone/yoshik3s" source = "HideyoshiNakazone/yoshik3s"
version = "1.0.0" version = "1.1.0"
}
github = {
source = "integrations/github"
version = "6.3.1"
} }
} }
} }
@@ -31,6 +35,11 @@ provider "yoshik3s" {
# No configuration needed # No configuration needed
} }
provider "github" {
owner = var.github_owner
token = var.github_token
}
### MODULES ### MODULES
@@ -79,4 +88,15 @@ module "kubernetes" {
master_server_address = module.instances.pool_master_public_ip master_server_address = module.instances.pool_master_public_ip
cluster_main_node = module.instances.pool_master_instance cluster_main_node = module.instances.pool_master_instance
cluster_worker_node = module.instances.pool_worker_instances cluster_worker_node = module.instances.pool_worker_instances
}
module "github" {
source = "./github"
providers = {
github = github
}
environment_name = var.environment_name
github_owner = var.github_owner
github_repository = var.github_repository
cluster_kubeconfig = module.kubernetes.cluster_kubeconfig
} }