Headless Service
更新時間 2024-01-05 16:04:22
最近更新時間: 2024-01-05 16:04:22
分享文章
本文主要介紹 Headless Service 。
前面講的Service解決了Pod的內外部訪問問題,但還有下面這些問題沒解決。
- 同時訪問所有Pod
- 一個Service內部的Pod互相訪問
Headless Service正是解決這個問題的,Headless Service不會創建ClusterIP,并且查詢會返回所有Pod的DNS記錄,這樣就可查詢到所有Pod的IP地址。有狀態負載StatefulSet正是使用Headless Service解決Pod間互相訪問的問題。
apiVersion: v1
kind: Service # 對象類型為Service
metadata:
name: nginx-headless
labels:
app: nginx
spec:
ports:
- name: nginx # Pod間通信的端口名稱
port: 80 # Pod間通信的端口號
selector:
app: nginx # 選擇標簽為app:nginx的Pod
clusterIP: None # 必須設置為None,表示Headless Service
執行如下命令創建Headless Service。
# kubectl create -f headless.yaml
service/nginx-headless created
創建完成后可以查詢Service。
# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx-headless ClusterIP None <none> 80/TCP 5s
創建一個Pod來查詢DNS,可以看到能返回所有Pod的記錄,這就解決了訪問所有Pod的問題了。
$ kubectl run -i --tty --image tutum/dnsutils dnsutils --restart=Never --rm /bin/sh
If you don't see a command prompt, try pressing enter.
/ # nslookup nginx-0.nginx
Server: 10.247.3.10
Address: 10.247.3.10#53
Name: nginx-0.nginx.default.svc.cluster.local
Address: 172.16.0.31
/ # nslookup nginx-1.nginx
Server: 10.247.3.10
Address: 10.247.3.10#53
Name: nginx-1.nginx.default.svc.cluster.local
Address: 172.16.0.18
/ # nslookup nginx-2.nginx
Server: 10.247.3.10
Address: 10.247.3.10#53
Name: nginx-2.nginx.default.svc.cluster.local
Address: 172.16.0.19