전공공부
[K8S - CKA] Services 본문
Service
정의 : 애플리케이션 안 팎의 요소들과 통신을 할 수 있게 하는 요소입니다.
예시 : POD 간의 통신을 가능 할 수 있게 하는 요소입니다. 백엔드 POD <-> 프론트 엔드 POD <-> DB 등
External Connection to K8S
쿠버네티스 클러스터에 외부 사용자가 접근 하려면 어떻게 해야 할까요?
SSH로 curl 요청으로 들어가서 하면 10.244.0.0으로 소통 할 수 있지만 이것은 사실 서버 내부에 들어와서 연결을 하는 것이니 지금 원하는 외부 요청이 아니다.
NodePort 방식
노드 IP로 연결을하는 방법은 curl 192.168.1.2:30008 으로 연결을 하는 것인데 노드 포트로 연결해서 바깥에서 연결하는 방식이다. 이는 노드 포트 방식으로 부르기도 한다.
연결하는 방법은 <노드 IP>: <노드 포트> 이렇게 하여서 연결이 가능하다.
TargetPort : 내가 접근하려는 오브젝트의 포드 번호
Port : 서비스의 포트 번호
NodePort : 노드의 포트 번호
Range는 기본적으로 허용된 범위인 30000~32767 까지 된다.
그리고, spec.selector : 부분에 내가 연결 할 pod의 metadata.app, metadata.type을 설정하면 해당 pod로 연결 할 수 있다.
추가적으로, Pod를 Node별로 배포하였을때도 서비스가 잘 작동하는지 알아보자.
위 그림을 보면 서비스가 노드를 가로질러서 연결을 하고 있기 때문에 서로 연결이 가능하다.
각 노드에 연결을 할 때, NodeIP에 NodePort 번호만 맞춰서 연결하면 같은 곳으로 접속이 가능하다.
CluserIP 방식
내부에서만 소통하는 방식이다.
우선 내부에서만 소통하는 방식인데 서비스가 왜 필요할까?
- POD IP는 자주 변하며 변할 때 마다 새로이 재 연결을 할 수는 없는 노릇이니 서비스 인터페이스를 두고 하나의 Cluster IP로 각 Selector된 POD로 연결을 하는 것이다.
- 그리고 front-end pod -> back-end pod -> redis 까지 어떻게 일일이 POD끼리 연결 할 것인가를 생각해보면
서비스의 유용성을 알 수 있을 것이다.
apiVersion: v1
kind: Service
metadata:
labels:
k8s-app: kube-dns
kubernetes.io/cluster-service: "true"
kubernetes.io/name: CoreDNS
name: kube-dns
namespace: kube-system
spec:
clusterIP: 10.96.0.10
ports:
- name: dns
port: 53
protocol: UDP
targetPort: 53
- name: dns-tcp
port: 53
protocol: TCP
targetPort: 53
selector:
k8s-app: kube-dns
type: ClusterIP
연결점 : spec.selector.k8s-app은 연결될 pod의 labels 부분에 지정된 키 그리고, 값을 가져온 것이다.
Load Balancer 방식
먼저 설명전 기존에 외부에서 접근 할 때 NodePort 방식을 사용 했 던 것을 살펴봅시다.
각각의 노드 아이피에 직접 사용자가 직접 access 합니다.
- 이러면 문제점이 실제 도메인을 사용 할 수 없고, 각각의 포트 넘버를 외우고 진입해야 각 서비스에 접근을 할 수 있습니다.
이를 해결 하기 위한 것이 Load Balancer 방식입니다.
LB를 통해서 트래픽을 라우팅하고 관리합니다.
그러나, 이것은 GCP, AWS ,Azura 등등인 지원하는 플랫폼에서는 Native Load Balancer가 제작 되어 있어서 괜찮지만 이반적인 VM을 연결해서 만든 K8S 클러스터는 해당 방식을 따로 지원하지 않으므로 NodePort 방식과 같은 방식으로 작동하게 됩니다.
'Study > K8S' 카테고리의 다른 글
[K8S - CKA] Node Selectors & Node Affinity (0) | 2023.10.03 |
---|---|
[K8S - CKA] Scheduling & Taints and Tolerant (0) | 2023.09.10 |
[K8S - CKA] Kubectl Apply Command (0) | 2023.08.26 |
[K8S - CKA] Imperative 접근 방식 vs. Declarative 접근 방식 (0) | 2023.08.22 |
[K8S - CKA] Deployment (0) | 2023.08.20 |