繁体   English   中英

如何通过查询DNS srv记录获取kubernetes pod的IP地址?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM