kubernets

 

이번 시간엔 쿠버네티스에서 실제로 외부 접속을 허용하기 위한 Service 리소스 타입에 대해 알아보도록 하자

 

Service

  • 파드 집합에서 실행중인 애플리케이션을 네트워크로 노출하기 위해 사용한다.
  • 파드에 고유한 IP 주소와 파드 집합에 대해 단일 DNS 명을 부여하고, 로드밸런스를 수행할 수 있다.
  • 특정 selector 를 지정할 수 있다. ReplicaSet, Deployment 를 지정한다.
  • 하나의 selector 에 여러 포트를 지정할 수 있다.

 

Service 구성

 

apiVersion: v1
kind: Service
metadata:
  labels:
    app: webapp-service
  name: webapp-service
spec:
  type: NodePort
  ports:
  - port: 80
    targetPort: 80
    nodePort: 30080
  selector:
    name: simple-webapp

 

위와 같이 포트를 지정한다. 1번은 파드에 연결될 포트, 2번은 Service 자체의 포트, 3번은 실제 외부에서 접속하기 위한 포트이다.

 

한 노드의 여러 파드

 

 

여러 노드의 하나의 파드

 

Service 에서는 기본 타입이 ClusterIP 이고, 클러스터 내부에서만 접속 가능하다.

 

매니페스트 파일을 생성할 때, 아래와 같은 명령어를 사용하면 템플릿을 확보할 수 있다.

 

$ k create service nodeport webapp-service --tcp=8080:8080 --dry-run=client -o yaml > simple-webapp.yaml

# 생성된 매니페스트 파일
apiVersion: v1
kind: Service
metadata:
  creationTimestamp: null
  labels:
    app: webapp-service
  name: webapp-service
spec:
  ports:
  - name: 8080-8080
    port: 8080
    protocol: TCP
    targetPort: 8080
  selector:
    app: webapp-service
  type: NodePort
status:
  loadBalancer: {}

 

Service 의 타입

  • ClusterIP
    • 서비스를 클러스터-내부 IP에 노출시킨다. 이 값을 선택하면 클러스터 내에서만 서비스에 도달할 수 있다. 이것은 ServiceTypes의 기본 값이다.
  • NodePort
    • 고정 포트 (NodePort)로 각 노드의 IP에 서비스를 노출시킨다. NodePort 서비스가 라우팅되는 ClusterIP 서비스가 자동으로 생성된다. <NodeIP>:<NodePort>를 요청하여, 클러스터 외부에서 NodePort 서비스에 접속할 수 있다.
  • 이 밖에 LoadBalancer, ExternalName 가 있다.

 

꽤 중요한 개념이었지만 생각보다 쉽게 사용할 수 있었다.

다음은 Ingress 에 대해서..