您可以使用无头服务(因此没有 ClusterIP 也没有内部负载平衡)。如果提供选择器,则可以查询服务的 A 记录。
请参阅: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 记录返回。