이번 시간엔 쿠버네티스에서 실제로 외부 접속을 허용하기 위한 Service 리소스 타입에 대해 알아보도록 하자
Service
- 파드 집합에서 실행중인 애플리케이션을 네트워크로 노출하기 위해 사용한다.
- 파드에 고유한 IP 주소와 파드 집합에 대해 단일 DNS 명을 부여하고, 로드밸런스를 수행할 수 있다.
- 특정 selector 를 지정할 수 있다. ReplicaSet, Deployment 를 지정한다.
- 하나의 selector 에 여러 포트를 지정할 수 있다.
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 에 대해서..
'Dev > Kubernetes' 카테고리의 다른 글
[CKAD] section 7. Network Policy (3) (0) | 2022.05.02 |
---|---|
[CKAD] section 7. Ingress (2) (0) | 2022.05.01 |
[Kubernetes] 쿠버네티스로 우분투 띄워보기 (0) | 2022.04.18 |
[CKAD] section 6. POD Design (2) - Job & CronJob (0) | 2022.04.17 |
[CKAD] section 6. POD Design (1) - Labels & Rolling Update (0) | 2022.04.12 |