我有一个正在运行的AWS EKS集群,我有一个通过ingress向外部公开的应用程序,其中有许多端点。我想集成一个AWS API Gateway来从外部访问我的服务,而不是在清单文件(Kubernetes yaml文件)中定义的ingress主机url。因此,只有从AWS API Gateway才能访问我的应用程序。我如何才能实现这一点?
”
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
namespace: namespace
name: example-service-api
annotations:
nginx.ingress.kubernetes.io/whitelist-source-range: "XX.XX.XX.XX/32"
spec:
rules:
- host: example.io
http:
paths:
- path: /path/read
backend:
serviceName: example-service-api-service
servicePort: 80
- path: /path/create
backend:
serviceName: example-service-api-service
servicePort: 80
我尝试配置区域AWS API网关,并选择集成类型为http,并输入在Kubernetes的yaml文件中定义的ingress主机url。在此步骤中,我可以从AWS API网关和ingress主机url访问我的应用程序。但我想拒绝从ingress主机url访问。因此,尝试了注解白名单源范围,以仅允许从API网关访问,但这导致AWS API网关和Ingress主机URL都出现错误“503服务暂时不可用”。我认为这是因为AWS API Gateway代理了入口主机URL,该URL被阻止了。即使没有被阻止,AWS API Gateway的IP地址也会不断变化,所以这不是一个可靠的解决方案。有人能指导我吗?我不太擅长AWS或Kubernetes?
1条答案
按热度按时间wrrgggsh1#
这是一个相当复杂的体系结构,首先要问的问题是使用
AWS API Gateway
而不是标准ingress
对您有什么好处?如果真的需要,我会为你创建
k8s
的Internal NLB
。然后你可以在API Gateway
和NLB
(doc)之间创建VPC link
。从那里你可以用所有需要的路径设置API Gateway
,并将DNS
条目从传统的LB
替换为API Gateway
。使用此设置,您将拥有单个域,并且您将阻止
API Gateway
之外的任何流量。