Kubernetes

None-Selector 서비스

jih0ssang 2024. 2. 17. 12:08

서비스 API 카테고리

컨테이너를 외부에 공개하는 엔드포인트를 제공하는 리소스

- 서비스

   - ClusterIP

 - ExternalIP  (ClusterIP의 한 종류)

   - NodePort

   - LoadBalancer

   - 그 외 서비스 기능

   - Headless (None)

   - ExternalName

   - None-Selector

- 인그레스

 

 

None-Selector

ExternalName 서비스는 서비스명으로 이름 해석을 하면 CNAME으로 반환 하였다.

그에 반해, None-Selector 서비스는 서비스명으로 이름 해석을 하면 A 레코드로 반환한다.자신이 설정한 멤버에 대해 로드 밸런싱을 하며, Client-side 로드밸런싱용 엔드포인트를 제공하는 서비스라고 말할 수 있다.type: LoadBalancer를 지정하는 것도 가능하지만, 쿠버네티스 클러스터의 외부 로드 밸런서에서 수신한 트래픽이 쿠버네티스 클러스터로 전송된 후에 다시 쿠버네티스 클러스터의 외부로 전송하는 형태가 되므로 유용하지 못하다.이는 type: NodePort도 마찬가지다.

 

externalName을 지정하지 않고 Selector가 존재하지 않는 서비스를 생성한 후 엔드포인트 리소스를 수동으로 만들면 유연한 서비스를 만들 수 있다. 예를 들어 쿠버네티스 클러스터 외부의 애플리케이션 서버에 대해 요청을 분산하는 경우에도 상단의 그림과 같이 사용할 수 있다. 

 

None-Selector 서비스 생성

---
apiVersion: v1
kind: Service
metadata:
  name: sample-none-selector
spec:
  type: ClusterIP
  ports:
  - port: 8080
    protocol: TCP
    targetPort: 80

---
apiVersion: v1
kind: Endpoints
metadata:
  name: sample-none-selector
subnets:
- addresses:
  - ip: 192.168.1.1
  - ip: 192.168.1.2
  ports:
  - protocol: TCP
    port: 80

실제 리소스를 생성할 때는 서비스와 엔드포인트 리소스를 각각 생성한다.

서비스와 엔드포인트 리소스는 각각 이름이 일치해야 하므로 주의해야 한다.

기본적으로 서비스 리소스는 기본값 type: ClusterIP를 지정한다.서비스에는 셀렉터를 지정하지 않는다는 점을 주의한다.마찬가지로 externalName도 지정하지 않는다.

 

 

 

 

 

'Kubernetes' 카테고리의 다른 글

서비스 API 카테고리 정리  (0) 2024.02.18
Ingress(인그레스)  (0) 2024.02.17
스케줄링(taint&tolerations/NodeSelector/NodeAffinity)  (0) 2024.02.13
Resource Requests/Limits  (0) 2024.02.13
서비스 API 카테고리(ExternalName)  (0) 2024.02.11