【发布时间】:2021-07-21 14:51:48
【问题描述】:
我有一个正在运行的 EKS 集群,其中运行着一些服务。现在的挑战是有一个 API 网关来调用这些服务。这就是为什么我开始阅读"Integrate Amazon API Gateway with Amazon EKS" 的原因,他解释说这是可能的,但要完成这项工作需要执行一些步骤。这就是我所做的,但在取得了一些进展后,我遇到了一个问题。
这是我执行的命令行语句之一。
aws apigatewayv2 get-vpc-links --region $AGW_AWS_REGION
这会产生以下输出:
显然,VPC 链接可用,安全组 ID 可用,两个 SubnetId 可用(在记录的示例中,它是三个,但这并不重要,请随时对此发表评论)并且状态消息说可用的 VPC 链接已准备好路由流量。
我决定继续下一个记录在案的步骤:
使用 VPC 链接集成创建 API
cat > apigw-api.yaml<<EOF
apiVersion: apigatewayv2.services.k8s.aws/v1alpha1
kind: API
metadata:
name: apitest-private-nlb
spec:
body: '{
"openapi": "3.0.1",
"info": {
"title": "ack-apigwv2-import-test-private-nlb",
"version": "v1"
},
"paths": {
"/\$default": {
"x-amazon-apigateway-any-method" : {
"isDefaultRoute" : true,
"x-amazon-apigateway-integration" : {
"payloadFormatVersion" : "1.0",
"connectionId" : "$(kubectl get vpclinks.apigatewayv2.services.k8s.aws \
nlb-internal \
-o jsonpath="{.status.vpcLinkID}")",
"type" : "http_proxy",
"httpMethod" : "GET",
"uri" : "$(aws elbv2 describe-listeners \
--load-balancer-arn $(aws elbv2 describe-load-balancers \
--region $AGW_AWS_REGION \
--query "LoadBalancers[?contains(DNSName, '$(kubectl get service authorservice \
-o jsonpath="{.status.loadBalancer.ingress[].hostname}")')].LoadBalancerArn" \
--output text) \
--region $AGW_AWS_REGION \
--query "Listeners[0].ListenerArn" \
--output text)",
"connectionType" : "VPC_LINK"
}
}
},
"/meta": {
"get": {
"x-amazon-apigateway-integration": {
"uri" : "$(aws elbv2 describe-listeners \
--load-balancer-arn $(aws elbv2 describe-load-balancers \
--region $AGW_AWS_REGION \
--query "LoadBalancers[?contains(DNSName, '$(kubectl get service echoserver \
-o jsonpath="{.status.loadBalancer.ingress[].hostname}")')].LoadBalancerArn" \
--output text) \
--region $AGW_AWS_REGION \
--query "Listeners[0].ListenerArn" \
--output text)",
"httpMethod": "GET",
"connectionId": "$(kubectl get vpclinks.apigatewayv2.services.k8s.aws \
nlb-internal \
-o jsonpath="{.status.vpcLinkID}")",
"type": "HTTP_PROXY",
"connectionType": "VPC_LINK",
"payloadFormatVersion": "1.0"
}
}
}
},
"components": {}
}'
EOF
很遗憾,这导致了以下错误:
我试图找出问题所在,但后来又遇到了另一个问题。在命令行中,我只是执行了上面显示的一小部分。
aws elbv2 describe-load-balancers --load-balancer-arn --region $AGW_AWS_REGION query "LoadBalancers[?contains(DNSName, '$(kubectl get service authorservice -o jsonpath="{.status.loadBalancer.ingress[].hostname}")')].LoadBalancerArn" --output text
但这导致了另一个错误:
调用时发生错误(ValidationError) DescribeLoadBalancers 操作:“查询”不是有效的负载均衡器 ARN
那么如何让它工作呢?我想要的只是创建一个带有 VPC 链接集成的 API。但是记录在案的方法对我不起作用。请让我知道如何解决此问题,或者以不同的方式解决问题。
【问题讨论】:
标签: amazon-web-services aws-api-gateway aws-cli kubectl amazon-eks