[英]How to obtain Ip address of a kubernetes pod by querying DNS srv records?
我正在尝试创建一个kubernetes作业,在其中运行“ dig srv”查询,以查找在同一集群上运行的任何特定服务的所有Pod的IP地址。
这是可以实现的吗?
我想进一步说明问题。 群集上已在运行一些服务。 要求是要有一个可以接受服务名称并列出属于该服务的所有容器的IP地址的工具。
通过使用kubectl命令以及选择器和jq工具,我能够做到这一点。 但是由于某些原因,不允许在此环境中运行kubectl命令。
我想使用dig srv
查询来解析提供的服务名称的pod IP。
这在DNS for Services and Pods中进行了解释。
为群集中定义的每个服务(包括DNS服务器本身)分配一个DNS名称。 默认情况下,客户端Pod的DNS搜索列表将包含Pod自己的名称空间和群集的默认域。 最好通过示例说明:
在Kubernetes命名空间
bar
假设一个名为foo
的服务。 在名称空间bar
运行的Pod可以通过对foo
进行DNS查询来查找此服务。 在名称空间quux
运行的Pod可以通过对foo.bar
进行DNS查询来查找此服务。
这是有关Kubernetes基于DNS的服务发现的详细文档。
至于查询POD
ip地址,则取决于是否指定了spec.hostname
。
如果在与Pod相同的名称空间中存在无头服务,并且与子域具有相同的名称,则群集的KubeDNS服务器还将为Pod的全限定主机名返回A记录。 例如,假设Pod的主机名设置为“
busybox-1
”,子域设置为“default-subdomain
”,并且在同一名称空间中使用无头服务命名为“default-subdomain
”,则该Pod将看到自己的FQDN为“busybox-1.default-subdomain.my-namespace.svc.cluster.local
”。 DNS以该名称提供A记录,指向Pod的IP。 两个窗格“busybox1
”和“busybox2
”可以具有各自不同的A记录。端点对象可以为任何端点地址及其IP指定
hostname
。注意:因为未为Pod名称创建A记录,所以要创建Pod的A记录需要
hostname
。 没有hostname
但带有subdomain
Pod只会为无头服务创建一个A记录(default-subdomain.my-namespace.svc.cluster.local
),指向Pod的IP地址。 另外,除非在服务上设置了publishNotReadyAddresses=True
否则Pod需要准备好以进行记录。
希望这足以解释。
您可以使用无头服务(因此,没有ClusterIP,也没有内部负载平衡)。 如果提供选择器,则可以查询服务的A记录。
参见: https : //kubernetes.io/docs/concepts/services-networking/service/#headless-services
考虑以下示例:
部署一些吊舱:
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.16
ports:
- containerPort: 80
对于此部署,添加了以下无头服务:
apiVersion: v1
kind: Service
metadata:
name: nginx
labels:
app: nginx
spec:
ports:
- port: 80
name: web
clusterIP: None
selector:
app: nginx
现在可以使用DNS(在群集内部)查询此内容
$ kubectl run shell -i --rm --tty --restart=Never --image=busybox
# nslookup -type=A nginx
Server: 10.96.0.10
Address: 10.96.0.10:53
Name: nginx.default.svc.cluster.local
Address: 10.34.0.2
Name: nginx.default.svc.cluster.local
Address: 10.42.0.2
Name: nginx.default.svc.cluster.local
Address: 10.46.0.1
所有内部Pod IP均作为DNS A记录返回。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.