如何通过查询DNS srv记录获得kubernetes吊舱的Ip地址?

如何通过查询DNS srv记录获得kubernetes吊舱的Ip地址?,kubernetes,kubernetes-pod,kube-dns,kubernetes-jobs,srv-record,Kubernetes,Kubernetes Pod,Kube Dns,Kubernetes Jobs,Srv Record,我正在尝试创建一个kubernetes作业,在该作业中,我将运行“dig srv”查询,以找出在同一集群上运行的任何特定服务的所有POD的IP地址 这是可以实现的吗 我想就问题陈述再详细阐述一下。集群上已经有一些服务在运行。需求是要有一个能够接受服务名称并列出属于该服务的所有POD的IP地址的工具 我可以通过使用kubectl命令以及选择器和jq工具来实现这一点。但由于某些原因,我不允许在此环境中运行kubectl命令 我想使用dig srv查询来解析所提供服务名称的pod IP。这在内部进行了

我正在尝试创建一个kubernetes作业,在该作业中,我将运行“dig srv”查询,以找出在同一集群上运行的任何特定服务的所有POD的IP地址

这是可以实现的吗

我想就问题陈述再详细阐述一下。集群上已经有一些服务在运行。需求是要有一个能够接受服务名称并列出属于该服务的所有POD的IP地址的工具

我可以通过使用kubectl命令以及选择器和jq工具来实现这一点。但由于某些原因,我不允许在此环境中运行kubectl命令

我想使用
dig srv
查询来解析所提供服务名称的pod IP。

这在内部进行了解释

为群集中定义的每个服务(包括DNS服务器本身)分配一个DNS名称。默认情况下,客户端Pod的DNS搜索列表将包括Pod自己的命名空间和集群的默认域。这可以通过以下示例得到最好的说明:

假设Kubernetes命名空间
bar
中有一个名为
foo
的服务。在命名空间
栏中运行的Pod可以通过对
foo
执行DNS查询来查找此服务。在命名空间
qux
中运行的Pod可以通过对
foo.bar
执行DNS查询来查找此服务

这里是一个详细的文档

至于查询
POD
ip地址,则取决于是否指定了
spec.hostname

如果在与pod相同的命名空间中存在与子域同名的无头服务,则集群的KubeDNS服务器还将返回pod完全限定主机名的a记录。例如,给定一个主机名设置为“
busybox-1
”且子域设置为“
default subdomain
”的Pod,以及同一命名空间中名为“
default subdomain
”的无头服务,Pod将看到自己的FQDN为“
busybox-1.default subdomain.my namespace.svc.cluster.local
”。DNS在该名称处提供A记录,指向Pod的IP。两个POD“
busybox1
”和“
busybox2
”都可以有各自不同的A记录

Endpoints对象可以为任何端点地址及其IP指定主机名

注意:因为没有为Pod名称创建A记录,所以创建Pod的A记录需要
hostname
。没有
主机名
但有
子域
的Pod只会为无头服务创建A记录(
默认子域.my namespace.svc.cluster.local
),指向Pod的IP地址。此外,Pod需要准备就绪才能拥有记录,除非服务上设置了
publishNotReadyAddresses=True

希望这足以说明问题。

这已在内部解释

为群集中定义的每个服务(包括DNS服务器本身)分配一个DNS名称。默认情况下,客户端Pod的DNS搜索列表将包括Pod自己的命名空间和集群的默认域。这可以通过以下示例得到最好的说明:

假设Kubernetes命名空间
bar
中有一个名为
foo
的服务。在命名空间
栏中运行的Pod可以通过对
foo
执行DNS查询来查找此服务。在命名空间
qux
中运行的Pod可以通过对
foo.bar
执行DNS查询来查找此服务

这里是一个详细的文档

至于查询
POD
ip地址,则取决于是否指定了
spec.hostname

如果在与pod相同的命名空间中存在与子域同名的无头服务,则集群的KubeDNS服务器还将返回pod完全限定主机名的a记录。例如,给定一个主机名设置为“
busybox-1
”且子域设置为“
default subdomain
”的Pod,以及同一命名空间中名为“
default subdomain
”的无头服务,Pod将看到自己的FQDN为“
busybox-1.default subdomain.my namespace.svc.cluster.local
”。DNS在该名称处提供A记录,指向Pod的IP。两个POD“
busybox1
”和“
busybox2
”都可以有各自不同的A记录

Endpoints对象可以为任何端点地址及其IP指定主机名

注意:因为没有为Pod名称创建A记录,所以创建Pod的A记录需要
hostname
。没有
主机名
但有
子域
的Pod只会为无头服务创建A记录(
默认子域.my namespace.svc.cluster.local
),指向Pod的IP地址。此外,Pod需要准备就绪才能拥有记录,除非服务上设置了
publishNotReadyAddresses=True


希望这就足够了。

您可以使用无头服务(因此没有集群,也没有内部负载平衡)。如果提供选择器,则可以查询服务的记录

见:

考虑以下示例:

一些吊舱的部署:

---
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(在集群内)查询


所有内部Pod IP都作为DNS A记录返回。

您可以使用无头服务(因此没有集群IP和内部负载平衡)。如果提供选择器,则可以查询服务的记录

见:

考虑以下示例:

一些吊舱的部署:

---
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查询此信息(