【问题标题】:How to get kubernetes Pod FQDN as container variable?如何将 kubernetes Pod FQDN 作为容器变量?
【发布时间】:2021-07-25 07:44:47
【问题描述】:

我正在寻找一个环境变量,它可以为我提供一个 pod 的 FQDN。通常它们的格式为 1-2-3-4.default.pod.cluster.local。我想用它来进行 pod 间通信(本质上是向主节点转发请求)

我在部署 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

有什么建议吗?

【问题讨论】:

  • 在 Kubernetes 中 Pod 到 Pod 的通信不需要使用主机名;它的网络模型表明所有 pod IP 都可以被集群中的所有其他 pod 寻址
  • @mdaniel 是的,但是由于我们在 pod 之间进行了安全通信,因此 SSL 证书验证失败。

标签: kubernetes kubernetes-helm azure-aks kubernetes-pod


【解决方案1】:

对于 SSL 证书验证,您可能需要检查您的用例的证书管理器或使用通配符签署证书。这样你就不会面临这个问题。 对于您的确切问题,如果您使用的是 helm,则可以在 helm 中使用替换功能。

【讨论】:

  • 如果我不使用 FQDN,那么它将使用1.2.3.4:444 端点创建端点。我们可以为 IP 地址创建 SSL 证书吗?我猜不是
  • 不是 IP 地址,而是遵循 x-x-x-x..cluster.local 的 FQDN。这就是 cert manager 或 helm 可以解决您的问题的地方。
  • 因为 MY_POD_IP 是一个不是来自 helm 的环境变量。我不确定helm是否能够做到?有没有同样的例子。提前致谢。
  • 我提供了链接helm.sh/docs/chart_template_guide/function_list/#replace,你可以试试。
  • @SunilS 您肯定可以为 IP 地址创建 SAN 记录:cfssl 是这样做的一个简短示例
【解决方案2】:

是否有 pod FQDN 的直接字段,我可以参考 status.podIP

所有 pod 资源字段都在 k8s api spec reference 中进行了描述。我没有看到任何对你有帮助的东西。你可以自己查。


有什么建议吗?

如果你想要的是每个 pod 的静态 FQDN,你可以使用 StatefulSet 和所谓的stable network id

StatefulSet 中的每个 Pod 都从 StatefulSet 和 Pod 的序号。该模式为 构造的主机名是 $(statefulset name)-$(ordinal)。这个例子 上面将创建三个名为 web-0、web-1、web-2 的 Pod。有状态集 可以使用 Headless Service 来控制其 Pod 的域。这 由该服务管理的域采用以下形式:$(service name).$(namespace).svc.cluster.local,其中“cluster.local”是 集群域。在创建每个 Pod 时,它会获得一个匹配的 DNS 子域,采用以下形式:$(podname).$(治理服务域), 其中管理服务由上的 serviceName 字段定义 有状态集。

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

但请注意,Statefulset 有一些 limitations,因此我建议您在决定使用它之前先熟悉它们。

据我所知,确实没有其他方法可以做到这一点。

此外,您可能想查看关于 k8s Cluster Networking model 的 k8s 文档。也许您需要重新定义问题并以不同的方式解决它。如果你从一个你试图解决的实际问题开始,而不是从一个解决方案开始,那会容易得多。

【讨论】:

  • 是的,我们不想要有状态的有状态集。我们已经探索过了。关于问题陈述,让我尝试重写它。
猜你喜欢
  • 2022-11-30
  • 1970-01-01
  • 1970-01-01
  • 2017-08-25
  • 2022-07-29
  • 1970-01-01
  • 1970-01-01
  • 2022-10-26
  • 1970-01-01
相关资源
最近更新 更多