在Kubernetes中解析环境变量中的服务名称

3

我真的不确定发生了什么问题,当我在YAML文件中使用环境变量传递服务名称时,该服务名称仍然是字符串,并未解析为实际IP地址。

这是否应该在Kubernetes内部自动工作,还是我需要进行更多配置以便解析服务。

例如,像这样的新部署:

env:
   -name: MYSQL-SERVICE
    value: my-service-name-which-should-be-resolved (also deployed on kubernetes as service)

非常感谢您提供的任何建议!
非常感激您的帮助!

请执行命令'kubectl describe pod <pod>'或查看控制面板以查看传递到Pod的值。同样,可以使用'kubectl get service'检查服务名称。如果它们匹配并位于相同的命名空间中,则应该可以工作。如果您能够共享尽可能多的输出和描述符,那将会有所帮助。 - Ryan Dawson
1
“那个服务名称仍然是字符串,它没有被解析为真实的IP地址。” 你为什么会期望环境变量从DNS名称转换为IP呢?也许你想到了 $MYSQL_SERVICE_HOST,这将自动注入到Pod命名空间中的mysql Service中,由kubelet完成。 - mdaniel
@RyanDawson 传递到Pod中的值是“my-service-name”,而不是任何服务的IP地址。它们匹配并且在同一命名空间中。因此,也许需要从EnvVar中使用完整的DNS名称来处理需要此服务的服务,而不是像IP地址那样处理,因为我期望的是IP地址。 - Dino
@MatthewLDaniel 所以,我不确定,有些人说Kubernetes将使用该服务的IP替换服务名称,这是错误的吗?MYSQL只是一个例子,与此无关。我可以通过传递我想要的服务的字符串名称,然后在使用该服务的应用程序中,我应该像完整的DNS名称一样使用服务,而不是像IP地址一样使用吗?谢谢。 - Dino
是的,您可以只使用MySQL服务的服务名称作为主机名。一个例子是https://blog.learnk8s.io/connect-service-kubernetes-7cb346cf2f64。 - Ryan Dawson
1个回答

0

@MatthewLDaniel和@RyanDawson是正确的。在这种情况下,环境变量无法转换为IP地址,您应该使用服务名称。

更多详细信息,请参见服务和Pod的DNS服务


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接