kubernetes - 如何从集群内访问 Kubernetes Ingress
问题描述
我有一个只有公共子网的 AWS EKS 集群(出于安全原因,我们不需要私有子网,我真的想避免 NAT 数据传输费用)。在集群中,我们有 serviceA 和 serviceB。两者都通过面向公众的 LB 支持的 Ingress (Traefik) 公开。
所以这是我的问题:我们有一个配置选项'serviceB_url' 这个配置既被serviceA用来从集群内部访问serviceB,也被用来生成应该从集群外部工作的链接。所以基本上,我希望相同的 URL 在集群内部和外部都可以使用。DNS 指向面向公众的负载均衡器 IP,当然我可以从集群内部解析名称。
但这是我的问题:我无法访问它。由于负载均衡器 IP 是公共的,因此流量使用互联网网关离开 VPC,并使用未列入白名单的节点公共 IP 从外部到达负载均衡器。
到目前为止,我对此的看法:
我们之前有公共子网和私有子网。使用 NAT 网关,我们可以简单地将 NAT 的公共 IP 列入白名单。尽管这很有效,但我认为这不是一个干净的解决方案,因为 traffik 采取了一条非常不必要的路径。另外,如前所述,由于费用很高,我们希望摆脱 NAT 网关。
我知道 Ingress 的设计目的是向 OUTSIDE 公开,应该使用 Service 向 INSIDE 公开。但是使用该服务,我在中间丢失了我的反向代理。另外,我想知道对于对请求中使用的 URL 或是否需要 TLS 挑剔的服务来说,这将如何工作。进一步考虑这个想法,我可以想象某种内部部署的反向代理服务会执行一些 URL 重写魔术。但是,是的,我已经不喜欢这个了。
在经典的(意味着更静态的)基础架构中,我可能会通过使用 /etc/hosts 条目来解决这个问题,这些条目指向运行服务的节点的私有,我们使用一些内部使用的自定义 DNS。
我读到我可以使用 CoreDNS 来重写 URL,例如。foo.example.com 到 foo-internal.example.com。所以我可以将外部 URL 重写为 serviceB.my-namespace.svc.cluster-domain.example。再一次,我想知道这对于那些对其 URL 和/或 TLS 挑剔的应用程序来说是如何工作的。可能需要为此创建一个反向代理。而且,再一次,对我来说听起来很老套。
当然,我可以去更改我的应用程序并将配置选项拆分为“serviceB_url_internal”和“serviceB_url_external”。我只是想以某种方式用 Kubernetes 解决这个问题。
最后,我认为我真正想要的是一个集群范围的 DNS 配置,它只返回反向代理 clusterIP 而不是我想要访问的 URL 的面向互联网的负载均衡器的 ip。这将解决问题,我不需要任何 URL 重写或其他时髦的东西。我可以使用 Ingress 本身以某种方式配置它吗?至少可以选择加入这样的事情会很棒。或者有没有这样的服务?(这真的有用吗?)
如果你已经读到这里,谢谢你:)
我只是想知道我是否在这里遗漏了一些明显的东西,而且它实际上很容易配置。如何以干净的方式解决这个问题?或者使用相同的 URL 从集群内部和外部访问服务的想法是完全错误的?我可以想象这对于本地安装来说没什么大不了的,因为节点的“公共 ip”是众所周知的,白名单在那里并不是一个大问题。
解决方案
将以下重写添加到 CoreDNS 配置映射对我有用:
rewrite name external.url.to.servicaA traefik-service.traefik-namespace.svc.cluster.local
当然,在单独的 configmap 中维护这个条目当然也有不利的一面。会更喜欢带有注释或 CRD 的解决方案。
推荐阅读
- excel - 如何在 cloumn2 中找到 E1 值,然后使用宏替换为 column1 值?
- ms-access - 将子表单保存过程链接到父表单保存按钮
- webpack - Webpack中设置两个环境变量的目的
- qlikview - 过去 12 个月的 QlikView 表达式 & DISTINCT & 未因选择而改变
- spring-boot - Spring Boot 中的 Mockito ElasticSearch 单元测试
- php - 使用 eloquent 检索由 SQL LIKE 运算符组成的集合
- java - 以对象为键、整数为值对 Hashmap 进行排序
- elasticsearch - Rails,searchkick(Elasticsearch 2.3)完成提示错误
- python - f-score:ValueError:分类指标无法处理多标签指标和连续多输出目标的混合
- javascript - 从显示为 Object 对象的 XML 检索数据