mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-08-20 10:52:25 +00:00
add terraform and fix docker compose and update gitignore
This commit is contained in:
parent
0f31944be5
commit
7048b7419c
13 changed files with 328 additions and 2 deletions
37
.gitignore
vendored
37
.gitignore
vendored
|
|
@ -57,4 +57,39 @@ node_modules
|
||||||
coverage
|
coverage
|
||||||
typechain
|
typechain
|
||||||
cache
|
cache
|
||||||
artifacts
|
artifacts
|
||||||
|
|
||||||
|
# Local .terraform directories
|
||||||
|
**/.terraform/*
|
||||||
|
|
||||||
|
# .tfstate files
|
||||||
|
*.tfstate
|
||||||
|
*.tfstate.*
|
||||||
|
|
||||||
|
# Crash log files
|
||||||
|
crash.log
|
||||||
|
crash.*.log
|
||||||
|
|
||||||
|
# Exclude all .tfvars files, which are likely to contain sensitive data, such as
|
||||||
|
# password, private keys, and other secrets. These should not be part of version
|
||||||
|
# control as they are data points which are potentially sensitive and subject
|
||||||
|
# to change depending on the environment.
|
||||||
|
*.tfvars
|
||||||
|
*.tfvars.json
|
||||||
|
|
||||||
|
# Ignore override files as they are usually used to override resources locally and so
|
||||||
|
# are not checked in
|
||||||
|
override.tf
|
||||||
|
override.tf.json
|
||||||
|
*_override.tf
|
||||||
|
*_override.tf.json
|
||||||
|
|
||||||
|
# Include override files you do wish to add to version control using negated pattern
|
||||||
|
# !example_override.tf
|
||||||
|
|
||||||
|
# Include tfplan files to ignore the plan output of command: terraform plan -out=tfplan
|
||||||
|
# example: *tfplan*
|
||||||
|
|
||||||
|
# Ignore CLI configuration files
|
||||||
|
.terraformrc
|
||||||
|
terraform.rc
|
||||||
|
|
@ -5,4 +5,3 @@ services:
|
||||||
command: --dev --http --http.addr 0.0.0.0
|
command: --dev --http --http.addr 0.0.0.0
|
||||||
ports:
|
ports:
|
||||||
- 8545:8545
|
- 8545:8545
|
||||||
- 30303:30303
|
|
||||||
|
|
|
||||||
12
terraform/eks-terraform/0-provider.tf
Normal file
12
terraform/eks-terraform/0-provider.tf
Normal file
|
|
@ -0,0 +1,12 @@
|
||||||
|
provider "aws" {
|
||||||
|
region = "us-east-1"
|
||||||
|
}
|
||||||
|
|
||||||
|
terraform {
|
||||||
|
required_providers {
|
||||||
|
aws = {
|
||||||
|
source = "hashicorp/aws"
|
||||||
|
version = "~> 4.56"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
10
terraform/eks-terraform/1-vpc.tf
Normal file
10
terraform/eks-terraform/1-vpc.tf
Normal file
|
|
@ -0,0 +1,10 @@
|
||||||
|
resource "aws_vpc" "main" {
|
||||||
|
cidr_block = "10.0.0.0/16"
|
||||||
|
|
||||||
|
enable_dns_support = true
|
||||||
|
enable_dns_hostnames = true
|
||||||
|
|
||||||
|
tags = {
|
||||||
|
Name = "main"
|
||||||
|
}
|
||||||
|
}
|
||||||
6
terraform/eks-terraform/10-csi-driver-addon.tf
Normal file
6
terraform/eks-terraform/10-csi-driver-addon.tf
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
resource "aws_eks_addon" "csi_driver" {
|
||||||
|
cluster_name = aws_eks_cluster.demo.name
|
||||||
|
addon_name = "aws-ebs-csi-driver"
|
||||||
|
addon_version = "v1.16.0-eksbuild.1"
|
||||||
|
service_account_role_arn = aws_iam_role.eks_ebs_csi_driver.arn
|
||||||
|
}
|
||||||
7
terraform/eks-terraform/2-igw.tf
Normal file
7
terraform/eks-terraform/2-igw.tf
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
resource "aws_internet_gateway" "igw" {
|
||||||
|
vpc_id = aws_vpc.main.id
|
||||||
|
|
||||||
|
tags = {
|
||||||
|
Name = "igw"
|
||||||
|
}
|
||||||
|
}
|
||||||
49
terraform/eks-terraform/3-subnets.tf
Normal file
49
terraform/eks-terraform/3-subnets.tf
Normal file
|
|
@ -0,0 +1,49 @@
|
||||||
|
resource "aws_subnet" "private_us_east_1a" {
|
||||||
|
vpc_id = aws_vpc.main.id
|
||||||
|
cidr_block = "10.0.0.0/19"
|
||||||
|
availability_zone = "us-east-1a"
|
||||||
|
|
||||||
|
tags = {
|
||||||
|
"Name" = "private-us-east-1a"
|
||||||
|
"kubernetes.io/role/internal-elb" = "1"
|
||||||
|
"kubernetes.io/cluster/demo" = "owned"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "aws_subnet" "private_us_east_1b" {
|
||||||
|
vpc_id = aws_vpc.main.id
|
||||||
|
cidr_block = "10.0.32.0/19"
|
||||||
|
availability_zone = "us-east-1b"
|
||||||
|
|
||||||
|
tags = {
|
||||||
|
"Name" = "private-us-east-1b"
|
||||||
|
"kubernetes.io/role/internal-elb" = "1"
|
||||||
|
"kubernetes.io/cluster/demo" = "owned"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "aws_subnet" "public_us_east_1a" {
|
||||||
|
vpc_id = aws_vpc.main.id
|
||||||
|
cidr_block = "10.0.64.0/19"
|
||||||
|
availability_zone = "us-east-1a"
|
||||||
|
map_public_ip_on_launch = true
|
||||||
|
|
||||||
|
tags = {
|
||||||
|
"Name" = "public-us-east-1a"
|
||||||
|
"kubernetes.io/role/elb" = "1"
|
||||||
|
"kubernetes.io/cluster/demo" = "owned"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "aws_subnet" "public_us_east_1b" {
|
||||||
|
vpc_id = aws_vpc.main.id
|
||||||
|
cidr_block = "10.0.96.0/19"
|
||||||
|
availability_zone = "us-east-1b"
|
||||||
|
map_public_ip_on_launch = true
|
||||||
|
|
||||||
|
tags = {
|
||||||
|
"Name" = "public-us-east-1b"
|
||||||
|
"kubernetes.io/role/elb" = "1"
|
||||||
|
"kubernetes.io/cluster/demo" = "owned"
|
||||||
|
}
|
||||||
|
}
|
||||||
18
terraform/eks-terraform/4-nat.tf
Normal file
18
terraform/eks-terraform/4-nat.tf
Normal file
|
|
@ -0,0 +1,18 @@
|
||||||
|
resource "aws_eip" "nat" {
|
||||||
|
vpc = true
|
||||||
|
|
||||||
|
tags = {
|
||||||
|
Name = "nat"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "aws_nat_gateway" "nat" {
|
||||||
|
allocation_id = aws_eip.nat.id
|
||||||
|
subnet_id = aws_subnet.public_us_east_1a.id
|
||||||
|
|
||||||
|
tags = {
|
||||||
|
Name = "nat"
|
||||||
|
}
|
||||||
|
|
||||||
|
depends_on = [aws_internet_gateway.igw]
|
||||||
|
}
|
||||||
45
terraform/eks-terraform/5-routes.tf
Normal file
45
terraform/eks-terraform/5-routes.tf
Normal file
|
|
@ -0,0 +1,45 @@
|
||||||
|
resource "aws_route_table" "private" {
|
||||||
|
vpc_id = aws_vpc.main.id
|
||||||
|
|
||||||
|
route {
|
||||||
|
cidr_block = "0.0.0.0/0"
|
||||||
|
nat_gateway_id = aws_nat_gateway.nat.id
|
||||||
|
}
|
||||||
|
|
||||||
|
tags = {
|
||||||
|
Name = "private"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "aws_route_table" "public" {
|
||||||
|
vpc_id = aws_vpc.main.id
|
||||||
|
|
||||||
|
route {
|
||||||
|
cidr_block = "0.0.0.0/0"
|
||||||
|
gateway_id = aws_internet_gateway.igw.id
|
||||||
|
}
|
||||||
|
|
||||||
|
tags = {
|
||||||
|
Name = "public"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "aws_route_table_association" "private_us_east_1a" {
|
||||||
|
subnet_id = aws_subnet.private_us_east_1a.id
|
||||||
|
route_table_id = aws_route_table.private.id
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "aws_route_table_association" "private_us_east_1b" {
|
||||||
|
subnet_id = aws_subnet.private_us_east_1b.id
|
||||||
|
route_table_id = aws_route_table.private.id
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "aws_route_table_association" "public_us_east_1a" {
|
||||||
|
subnet_id = aws_subnet.public_us_east_1a.id
|
||||||
|
route_table_id = aws_route_table.public.id
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "aws_route_table_association" "public_us_east_1b" {
|
||||||
|
subnet_id = aws_subnet.public_us_east_1b.id
|
||||||
|
route_table_id = aws_route_table.public.id
|
||||||
|
}
|
||||||
40
terraform/eks-terraform/6-eks.tf
Normal file
40
terraform/eks-terraform/6-eks.tf
Normal file
|
|
@ -0,0 +1,40 @@
|
||||||
|
resource "aws_iam_role" "demo" {
|
||||||
|
name = "eks-cluster-demo"
|
||||||
|
|
||||||
|
assume_role_policy = <<POLICY
|
||||||
|
{
|
||||||
|
"Version": "2012-10-17",
|
||||||
|
"Statement": [
|
||||||
|
{
|
||||||
|
"Effect": "Allow",
|
||||||
|
"Principal": {
|
||||||
|
"Service": "eks.amazonaws.com"
|
||||||
|
},
|
||||||
|
"Action": "sts:AssumeRole"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
POLICY
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "aws_iam_role_policy_attachment" "demo_amazon_eks_cluster_policy" {
|
||||||
|
policy_arn = "arn:aws:iam::aws:policy/AmazonEKSClusterPolicy"
|
||||||
|
role = aws_iam_role.demo.name
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "aws_eks_cluster" "demo" {
|
||||||
|
name = "demo"
|
||||||
|
version = "1.27"
|
||||||
|
role_arn = aws_iam_role.demo.arn
|
||||||
|
|
||||||
|
vpc_config {
|
||||||
|
subnet_ids = [
|
||||||
|
aws_subnet.private_us_east_1a.id,
|
||||||
|
aws_subnet.private_us_east_1b.id,
|
||||||
|
aws_subnet.public_us_east_1a.id,
|
||||||
|
aws_subnet.public_us_east_1b.id
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
depends_on = [aws_iam_role_policy_attachment.demo_amazon_eks_cluster_policy]
|
||||||
|
}
|
||||||
69
terraform/eks-terraform/7-nodes.tf
Normal file
69
terraform/eks-terraform/7-nodes.tf
Normal file
|
|
@ -0,0 +1,69 @@
|
||||||
|
resource "aws_iam_role" "nodes" {
|
||||||
|
name = "eks-node-group-nodes"
|
||||||
|
|
||||||
|
assume_role_policy = jsonencode({
|
||||||
|
Statement = [{
|
||||||
|
Action = "sts:AssumeRole"
|
||||||
|
Effect = "Allow"
|
||||||
|
Principal = {
|
||||||
|
Service = "ec2.amazonaws.com"
|
||||||
|
}
|
||||||
|
}]
|
||||||
|
Version = "2012-10-17"
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "aws_iam_role_policy_attachment" "nodes_amazon_eks_worker_node_policy" {
|
||||||
|
policy_arn = "arn:aws:iam::aws:policy/AmazonEKSWorkerNodePolicy"
|
||||||
|
role = aws_iam_role.nodes.name
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "aws_iam_role_policy_attachment" "nodes_amazon_eks_cni_policy" {
|
||||||
|
policy_arn = "arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy"
|
||||||
|
role = aws_iam_role.nodes.name
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "aws_iam_role_policy_attachment" "nodes_amazon_ec2_container_registry_read_only" {
|
||||||
|
policy_arn = "arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryReadOnly"
|
||||||
|
role = aws_iam_role.nodes.name
|
||||||
|
}
|
||||||
|
|
||||||
|
# Optional: only if you want to "SSH" to your EKS nodes.
|
||||||
|
resource "aws_iam_role_policy_attachment" "amazon_ssm_managed_instance_core" {
|
||||||
|
policy_arn = "arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore"
|
||||||
|
role = aws_iam_role.nodes.name
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "aws_eks_node_group" "private_nodes" {
|
||||||
|
cluster_name = aws_eks_cluster.demo.name
|
||||||
|
node_group_name = "private-nodes"
|
||||||
|
node_role_arn = aws_iam_role.nodes.arn
|
||||||
|
|
||||||
|
# Single subnet to avoid data transfer charges while testing.
|
||||||
|
subnet_ids = [
|
||||||
|
aws_subnet.private_us_east_1a.id
|
||||||
|
]
|
||||||
|
|
||||||
|
capacity_type = "ON_DEMAND"
|
||||||
|
instance_types = ["t2.large"]
|
||||||
|
|
||||||
|
scaling_config {
|
||||||
|
desired_size = 1
|
||||||
|
max_size = 2
|
||||||
|
min_size = 0
|
||||||
|
}
|
||||||
|
|
||||||
|
update_config {
|
||||||
|
max_unavailable = 1
|
||||||
|
}
|
||||||
|
|
||||||
|
labels = {
|
||||||
|
role = "general"
|
||||||
|
}
|
||||||
|
|
||||||
|
depends_on = [
|
||||||
|
aws_iam_role_policy_attachment.nodes_amazon_eks_worker_node_policy,
|
||||||
|
aws_iam_role_policy_attachment.nodes_amazon_eks_cni_policy,
|
||||||
|
aws_iam_role_policy_attachment.nodes_amazon_ec2_container_registry_read_only,
|
||||||
|
]
|
||||||
|
}
|
||||||
9
terraform/eks-terraform/8-iam-oidc.tf
Normal file
9
terraform/eks-terraform/8-iam-oidc.tf
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
data "tls_certificate" "eks" {
|
||||||
|
url = aws_eks_cluster.demo.identity[0].oidc[0].issuer
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "aws_iam_openid_connect_provider" "eks" {
|
||||||
|
client_id_list = ["sts.amazonaws.com"]
|
||||||
|
thumbprint_list = [data.tls_certificate.eks.certificates[0].sha1_fingerprint]
|
||||||
|
url = aws_eks_cluster.demo.identity[0].oidc[0].issuer
|
||||||
|
}
|
||||||
27
terraform/eks-terraform/9-csi-driver-iam.tf
Normal file
27
terraform/eks-terraform/9-csi-driver-iam.tf
Normal file
|
|
@ -0,0 +1,27 @@
|
||||||
|
data "aws_iam_policy_document" "csi" {
|
||||||
|
statement {
|
||||||
|
actions = ["sts:AssumeRoleWithWebIdentity"]
|
||||||
|
effect = "Allow"
|
||||||
|
|
||||||
|
condition {
|
||||||
|
test = "StringEquals"
|
||||||
|
variable = "${replace(aws_iam_openid_connect_provider.eks.url, "https://", "")}:sub"
|
||||||
|
values = ["system:serviceaccount:kube-system:ebs-csi-controller-sa"]
|
||||||
|
}
|
||||||
|
|
||||||
|
principals {
|
||||||
|
identifiers = [aws_iam_openid_connect_provider.eks.arn]
|
||||||
|
type = "Federated"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "aws_iam_role" "eks_ebs_csi_driver" {
|
||||||
|
assume_role_policy = data.aws_iam_policy_document.csi.json
|
||||||
|
name = "eks-ebs-csi-driver"
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "aws_iam_role_policy_attachment" "amazon_ebs_csi_driver" {
|
||||||
|
role = aws_iam_role.eks_ebs_csi_driver.name
|
||||||
|
policy_arn = "arn:aws:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy"
|
||||||
|
}
|
||||||
Loading…
Reference in a new issue