|
14 | 14 | eks_node_instance_type = config.get("eksNodeInstanceType", "t3.medium") |
15 | 15 | vpc_network_cidr = config.get("vpcNetworkCidr", "10.0.0.0/16") |
16 | 16 |
|
17 | | -aws_loadbalancer_name = "aws-load-balancer-controller" |
| 17 | +aws_load_balancer_name = "aws-load-balancer-controller" |
| 18 | + |
| 19 | +### AWS Resources ### |
18 | 20 |
|
19 | 21 | # Role generated automatically by AWS from permission set from AWS IAM Identity Center |
20 | 22 | roles = aws.iam.get_roles(name_regex="FastAPILabsPowerUserK8s") |
|
85 | 87 | # Ref: https://kubernetes-sigs.github.io/aws-load-balancer-controller/v2.8/deploy/installation/ |
86 | 88 | aws_lb_controller_policy_content = ( |
87 | 89 | Path(__file__) |
88 | | - .parent.joinpath(f"{aws_loadbalancer_name}-config/iam-policy.json") |
| 90 | + .parent.joinpath(f"{aws_load_balancer_name}-config/iam-policy.json") |
89 | 91 | .read_text() |
90 | 92 | ) |
91 | 93 |
|
|
94 | 96 | # Ref: https://docs.aws.amazon.com/eks/latest/userguide/associate-service-account-role.html |
95 | 97 |
|
96 | 98 |
|
97 | | -service_account_name = f"system:serviceaccount:kube-system:{aws_loadbalancer_name}" |
| 99 | +service_account_name = f"system:serviceaccount:kube-system:{aws_load_balancer_name}" |
98 | 100 | oidc_url = eks_cluster.core.apply(lambda x: x.oidc_provider and x.oidc_provider.url) |
99 | 101 | oidc_arn = eks_cluster.core.apply(lambda x: x.oidc_provider and x.oidc_provider.arn) |
100 | 102 |
|
101 | 103 |
|
102 | 104 | aws_lb_controller_role = aws.iam.Role( |
103 | | - f"{aws_loadbalancer_name}-role", |
| 105 | + f"{aws_load_balancer_name}-role", |
104 | 106 | assume_role_policy=pulumi.Output.json_dumps( |
105 | 107 | { |
106 | 108 | "Version": "2012-10-17", |
|
128 | 130 | ) |
129 | 131 |
|
130 | 132 | aws_lb_controller_policy = aws.iam.Policy( |
131 | | - f"{aws_loadbalancer_name}-policy", |
| 133 | + f"{aws_load_balancer_name}-policy", |
132 | 134 | policy=aws_lb_controller_policy_content, |
133 | 135 | ) |
134 | 136 |
|
135 | 137 | # Attach IAM Policy to IAM Role |
136 | 138 | aws.iam.PolicyAttachment( |
137 | | - f"{aws_loadbalancer_name}-attachment", |
| 139 | + f"{aws_load_balancer_name}-attachment", |
138 | 140 | policy_arn=aws_lb_controller_policy.arn, |
139 | 141 | roles=[aws_lb_controller_role.name], |
140 | 142 | ) |
141 | 143 |
|
| 144 | +### Kubernetes Resources ### |
| 145 | + |
142 | 146 | provider = k8s.Provider("provider", kubeconfig=eks_cluster.kubeconfig) |
143 | 147 |
|
144 | | -service_account = k8s.core.v1.ServiceAccount( |
145 | | - f"{aws_loadbalancer_name}-sa", |
| 148 | +aws_load_balancer_service_account = k8s.core.v1.ServiceAccount( |
| 149 | + f"{aws_load_balancer_name}-sa", |
146 | 150 | metadata={ |
147 | | - "name": aws_loadbalancer_name, |
| 151 | + "name": aws_load_balancer_name, |
148 | 152 | "namespace": "kube-system", |
149 | 153 | "labels": { |
150 | 154 | "app.kubernetes.io/component": "controller", |
151 | | - "app.kubernetes.io/name": aws_loadbalancer_name, |
| 155 | + "app.kubernetes.io/name": aws_load_balancer_name, |
152 | 156 | }, |
153 | 157 | "annotations": {"eks.amazonaws.com/role-arn": aws_lb_controller_role.arn}, |
154 | 158 | }, |
| 159 | + opts=pulumi.ResourceOptions(provider=provider), |
155 | 160 | ) |
156 | 161 |
|
| 162 | +cluster_name = eks_cluster.core.apply(lambda x: x.cluster.name) |
| 163 | + |
| 164 | +# TODO: Fix this |
| 165 | + |
| 166 | +# error: 1 error occurred: |
| 167 | +# * Helm release "kube-system/aws-load-balancer-controller-bf4de232" was created, but failed to initialize completely. Use Helm CLI to investigate: failed to become available within allocated timeout. Error: Helm Release kube-system/aws-load-balancer-controller-bf4de232: client rate limiter Wait returned an error: context deadline exceeded |
| 168 | + |
| 169 | +# aws_load_balancer_controller = k8s.helm.v3.Release( |
| 170 | +# aws_load_balancer_name, |
| 171 | +# k8s.helm.v3.ReleaseArgs( |
| 172 | +# chart="aws-load-balancer-controller", |
| 173 | +# version="1.8.1", |
| 174 | +# repository_opts=k8s.helm.v3.RepositoryOptsArgs( |
| 175 | +# repo="https://aws.github.io/eks-charts" |
| 176 | +# ), |
| 177 | +# namespace="kube-system", |
| 178 | +# values={ |
| 179 | +# "clusterName": cluster_name, |
| 180 | +# "serviceAccount": { |
| 181 | +# "create": False, |
| 182 | +# "name": aws_load_balancer_service_account.metadata["name"], |
| 183 | +# }, |
| 184 | +# }, |
| 185 | +# ), |
| 186 | +# opts=pulumi.ResourceOptions(provider=provider), |
| 187 | +# ) |
| 188 | + |
157 | 189 |
|
158 | 190 | # Export values to use elsewhere |
159 | 191 | pulumi.export("kubeconfig", eks_cluster.kubeconfig) |
| 192 | +pulumi.export("cluster_name", cluster_name) |
160 | 193 | pulumi.export("vpc_id", eks_vpc.vpc_id) |
161 | 194 | pulumi.export("k8s_role_arn", k8s_role_arn) |
162 | 195 | pulumi.export("aws_lb_controller_policy", aws_lb_controller_policy.arn) |
0 commit comments