Kubernetes Headless Service
Kubernetes Headless Service는 클러스터 내의 동일한 작업 집합의 파드에 대한 서비스 디스커버리를 제공하는 데 사용되는 특별한 종류의 Kubernetes 서비스입니다. 기본 Kubernetes 서비스와는 다르게, kubernetes headless service는 로드 밸런싱을 위한 클러스터 IP를 제공하지 않습니다. 대신, 헤드리스 서비스는 각 파드에 대해 고유한 네트워크 주소를 제공하고, 이를 통해 클라이언트가 직접 파드와 통신할 수 있습니다.
1. statefulset: 헤드리스 서비스는 stateful 애플리케이션에 적합하며, 각 파드가 고유한 데이터를 저장하거나 처리해야 하는 경우에 유용합니다. 예를 들어, 분산 데이터베이스 클러스터는 헤드리스 서비스를 사용하여 각 노드와 통신할 수 있습니다.
2. 클라이언트가 특정 파드와 직접 통신해야 하는 경우: kubernetes headless service를 사용하면, 클라이언트가 특정 파드에 직접 연결되므로 로드 밸런싱이 필요하지 않은 시나리오에 적합합니다.
헤드리스 서비스를 생성하려면, Kubernetes 서비스 매니페스트에 spec.clusterIP: None 속성을 추가하여 클러스터 IP 할당을 비활성화해야 합니다. 이렇게 하면, 서비스가 헤드리스 모드로 작동하며, 파드에 직접 접근할 수 있는 DNS 엔트리가 생성됩니다.
# kubernetes headless service
apiVersion: v1
kind: Service
metadata:
name: headless
namespace: default
spec:
type: ClusterIP
clusterIP: None
ports:
- name: tcp
port: 8080
protocol: TCP
targetPort: tcp
selector:
app.kubernetes.io/instance: app1
app.kubernetes.io/name: app1
---
# kubernetes service
apiVersion: v1
kind: Service
metadata:
name: app1
namespace: default
spec:
type: ClusterIP
ports:
- name: tcp
port: 8080
protocol: TCP
targetPort: tcp
selector:
app.kubernetes.io/instance: app1
app.kubernetes.io/name: app1
DNS 조회
kubernetes headless service를 nslookup 명령어를 사용하여 DNS조회시 실행 중인 POD의 아이피를 전부 조회할 수 있습니다.
$ kubectl run -it --rm dns --image=registry.k8s.io/e2e-test-images/jessie-dnsutils:1.3 --restart=Never nslookup headless.default.svc.cluster.local
Server: 10.96.0.10
Address: 10.96.0.10#53
Name: headless.default.svc.cluster.local
Address: 10.244.201.112
Name: headless.default.svc.cluster.local
Address: 10.244.143.100
Name: headless.default.svc.cluster.local
Address: 10.244.123.104
pod "dns" deleted
kubernetes service를 nslookup 명령어를 사용하여 DNS조회시 서비스에 할당된 아이피만 조회됩니다.
$ kubectl run -it --rm dns --image=registry.k8s.io/e2e-test-images/jessie-dnsutils:1.3 --restart=Never nslookup app1.default.svc.cluster.local
Server: 10.96.0.10
Address: 10.96.0.10#53
Name: app1.default.svc.cluster.local
Address: 10.96.100.12
pod "dns" deleted
'Kubernetes' 카테고리의 다른 글
Kubernetes shareProcessNamespace (0) | 2023.03.30 |
---|---|
Kubernetes podAntiAffinity (0) | 2023.03.23 |
AWS Fluent Bit error 수정 (0) | 2023.03.14 |
AWS EKS 클러스터 버전 업그레이드 (0) | 2023.03.09 |
Kubernetes RuntimeClass 사용하여 gVisor로 컨테이너 실행 (0) | 2023.03.03 |