open:서비스

서비스

## 서비스
apiVersion: v1
kind: Service
metadata:
  name: web-service
spec:                 # type을 생략하여 ClusterIP가 적용된다. 
  selector:           # service - 백엔드 pod와 연결
    app: web
  ports:
  - protocol: TCP
    port: 80

항목 설명
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을 설정하면 헤드리스로 동작
항목 설명
port 필수 항목. 이 서비스에 의해 공개되는 포트번호
name port가 하나인 경우는 생략할 수 잇고 여러 개인 경우는 필수 설정 필요
각 포트의 이름은 서비스 스펙 내에서 유일해야 함
protocol 생략 시에는 TCP가 설정됨. TCP 혹은 UDP 설정 가능
nodePort 생략 시에는 시스템이 자동으로 할당
type이 NodePort나 LoadBalancer인 경우 모든 노드에서 포트를 공개
설정한 포트가 이미 사용 중인 경우에는 오브젝트 생성에 실패
targetPort 생략 시에는 port와 동일한 값이 사용됨. selector에 의해 대응되는 파드가 공개하는 포트번호 또한 포트 이름을 설정함

## 디플로이먼트
apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-deploy
spec:
  replicas: 3
  selector:           # deployment - pod 대응용
    matchLabels:
      app: web
  template:           # 여기서부터 파드 템플릿
    metadata:
      labels:
        app: web      # 파드의 라벨
    spec:
      containers:
      - name: nginx
        image: nginx:latest

서비스 타입 접근 가능 범위
ClusterIP 타입을 지정하지 않으면 기본으로 설정되며, 클러스터 내부의 파드에서 서비스의 이름으로 접근 할 수 있다
NodePort ClusterIP의 접근 범위뿐만 아니라 k8s 클러스터 외부에서도 노드의 IP 주소와 포트번호로 접근 할 수 있다
LoadBalancer NodePort 의 접근 범위 뿐만 아니라 k8s 클러스터 외부에서 대표 IP 주소로 접근 할 수 있다
ExternalName k8s 클러스터 내의 파드에서 외부 IP 주소에 서비스의 이름으로 접근할 수 있다

NodePort는 쉽고 편리하게 설정할 수 있지만 정식 서비스에 사용하는 것은 추천하지 않는다.

  • open/서비스.txt
  • 마지막으로 수정됨: 2021/10/04 08:20
  • 저자 127.0.0.1