如何仅使用AWS API网关访问通过入口暴露的EKS服务?



我有一个正在运行的AWS EKS集群,并且我有一个通过具有许多端点的入口向外部暴露的应用程序。我想集成一个AWS API网关来从外部访问我的服务,而不是在manifest文件(Kubernetes yaml文件)中定义的入口主机url。因此,只有通过AWS API网关才能访问我的应用程序。我该怎么做呢?

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文件中定义的入口主机url。在这一步中,我可以从AWS API网关和入口主机url访问我的应用程序。但是我想拒绝从入口主机url访问。所以尝试了注释白名单源范围,只允许从API网关访问,但这导致了一个错误"503服务暂时不可用"。获取AWS API网关和入口主机url。我认为这是因为AWS API网关正在代理入口主机url,而该url被阻止了。即使没有被封锁,AWS API网关的ip地址也在不断变化,所以它不是一个可靠的解决方案。有没有人可以指导我,我不太擅长使用AWS或Kubernetes ?

这是一个相当复杂的体系结构,首先要问的问题是使用AWS API Gateway而不是标准ingress对您有什么好处?

如果真的需要,我会为你创建Internal NLBk8s。然后可以在API GatewayNLB(doc)之间创建VPC link。从那里,你可以用所有需要的路径设置API Gateway,并将DNS条目从传统的LB替换为API Gateway

使用此设置,您将拥有单个域,并且您将阻止API Gateway以外的任何流量。