헤드리스 서비스를 생성하려면 다음 조건을 만족해야 한다.
spec.type
이 ClusterIP
일 것spec.clusterIP
가 None
일 것metadata.name
이 스테이트풀셋의 spec.serviceName
과 같을 것
apiVersion: v1
kind: Service
metadata:
name : sample-headlsess
spec:
type: ClusterIP
clusterIP: None
ports:
- name: "http-port"
protocol: "TCP"
port: 80
targetPort: 80
selector:
app: sample-app
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: sample-statefulset-headless
spec:
serviceName: sample-headless
replicas: 3
selector:
matchLabels:
app: sample-app
template:
metadata:
labels:
app: sample-app
spec:
containers:
- name: nginx-container
image: amsy810/echo-nginx:v2.0
서비스명.네임스페이스명.svc.cluster.local
’로 질의한다.서비스 생성 시 ClusterIP 등과 같은 여러 파드에 대해 엔드포인트가 할당되어 그 엔드포인트의 이름 해석은 제공되지만, 개별 파드명에서 이름 해석은 할 수 없다.
스테이트풀셋이 헤드리스 서비스를 사용하고 서비스의 metadata.name
이 스테이트풀셋의 spec.serviceName
과 같은 경우 파드 단위의 이름 해석을 할 수 있다.
파드명.서비스명.네임스페이스명.svc.cluster.local
spec.hostname
과 헤드리스 서비스명과 동일한 spec.subdomain
설정이 추가로 필요하다.
---
apiVersion: v1
kind: Pod
metadata:
name: sample-subdomain
labels:
app: sample-app
spec:
hostname: sample-hostname
subdomain: sample-subdomain
containers:
- name: nginx-container
image: amsy810/tools:v2.0
---
apiVersion: v1
kind: Service
metadata:
name: sample-subdomain
spec:
type: ClusterIP
clusterIP: None
ports: []
selector:
app: sample-app
Hostname명.Subdomain/서비스명.네임스페이스명.svc.cluster.local
kubectl run —image=amsy810/tools:v2.0 --restart=Never --rm -i test pod \\ --command -- dig sample-hostname.sample-subdomain.default.svc.cluster.local