我有一个关于GKE中的kube-dns的问题。当我部署statfulset时,它将根据pod名称存储所有记录。如
dig _mysql._tcp.powerdns-recursor-database-cluster.default.svc.cluster.local. SRV
;; ANSWER SECTION:
_mysql._tcp.powerdns-recursor-database-cluster.default.svc.cluster.local. 30 IN SRV 10 50 3306 powerdns-recursor-database-cluster-1.powerdns-recursor-database-cluster.default.svc.cluster.local.
_mysql._tcp.powerdns-recursor-database-cluster.default.svc.cluster.local. 30 IN SRV 10 50 3306 powerdns-recursor-database-cluster-0.powerdns-recursor-database-cluster.default.svc.cluster.local.
如你所见,它会返回
powerdns-recursor-database-cluster-1
和
powerdns-recursor-database-cluster-0
,这是一个正确的pod名称。
但我有一个CRD和后端,我的控制器将部署一个状态集,但记录是非常不同的。
dig _foo._udp.test.default.svc.cluster.local. SRV
;; ANSWER SECTION:
_foo._udp.test.default.svc.cluster.local. 30 IN SRV 10 50 4060 3838313432393332.test.default.svc.cluster.local.
_foo._udp.test.default.svc.cluster.local. 30 IN SRV 10 50 4060 3531343631663839.test.default.svc.cluster.local.
如你所见,它返回
3838313432393332
和
3531343631663839
作为pod名称。通常kubernetes返回pod名称或pod ip在"-"但我不知道这些数字是什么,以及kube-dns如何存储它们,以及为什么使用CRD不同于statfulset ?这里也可以用pod名吗?
经过多次尝试,我发现了问题。
通常,我们有两种方法将无头服务连接到statfulset。
使用">- ; serviceName"in statfulset
serviceName: "test"
- 服务
selector:
使用选择器 - 双向使用(serviceName + selector)
如果使用空的"serviceName"它不会在GKE内部DNS (kubeDNS或CloudDNS)中使用podName。因此,如果我们需要在DNS记录中有PodName,我们必须在我们的statfulset中写入serviceName
。