我正在尝试创建一个 kubernetes 作业,在其中运行“dig srv”查询来找出同一集群上运行的任何特定服务的所有 pod 的 IP 地址。
这可以实现吗?
我想对问题陈述进行更详细的阐述。集群上已经运行了一些服务。要求是有一个工具可以接受服务名称并列出属于该服务的所有 Pod 的 IP 地址。
我可以通过使用 kubectl 命令以及选择器和 jq 工具来做到这一点。但由于某些原因,我不允许在此环境中运行 kubectl 命令。
我想用dig srv
查询以解析提供的服务名称的 Pod IP。
您可以使用无头服务(因此没有 ClusterIP,也没有内部负载平衡)。如果提供选择器,则可以查询服务的A记录。
See: https://kubernetes.io/docs/concepts/services-networking/service/#headless-services https://kubernetes.io/docs/concepts/services-networking/service/#headless-services
考虑以下示例:
一些 Pod 的部署:
---
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 记录返回。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)