我有一个有 3 个成员的 statefulset。它们可以从集群内部访问,例如:
podname-{0..n}.service.default.svc.cluster.local
我正在使用 Controller 中的 Kubernetes API。我刚刚创建了 Statefulset:
import (
"k8s.io/client-go/kubernetes"
appsv1 "k8s.io/api/apps/v1"
)
...
s := appsv1.StatefulSet{ /* some data */ }
kubernetes.AppsV1().StatefulSets(nameSpace).Create(s)
假设一切正常,几分钟后我有 3 个正在运行的 Pod。如何获取新创建的 Pod 的 Pod DNS 条目?
我知道我可以使用以下方法构建 DNS:
fmt.Sprintf("%s-%d.%s.%s.svc.cluster.local", s.Name, idx, service, S.Namespace)
但我发现了一些问题:
StatefulSet
cluster.local
这不一定是真的我认为它应该存在(但我不确定它是否真的存在)是一个 API,给定一个 StatefulSet 将允许我知道创建的副本的 DNS 名称。是否存在这样的 API?
最佳答案
创建 headless 时 Service
与 StatefulSet
,它应该创建 DNS SRV 条目。您可以查询它以获取与 headless Service
对应的所有 pod 的主机名列表。在不知道号码的情况下。例如,如果使用 Python,您可以执行以下操作:
>>> import dns
>>> for item in dns.resolver.query('your-app-name-headless', 'SRV'): item
...
<DNS IN SRV rdata: 10 25 0 2555bb89.your-app-name-headless.your-project.svc.cluster.local.>
<DNS IN SRV rdata: 10 25 0 830bdb18.your-app-name-headless.your-project.svc.cluster.local.>
<DNS IN SRV rdata: 10 25 0 aeb532de.your-app-name-headless.your-project.svc.cluster.local.>
<DNS IN SRV rdata: 10 25 0 a432c21f.your-app-name-headless.your-project.svc.cluster.local.>
看:
关于kubernetes - 以编程方式获取 Pod DNS 名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49676719/