如何获取kubernetes Pod FQDN作为容器变量?

如何获取kubernetes Pod FQDN作为容器变量?,kubernetes,kubernetes-helm,azure-aks,kubernetes-pod,Kubernetes,Kubernetes Helm,Azure Aks,Kubernetes Pod,我正在寻找一个环境变量,它可以给我一个pod的FQDN。通常它们的格式为1-2-3-4.default.pod.cluster.local。我想将其用于机架间通信(基本上是将请求转发给主节点) 我在部署yaml中使用了以下内容,但如何将我的IP(1.2.3.4)转换为1-2-3-4?是否有pod FQDN的直接字段,如status.podIP - name: MY_POD_IP valueFrom: fieldRef: fieldPath: status.podIP

我正在寻找一个环境变量,它可以给我一个pod的FQDN。通常它们的格式为1-2-3-4.default.pod.cluster.local。我想将其用于机架间通信(基本上是将请求转发给主节点)

我在部署yaml中使用了以下内容,但如何将我的IP(1.2.3.4)转换为1-2-3-4?是否有pod FQDN的直接字段,如status.podIP

- name: MY_POD_IP
  valueFrom:
    fieldRef:
      fieldPath: status.podIP  
- name: ADVERTISED_HOST_NAME
  value: "$(MY_POD_IP).default.pod.cluster.local"
它创建了一个类似于1.2.3.4.default.pod.cluster.local的变量,但正确的FQDN为1-2-3-4.default.pod.cluster.local


有什么建议吗?

对于SSL证书验证,您可能希望检查cert manager以了解您的用例或使用通配符签署证书。这样你就不会面对这个问题。 对于您的确切问题,如果您使用的是头盔,则可以在中使用替换功能

是否有pod FQDN的直接字段,我可以像status.podIP一样引用

- name: MY_POD_IP
  valueFrom:
    fieldRef:
      fieldPath: status.podIP  
- name: ADVERTISED_HOST_NAME
  value: "$(MY_POD_IP).default.pod.cluster.local"
中描述了所有pod资源字段。我看不到任何对你有帮助的东西。你可以自己检查一下


有什么建议吗

如果您想要的是每个pod的静态FQDN,则可以将StatefulSet与所谓的:

StatefulSet中的每个Pod都从 StatefulSet和Pod的序号。未来的模式 构造的主机名为$(statefulset name)-$(序号)。榜样 上面将创建三个pod,分别命名为web-0、web-1和web-2。富丽堂皇的一套 可以使用无头服务来控制其POD的域。这个 此服务管理的域的形式为:$(服务 名称)。$(命名空间).svc.cluster.local,其中“cluster.local”是 群集域。在创建每个Pod时,它将获得一个匹配的DNS 子域,形式为:$(podname)。$(管理服务域), 其中,管理服务由上的serviceName字段定义 状态设置

因此,您可以使用pod()的名称访问它,例如:
web-0.nginx.default.svc.cluster.local

但是请注意,Statefulset有一些,所以我建议在决定使用它之前先熟悉它们

据我所知,真的没有其他方法可以做到这一点


另外,您可能需要检查k8s文档。也许你需要重新定义这个问题,并以不同的方式解决它。如果你从一个实际的问题开始,而不是从一个解决方案开始,这会容易得多。

在kubernetes中,没有必要使用主机名进行点对点通信;它的网络模型说,所有的pod IP都可以被网络中的所有其他pod寻址cluster@mdaniel是的,但由于POD之间存在安全通信,SSL证书验证失败。如果我不使用FQDN,则它将使用endpoint创建端点。我们可以为IP地址创建SSL证书吗?我猜不是IP地址,而是跟在x-x-x..cluster.local后面的FQDN。这就是cert manager或helm可以解决您的问题的地方。因为MY_POD_IP是一个环境变量,它不是来自helm。我不确定赫尔姆是否能做到这一点?有没有类似的例子。提前谢谢。我提供了链接,您可以试一下吗。@SunilS您可以肯定地为IP地址创建SAN记录:这是一个简单的soYes示例,我们不需要有状态集。我们已经探索过了。关于问题陈述,让我试着重写它。