Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

Ruff! Ruff!

[오픈소스] - 서비스 본문

CS

[오픈소스] - 서비스

maeng-kim 2024. 11. 5. 02:41

서비스 타입 종류

  • ClusterIP : 타입을 지정하지 않으면 기본으로 설정되며, 클러스터 내부의 파드에서 서비스의 이름으로 접근 가능
    • 헤드리스 모드 가능 : 대표 IP 주소 없이 서비스 동작 -> 스테이트풀셋에서 활용
  • NodePart : ClusterIP의 접근 범위뿐만 아니라 K8s 클러스터 외부에서도 노드의 IP주소와 포트번호로 접근 가능
    • ClusterIP 기능 + 노드의 IP 주소의 포트 공개
    • 클러스터 외부에서 내부의 파드에 요청 보낼 수 있음
    • 정식 서비스에 사용하진 않음
  • LoadBalancer : NodePort의 접근 범위뿐만 아니라 K8s 클러스터 외부에서 대표 IP 주소로 접근 가능
    • NodePort 기능 + 외부에서 대표 IP 주소로 접근 가능
  • ExternalName : K8s 클러스터 내의 파드에서 외부 IP 주소에 서비스의 이름으로 접근 가능
    • 파드에서 클러스터 외부의 엔드포인트에 접속하기 위한 이름을 해결

 

 

서비스와 파드의 연결

  • 서비스가 요청 전송 파드 결정하는 방법
    • 셀럭터의 라벨과 일치하는 파드를 etcd로부터 선택
    • 라벨이 중복되지 않도록 주의

 

 

서비스의 매니페스트 작성법

  • 디플로이먼트의 매니페스트
## 디플로이먼트
apiVersion: apps/v1
kind: Deployment 
	metadata:
		name: web-deploy 
        spec:
			replicas: 3 
            selector: # 디플로이먼트와 파드를 매핑하는 설정
				matchLabels:
					app: web 
            template:  # 파드 템플릿
				metadata:
					labels:
						app: web     # 파드에 부여할 라벨
				spec:
					containers:
					- name: nginx
					  image: nginx: latest
  • 서비스의 매니페스트
## 서비스
apiVersion: v1 
kind: Service 
	metadata:
		name: web-service 
        spec:
			selector:
				app: web 
            ports:
			- protocol: TCP
		      port: 80
  • 서비스 API
    • kind : Service 설정
    • apiVersion : v1 설정
    • metadata : name에 네임스페이스 내 유일한 이름을 설정. 여기서 설정한 이름은 내부 DNS에 등록되며, IP주소 해결에 사용. 또한 이후 기동된 피드의 환경 변수에 설정
    • spec : 서비스의 사양
    • type : 서비스 공개 방법을 설정. 선택이 가능한 타입은 ClusterIP, NodePort, LoadBalancer, ExternalName 
    • ports : 서비스에 의해 공개되는 포트번호
    • selector : 여기서 설정한 라벨과 일치하는 파드에 요청을 전송. 서비스 타입이 ClusterIP, NodePort, LoadBalancer인 경우에 해당하며 ExternalName인 경우는 무시. 이 항목을 설정하지 않는 경우 외부에서 관리하는 엔드포인트를 가진 것으로 간주
    • sessionAffinity : 설정이 가능한 세션 어피니티는 ClientIP. 생략 시 none으로 설정
    • clusterIP : 이 항목을 생략하면 대표 IP주소가 자동으로 할당. none을 설정하면 헤드리스로 동작
    • name : port가 하나인 경우는 생략 가능. 여러 개인 경우는 필수 설정 필요. 각 포트의 이름은 서비스 스펙 내에서 유일해야 함
    • protocol : 생략 시에는 TCP가 설정됨. (TCP or UDP)
    • nodePort : 생략 시에는 시스템이 자동으로 할당. type이 NodePort나 LoadBalancer인 경우 모든 노드에서 포트를 공개. 설정한 포트가 이미 사용 중인 경우 오브젝트 생성에 실패
    • targetPort : 생략 시에는 port와 동일한 값이 사용됨. selector에 의해 대응되는 파드가 공개하는 포트번호 또는 포트 이름을 설정함