Amazon web services 在CDK中检索EKS构造的LoadBalancer URL

Amazon web services 在CDK中检索EKS构造的LoadBalancer URL,amazon-web-services,amazon-eks,aws-cdk,Amazon Web Services,Amazon Eks,Aws Cdk,我正在使用创建CDK中的EKS集群。我正在将NGINX helm图表添加到集群中,并希望导出入口LoadBalancer URL。EKS构造公开了一个方法,但它需要一个服务名称。我不确定如何获取LoadBalancer服务的名称以将其传递到该方法中。感觉我错过了什么。例如: 导出类EksClusterStack扩展了cdk.NestedStack{ elbUrl:字符串; 构造函数(作用域:cdk.Construct,id:string,props?:cdk.NestedStackProps){

我正在使用创建CDK中的EKS集群。我正在将NGINX helm图表添加到集群中,并希望导出入口LoadBalancer URL。EKS构造公开了一个方法,但它需要一个服务名称。我不确定如何获取LoadBalancer服务的名称以将其传递到该方法中。感觉我错过了什么。例如:

导出类EksClusterStack扩展了cdk.NestedStack{
elbUrl:字符串;
构造函数(作用域:cdk.Construct,id:string,props?:cdk.NestedStackProps){
超级(范围、id、道具);
const clusterAdmin=新的iam.Role(此“AdminRole”{
假设人:new iam.AccountRootPrincipal()
});
const cluster=new eks.cluster(这个“cluster”{
mastersRole:clusterAdmin,
版本:eks.KubernetesVersion.V1_18,
默认容量:2,
});
const nginx=cluster.addHelmChart('nginxingres'{
图表:“nginx入口”,
存储库:'https://helm.nginx.com/stable',
});

this.elbUrl=cluster.getServiceLoadBalancerAddress(“{从哪里获取服务名称?}”)//您所部署的是ingress controller helm图表,它本身不公开任何内容,而是扫描ingress类型的任何K8S对象。在这种情况下,您应该在部署ingress控制器后部署ingress,并且不能使用预建函数为您获取LoadBalancer地址

例如:

self.alb\u domain\u name=eks.KubernetesObjectValue(
自我“查询”,
集群=集群,
对象类型为“入口”,
对象_name='cluster-ingres',#这是您的入口名称
对象_namespace='my-ingres-controller',#在其中部署入口的名称空间
json#path='.status.loadBalancer.ingres[0].hostname'#此json路径将为您获取部署的AWS ELB/ALB的主机名
)

在我的特殊情况下,我只需要一种方法来定义入口控制器的名称,这样它就不会自动生成。这样做会让我查询入口控制器的ELB地址。解决方法是给入口控制器掌舵图一个发布名称。一旦部署,CDK会在发布的末尾附加-nginx-ingrese名称,但给定发布名称,您可以计算k8s服务名称。以下是一个工作版本:

从'@aws cdk/core'导入*作为cdk;
从“@aws cdk/aws eks”导入*作为eks;
从“@aws cdk/aws iam”导入*作为iam;
导出类SimpleEks扩展了cdk.NestedStack{
elbUrl:字符串;
构造函数(作用域:cdk.Construct,id:string,props?:cdk.NestedStackProps){
超级(范围、id、道具);
常量ingressControllerReleaseName='ingress controller'
const clusterAdmin=新的iam.Role(此“AdminRole”{
假设人:new iam.AccountRootPrincipal()
});
const cluster=new eks.cluster(这个“cluster”{
clusterName:'群集',
mastersRole:clusterAdmin,
版本:eks.KubernetesVersion.V1_18,
默认容量:2,
});
常量IngressController图表=cluster.addHelmChart('IngressController'{
图表:“nginx入口”,
存储库:'https://helm.nginx.com/stable',
release:ingressControllerReleaseName,//这修复了服务名称,因此它是可预测的,而不是自动生成的
});
const albAddress=new eks.KubernetesObjectValue(该'elbAddress'{
簇
objectType:'服务',
objectName:“${ingressControllerReleaseName}-nginx ingress`,//这是我缺少的内容
jsonPath:'.status.loadBalancer.ingress[0].主机名',
});
//我还没有尝试过下面的代码,但我怀疑它可能和getSvcLBAddress一样有效,因为getSvcLBAddress只是通过`eks.KubernetesObjectValue()实现的一种方便方法`
//const elb=cluster.getServiceLoadBalancerAddress(`${ingressControllerReleaseName}-nginx ingress`);
const elb=albAddress.value;//这是我需要得到的。
}
}