【问题标题】:Access web apps on host machine from Kubernetes pods从 Kubernetes pod 访问主机上的 Web 应用程序
【发布时间】:2019-09-30 15:50:52
【问题描述】:

我有一个开发环境,其中一些服务在本地 Kubernetes 集群中运行,而其他服务在集群外的本地 nginx 和 IIS (Windows) 中运行。这些服务大部分是 HTTP API,我有时需要它们相互通信。我找到了一种让非 Kubernetes 服务访问集群内服务的方法(通过使用 IIS 作为代理),但不是相反。

基本上,在我的容器中,我需要能够做到curl https://app-running-in-iis.local。地址app-running-in-iis.local 应该解析为运行 Kubernetes 集群的主机的 IP。

最简单的方法是什么?

【问题讨论】:

  • 您有 DNS 解析问题或路由问题吗?

标签: kubernetes dns


【解决方案1】:

Kubernetes 最佳实践中mapping external services

您可以找到两个使用服务和端点将外部资源映射到集群的示例:

kind: Service
apiVersion: v1
metadata:
 name: nginx
Spec:
 type: ClusterIP
 ports:
 - port: 31500
   targetPort: 27017

kind: Endpoints
apiVersion: v1
metadata:
 name: nginx
subsets:
 - addresses:
     - ip: 10.240.0.4
   ports:
     - port: 27017

其他资源:

希望对您有所帮助。

【讨论】:

  • 恐怕这没有帮助,因为所有这些方法都假设您知道要访问的资源的 IP 地址。我需要访问 Kubernetes 主机,它的 IP 地址对我来说是未知的,并且它可以在重启后更改。
  • 那么在这种情况下你有这个主机的 dns 记录吗?
  • 唯一指向主机的主机名是host.docker.internal,但我不能用它来访问网站,因为这台机器运行着多个网站,每个网站都有自己的主机名。
  • 您试图从 kubernetes 容器访问外部服务?如答案中所述,您还可以使用Type ExternalName,它会为您提供本地服务,而集群 DNS 服务会返回具有正确值的 CNAME 记录。如果这不是你的情况,请更深入地阐述。无论如何,为了从集群内部连接到外部服务,它应该是可访问的。
  • 我不确定如何进一步澄清我的问题,但我会尝试。我有一台运行多个网站site1.localsite2.local 等的 Windows 机器。这是一台开发机器,因此这些网站没有公共 DNS 记录,它们仅在该单机上可用,并且配置了 DNS 记录通过本地hosts 文件。同一台机器正在运行一个 k8s 集群,我需要所有的 pod 能够将site1.localsite2.local 解析为主机的 IP(我不知道并且可能会不断变化),并访问这两个网站。
猜你喜欢
  • 2021-11-06
  • 2022-06-16
  • 1970-01-01
  • 2022-01-06
  • 2022-01-24
  • 2020-06-21
  • 1970-01-01
  • 2019-05-04
  • 2018-05-07
相关资源
最近更新 更多