如何在AWS API Gateway实现跨域路由、认证及VPC内DNS解析?
实现方案:API Gateway认证转发 + VPC内部DNS解析到EKS服务
一、API Gateway 配置(认证+私有资源转发)
1. 配置路径与方法
- 在现有API Gateway实例中,创建
/test/create资源,添加对应业务所需的HTTP方法(如POST)。
2. 配置认证规则
选择适配业务的认证方案:
Lambda授权器(自定义逻辑)
- 创建Lambda函数,实现认证校验逻辑(如验证请求头Token、API Key),返回Allow/Deny决策。
- 在API Gateway方法设置中,将「授权类型」设为「Lambda授权器」,关联目标Lambda函数,指定认证参数来源(如从
Authorization头提取)。
Cognito用户池(标准OAuth2/JWT认证)
- 在Cognito中创建用户池及客户端应用,获取用户池ID与客户端ID。
- 在API Gateway方法设置中,将「授权类型」设为「Cognito用户池」,关联目标用户池,配置Token验证规则(如校验
Authorization头的Bearer Token)。
3. 配置VPC Link与集成请求
由于目标服务在VPC内部,需通过VPC Link实现API Gateway到私有资源的访问:
- 创建VPC Link:关联EKS所在VPC的子网与安全组(确保安全组允许VPC Link流量访问ELB)。
- 配置集成请求:
- 集成类型选「HTTP/HTTPS」,集成端点填
http://test.xyz.com(或HTTPS,匹配ELB配置)。 - 选择已创建的VPC Link实例。
- 配置请求参数映射:按需传递原请求的Body、Header等信息到目标服务。
- 启用「私有DNS解析」,确保API Gateway通过VPC内网DNS解析test.xyz.com。
- 集成类型选「HTTP/HTTPS」,集成端点填
二、VPC内部DNS解析配置(Route 53私有托管区)
- 在Route 53创建私有托管区,域名为
test.xyz.com,关联EKS所在VPC。 - 添加DNS记录:
- 若为NLB:创建A记录,别名指向NLB内网DNS名称。
- 若为ALB:创建CNAME记录,指向ALB内网DNS名称。
此配置确保VPC内所有请求(含API Gateway的VPC Link请求)将test.xyz.com解析到ELB内网地址,避免公网绕行。
三、EKS Ingress 规则验证
确认ELB Ingress Controller的路由规则正确:
- 检查Ingress资源配置,确保
spec.rules.host为test.xyz.com,并转发到对应后端服务:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: test-ingress annotations: alb.ingress.kubernetes.io/scheme: internal # 内网ALB需添加此注解 spec: ingressClassName: alb # 匹配你的Ingress Controller类名 rules: - host: test.xyz.com http: paths: - path: / pathType: Prefix backend: service: name: test-service # 目标后端服务名称 port: number: 80
- 确认ELB安全组允许VPC Link所在安全组的80/443端口流量。
四、验证步骤
- 携带合法认证信息请求
api.xyz.com/test/create,检查是否成功转发到后端服务。 - 在VPC内EC2实例执行
nslookup test.xyz.com,确认解析到ELB内网IP。 - 查看API Gateway日志,确认认证失败时返回401,认证通过后才转发请求。
内容的提问来源于stack exchange,提问作者user1844634
相关产品推荐
相关产品推荐

