Study/K8S
Services
monitor
2023. 4. 1. 23:35
1. Services
역할
- 포드끼리 묶어 놓음 그리고, 다른 서비스와의 연결을 도와줌
예제로 외부 사용자가 어떻게 내부 POD에 접근 할 수 있을까?
SSH로 쿠버네티스 서버에 연결하면 되겠죠. 하지만, SSH를 연결하지 않고 노트북에서 노드 IP로 바로 접속하는 방법이 없을까?
- Service가 바로 연결을 도와줌.
- NodePort : 서비스가 노드 포트를 열어서 외부에서 서비스에 지정한 노드 포트로 연결 할 수 있게 해서 들어 가게 함
- ClusterIP : 클러스터 내부에 가상 IP를 만들어서 APP끼리 연결을 가능하게 한다.
- LoadBalancer :
Service - NodePort
- 서비스는 노드 포트끼리 매핑 시켜줘서 접속을 할 수 있게 한다.
TargetPort : Pod의 포트
Port : 서비스의 포트
NodePort : 노드의 포트 번호
Service-definition.yaml
apiVersion: v1
kind: Service
metadata:
name: myapp-service
spec:
type: NodePort
ports:
- targetPort: 80 #Target Pod의 포트 번호 -> 정확히 어떤 Pod인지 정의가 필요하다
port: 80 #서비스의 포트 번호
nodePort: 30008 # Node Port 번호
selector: # Pod의 label로 정해진 이름이나 타입을 가져와서 어떤 POD인지 정의한다.
app: myapp
type: front-end
다중 노드든 다중 포드이든 서비스가 가로질러서 포드 또는 노드를 연결 시킬 수 있기 때문에 추가적인 적용이 필요가 없다.
Service - Cluster IP
포드는 기본적으로 IP들이 적용 되어져 있습니다. 그래서, 앱 간에 일일이 내부 IP 주소로 연결하기는 어렵습니다.
- 이것을 K8S 서비스가 해결 해줄 수 있습니다.
백앤드 Pod를 서비스 하나로 묶으면 프론트 앤드 Pod도 일일이 내부 IP 주소로 연결 할 필요가 없겠죠.
아래의 yaml은 back-end를 가로지르는 서비스가 될 것이다.
apiVersion: v1
kind: Service
metadata:
name: back-end
spec:
type: ClusterIP
ports:
- targetPort: 80 #Target Pod의 포트 번호 -> 정확히 어떤 Pod인지 정의가 필요하다
port: 80 #서비스의 포트 번호
selector: # Pod의 label로 정해진 이름이나 타입을 가져와서 어떤 POD인지 정의한다.
app: myapp
type: back-end