将 AWS Cloudformation 资源转换为 EKS 入口配置?
Translating an AWS Cloudformation resource into an EKS ingress configuration?
我希望这是有道理的。
我们目前通过 CloudFormation 脚本在 ECS 中部署我们的微服务,使用我们为每个微服务填写的参数化 CloudFromation 模板。我们使用配置有多个 /path
规则的单个 ALB,其中每个规则都针对一个微服务。所以基本上我们的监听器规则看起来像
api.company.com -> alb-microservices/default -> default-target-group
/microservice1/* -> microservice1-target-group
/microservice2/* -> microservice2-target-group
因此,当我们的应用程序向 api.company.com/microservice1/some_path/...
发送 RESTful API 调用时,它会转到微服务 1 等
我们通过此 CloudFormation 资源创建每个侦听器规则
AlbListenerRule:
Type: AWS::ElasticLoadBalancingV2::ListenerRule
Condition: UseListenerRule
Properties:
ListenerArn:
Fn::ImportValue:
!Sub "${ECSClusterStackNameParameter}-ListenerArn"
Actions:
-
Type: forward
TargetGroupArn: !Ref AlbTargetGroup
Conditions:
-
Field: path-pattern
Values: [ !Ref LoadBalancerPathCondition ]
Priority: !Ref ListenerRulePriority
有了这个,我们可以在构建微服务时向我们的 ALB 添加路径。每个微服务都有其对应的“ListenerRulePriority”编号,我们会即时计算这些编号。有道理吗?
了解上面的ALB和一个Kubernetes Ingress资源的1:1对应关系,想参数化一个微服务-ingress.yamlmanifest文件。本质上,我只是想在我的入口清单文件中参数化 path
以给它不同的路径,我希望它“附加”到我的 ALB 的侦听器规则,我认为“ListenerRulePriority”有关联。但是,我不知道“ListenerRulePriority”这个概念是从哪里来的,它是怎么来的?
您应该为每个应用程序创建一个 Ingress-资源,例如一个用于微服务 1,一个用于微服务 2。
将有自己的路径,例如微服务 1 的入口可能有
/microservice1
微服务 2 的 Ingress 资源可能有
/microservice2
然后在集群中,您通常有一个解释 Ingress-resources 的 Ingress-controller。在 AWS EKS 上,这通常是 AWS Load Balancer Controller,它将管理一个 AWS Application Load Balancer,并将集群中 Ingress-resources 的所有路径附加到此负载均衡器。
例如两者:
/microservice1
/microservice2
注意:这最近在 AWS EKS 上发生了变化:Introducing AWS Load Balancer Controller. The blog post Introducing the AWS Load Balancer Controller 对变化和功能很好。
我希望这是有道理的。
我们目前通过 CloudFormation 脚本在 ECS 中部署我们的微服务,使用我们为每个微服务填写的参数化 CloudFromation 模板。我们使用配置有多个 /path
规则的单个 ALB,其中每个规则都针对一个微服务。所以基本上我们的监听器规则看起来像
api.company.com -> alb-microservices/default -> default-target-group
/microservice1/* -> microservice1-target-group
/microservice2/* -> microservice2-target-group
因此,当我们的应用程序向 api.company.com/microservice1/some_path/...
发送 RESTful API 调用时,它会转到微服务 1 等
我们通过此 CloudFormation 资源创建每个侦听器规则
AlbListenerRule:
Type: AWS::ElasticLoadBalancingV2::ListenerRule
Condition: UseListenerRule
Properties:
ListenerArn:
Fn::ImportValue:
!Sub "${ECSClusterStackNameParameter}-ListenerArn"
Actions:
-
Type: forward
TargetGroupArn: !Ref AlbTargetGroup
Conditions:
-
Field: path-pattern
Values: [ !Ref LoadBalancerPathCondition ]
Priority: !Ref ListenerRulePriority
有了这个,我们可以在构建微服务时向我们的 ALB 添加路径。每个微服务都有其对应的“ListenerRulePriority”编号,我们会即时计算这些编号。有道理吗?
了解上面的ALB和一个Kubernetes Ingress资源的1:1对应关系,想参数化一个微服务-ingress.yamlmanifest文件。本质上,我只是想在我的入口清单文件中参数化 path
以给它不同的路径,我希望它“附加”到我的 ALB 的侦听器规则,我认为“ListenerRulePriority”有关联。但是,我不知道“ListenerRulePriority”这个概念是从哪里来的,它是怎么来的?
您应该为每个应用程序创建一个 Ingress-资源,例如一个用于微服务 1,一个用于微服务 2。
将有自己的路径,例如微服务 1 的入口可能有
/microservice1
微服务 2 的 Ingress 资源可能有
/microservice2
然后在集群中,您通常有一个解释 Ingress-resources 的 Ingress-controller。在 AWS EKS 上,这通常是 AWS Load Balancer Controller,它将管理一个 AWS Application Load Balancer,并将集群中 Ingress-resources 的所有路径附加到此负载均衡器。
例如两者:
/microservice1
/microservice2
注意:这最近在 AWS EKS 上发生了变化:Introducing AWS Load Balancer Controller. The blog post Introducing the AWS Load Balancer Controller 对变化和功能很好。