cdk8s aws load balancer controller constructs for cdk8s
This project was formerly known as "CDK AWS ALB Ingress Controller", I just rename it to be "CDK AWS Load Balancer Controller".
Basic implementation of a aws load balancer controller construct for cdk8s. Contributions are welcome!
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh
npm i cdk8s-aws-load-balancer-controller
npm i cdk8s
or
yarn add cdk8s-aws-load-balancer-controller
yarn add cdk8s
import { App, Chart } from 'cdk8s';
import { Construct } from 'constructs';
import { AlbIngressController } from 'cdk8s-aws-load-balancer-controller';
export class MyChart extends Chart {
constructor(scope: Construct, name: string) {
super(scope, name);
new AlbIngressController(this, 'albingresscntroller', {
clusterName: 'EKScluster',
});
}
}
const app = new App();
new MyChart(app, 'testcdk8s');
app.synth();
import { App, Chart } from 'cdk8s';
import { AwsLoadBalancerController } from 'cdk8s-aws-load-balancer-controller';
import * as constructs from 'constructs';
export interface MyChartProps {
readonly clusterName: string;
}
export class MyChart extends Chart {
readonly deploymentName: string;
readonly deploymentNameSpace: string;
constructor(scope: Construct, name: string, props: MyChartProps) {
super(scope, name);
const alb = new AwsLoadBalancerController(this, 'alb', {
clusterName: props.clusterName,
createServiceAccount: false,
});
this.deploymentName = alb.deploymentName;
this.deploymentNameSpace = alb.namespace;
}
}
const app = new App();
new MyChart(app, 'testcdk8s');
app.synth();
import { App, Chart } from 'cdk8s';
import { AwsLoadBalancerController } from 'cdk8s-aws-load-balancer-controller';
import * as constructs from 'constructs';
export interface MyChartProps {
readonly clusterName: string;
}
export class MyChart extends Chart {
readonly deploymentName: string;
readonly deploymentNameSpace: string;
constructor(scope: Construct, name: string, props: MyChartProps) {
super(scope, name);
const alb = new AwsLoadBalancerController(this, 'alb', {
clusterName: props.clusterName,
createServiceAccount: false,
namespace: 'kube-system',
});
this.deploymentName = alb.deploymentName;
this.deploymentNameSpace = alb.namespace;
}
}
const app = new App();
new MyChart(app, 'testcdk8s');
app.synth();
- For IRSA add IAM Policy version 1.
// CDK APP like eks_cluster.ts
import { AwsLoadBalancePolicy, VersionsLists } from 'cdk8s-aws-load-balancer-controller';
import * as eks from '@aws-cdk/aws-eks';
const cluster = new eks.Cluster(this, 'MyK8SCluster', {
defaultCapacity: 0,
mastersRole: clusterAdmin,
version: eks.KubernetesVersion.V1_18,
});
const albServiceAccount = cluster.addServiceAccount('alb-ingress-controller', {
name: 'alb-ingress-controller',
namespace: 'kube-system',
});
// will help you add policy to IAM Role .
AwsLoadBalancePolicy.addPolicy(VersionsLists.AWS_LOAD_BALANCER_CONTROLLER_POLICY_V1, albServiceAccount);
- For IRSA add IAM Policy version 2.
// CDK APP like eks_cluster.ts
import { AwsLoadBalancePolicy, VersionsLists } from 'cdk8s-aws-load-balancer-controller';
import * as eks from '@aws-cdk/aws-eks';
const cluster = new eks.Cluster(this, 'MyK8SCluster', {
defaultCapacity: 0,
mastersRole: clusterAdmin,
version: eks.KubernetesVersion.V1_18,
});
const sa = new eks.ServiceAccount(this, 'albserviceaccount', {
cluster: cluster,
name: 'aws-load-balancer-controller',
});
AwsLoadBalancePolicy.addPolicy(VersionsLists.AWS_LOAD_BALANCER_CONTROLLER_POLICY_V2, sa );
Also can see example repo 1 or example repo 2 work with aws cdk.
Distributed under the Apache 2.0 license.