【问题标题】:How to alias Hostnames in Kubernetes Deployment Configuration如何在 Kubernetes 部署配置中为主机名起别名
【发布时间】:2021-04-08 11:18:49
【问题描述】:

如何使用不同的域名而不是默认名称来别名 POD Ip 地址。

For Example: 
10.1.1.1 testxyz

我的输出必须与下面的新条目一起使用。我已经尝试过使用 hostAliases,但这里的问题是 ipaddress 在 pod 扩展时将是动态的。所以在这种情况下,我不能在部署配置 yaml 文件中将我的 IP 地址保持为静态。此外,我无权使用非 root 用户更改 /etc/hosts 文件。请建议。

Output:
    10.1.1.1 testxyz
    10.1.1.1 abc.xyz.com

【问题讨论】:

  • 您有服务定义吗? IP 地址和名称从何而来?使用hostAliases:/etc/hosts 可能不是一个长期可维护的解决方案。
  • pods 是可变的,即使你不扩展,pod 也可能因为其他原因而死掉,最终会得到不同的 ip。这就是所有 Pod / 部署都必须通过服务(ClusterIP、NodePort 或 Loadbalander)公开的原因。所有流量都必须通过服务,因此无需担心内部 IP 地址或主机名。您将能够通过在内部 DNS 中配置的服务名称访问应用程序。
  • @david 我在环境变量中设置 pod ip 地址,字段选择器为 status.IP 作为部署配置的一部分
  • @bala 我也尝试过服务。当我使用服务 url 和端口号启动一个应用程序时,它给了我绑定异常的错误。由于这个原因,我试图在 etc/hosts 中添加路由 url 作为部署配置的一部分。它没有工作它抛出如果我在主机别名中使用 env 变量,则会出现异常。请推荐
  • 这似乎是 Kubernetes 已经通过DNS for Services and Pods 提供的功能:定义一个匹配 Pod 标签的服务,它会自动将流量转发到匹配的 Pod 并具有稳定的 DNS 名称。您正在处理的更高级别的用例是否直接需要 pod 的 IP 地址,并且不能使用服务?

标签: kubernetes yaml kubernetes-pod


【解决方案1】:

使用 ExternalName 类型的服务将任意 IP 注册到集群 DNS 条目中。

因此,您将创建一个服务testxyz,并将地址设置为10.1.1.1,然后在配置文件中使用DNS 名称testxyz.mynamespace.svc.cluster.local

【讨论】:

  • 我已经有一项服务暴露在外部,它是默认的 clusterIP。如果我使用外部名称再创建一项服务,则不允许,因为 clusterIP 必须为 none。那么,您能否提供服务的示例 yaml 定义,它不会导致路由 url 出现问题
  • kubernetes.io/docs/concepts/services-networking/service/… 显示了一个示例。您没有设置 clusterIP 字段,因为它没有。
  • 在上面的例子中,我不能创建两个同名的服务名称,一个是 external,另一个是 clusterip
  • 没错,DNS 不允许这样做。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-11-27
  • 2010-10-22
  • 1970-01-01
  • 1970-01-01
  • 2023-03-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多