None-Selector 서비스는 ClusterIP 서비스의 일종으로(일반적으로 클러스터 내부에서는 ClusterIP 서비스를 통해 로드 밸런싱을 하기 때문에 이를 기준으로 설명한다.), 말 그대로 ClusterIP 서비스의 selector 를 지정하지 않는 대신, Service와 동일한 이름의 Endpoints 를 생성하고 Endpoints 에 subsets[].address[] 를 배열로 지정하여 Service와 목적지를 1:N 으로 매핑하도록 구성해준다.(로드 밸런싱 포함) Endpoints 에서 지정하는 로드 밸런싱 대상 멤버에는 외부 서비스의 IP 들을 지정하면 된다. Endpoints 에 지정된 엔드포인트들을 타켓으로 해야 하기 때문에 당연히 spec.externalName 도 지정하면 안된다.

1. 생성
Service 와 Endpoints 리소스를 각각 생성한다. 중요한 것은, 서비스와 엔드포인트 리소스의 이름이 일치해야 한다는 것이다. 서비스에는 spec.selector 와 spec.externalName 을 지정하지 않아야 한다.
서비스
apiVersion: v1
kind: Service
metadata:
name: none-selector
spec:
type: ClusterIP
ports:
- protocol: TCP
port: 8080
targetPort: 80
엔드포인트
apiVersion: v1
kind: Endpoints
metadata:
name: none-selector
subsets:
- addresses:
- ip: 192.168.1.1
- ip: 192.168.1.2
ports:
- protocol: TCP
port: 80
2. 로드 밸런싱 대상 변경
다음 커맨드로 서비스에 엔드포인트 대상 멤버가 등록되었는지 확인한다.
$ kubectl describe svc none-selector
Name: none-selector
Namespace: default
Labels: <none>
Annotations: <none>
Selector: <none>
Type: ClusterIP
IP Family Policy: SingleStack
IP Families: IPv4
IP: 10.96.201.140
IPs: 10.96.201.140
Port: <unset> 8080/TCP
TargetPort: 80/TCP
Endpoints: 192.168.1.1:80,192.168.1.2:80
Session Affinity: None
Internal Traffic Policy: Cluster
Events: <none>
이제 엔드포인트 리소스에서 멤버만 추가/삭제하면 로드 밸런싱 대상이 변경된다.
참고로, ClusterIP 나 LoadBalancer 서비스를 생성하여도 자동으로 로드 밸런싱 대상인 엔드포인트 리소스가 생성된다.
'Kubernetes' 카테고리의 다른 글
| [Kubernetes] 파드에 환경 변수 주입하는 5가지 방법 (0) | 2026.01.07 |
|---|---|
| [Kubernetes] Ingress 이해 (0) | 2025.12.27 |
| [Kubernetes] ExternalName 서비스(클러스터 내부에서 외부 도메인의 CNAME 사용하기) (0) | 2025.12.05 |
| [Kubernetes] 헤드리스 서비스(개별 파드를 서비스로 노출하기) (0) | 2025.12.05 |
| [Kubernetes] Multi Region 서비스에서 최소한의 latency 를 위한 Topology Aware Hint (0) | 2025.11.23 |
