Infra/Kubernetes

[K8s] Kubernetes Service

혬수 2024. 11. 5. 09:43

 

본 글은 한 권으로 배우는 도커&쿠버네티스 책에 대한 정리와 실습 내용입니다.

 

클라이언트와 파드의 연결 담당

파드들이 외부의 트래픽을 받을 수 있도록 노출 시킬 수 O

YAML파일 - spec에서 type형태로 지정

 

주로 NodePort와 LoadBalancer를 사용

 

📌 ClusterIP

  • 기본 설정값
  • 클러스터 내부에서만 파드에 접근 가능한 IP 할당

# ~/work/ch09/ex05/service-test01.yml

apiVersion: v1
kind: Service
metadata:
  name: web-service
spec:
  selector:
    app.kubernetes.io/name: web-deploy # 서비스와 연결할 파드
  type: ClusterIP
  ports:
    - protocol: TCP
      port: 80
kubectl apply -f deploy-test01.yml
kubectl apply -f service-test01.yml

kubectl get all
# ~/work/ch09/ex05/nginx-test01.yml
# 쿠버네티스 서비스에 요청할 파드 

apiVersion: v1
kind: Pod
metadata:
  name: nginx01
spec:
  containers:
    - name: nginx-test01
      image: nginx:latest
kubectl apply -f nginx-test01.yml

kubectl get all

kubectl exec -it nginx01 -- /bin/bash
# bash 진입
curl <쿠버네티스 서비스IP>

 

 

📌 NodePort

  • 클러스터의 각 노드에서 NodeIP>:<NodePort>를 통해 클러스터 외부에서 접근할 수 있게 해줌
  • NAT을 사용하는 클러스터 내에서 각 노드들의 지정된 포트(30000~32767)를 외부에 노출
    • 1~1024 : well-known 포트
    • 1025 ~ 65535 : 각 서비스가 지정하는 포트
  • ClusterIP 자동 생성

 

 

# ~/work/ch09/ex06/service-test02.yml

apiVersion: v1
kind: Service
metadata:
  name: web-service-nodeport
spec:
  selector:
    app.kubernetes.io/name: web-deploy # 서비스와 연결할 파드
  type: NodePort
  ports:
    - protocol: TCP
      nodePort: 31001 # 노드로 연결할 NodePort
      port: 80 # 서비스가 사용할 Port
      targetPort: 80 # 파드가 받게 될 포트
kubectl apply -f deploy-test01.yml
kubectl apply -f service-test02.yml

kubectl get all

kubectl get pod -o wide

 

 

📌 LoadBalancer

  • 클라우드 제공자의 로드 밸런서를 사용하고, 서비스에 고정된 공인된 IP를 할당
  • NodePort의 상위 집합
  • 쿠버네티스 클러스터 외부에서도 쿠버네티스 내부에 존재하는 파드에 접근 가능

# ~/work/ch09/ex07/service-test03.yml

apiVersion: v1
kind: Service
metadata:
  name: web-service-loadbalancer
spec:
  selector:
    app.kubernetes.io/name: web-deploy # 서비스와 연결할 파드
  type: LoadBalancer
  ports:
    - protocol: TCP
      nodePort: 31002 # 노드로 연결할 NodePort
      port: 80 # 서비스가 사용할 Port
      targetPort: 80 # 파드가 받게 될 포트
  externalIPs: # 외부에서 접근할 수 있는 외부 IP
		- 192.168.64.8 # myserver01의 IP

 

 

📌 ExternalName

  • CNAME 레코드를 통해 클러스터 외부 서비스로의 DNS 조회를 제공하는 유형
  • 서비스가 클러스터 외부에 있는 외부 도메인 가리키도록 설정 가능
# ~/work/ch09/ex08/service-test04.yml

apiVersion: v1
kind: Service
metadata:
  name: web-service-externalname
spec:
  type: ExternalName
  externalName: www.google.com
kubectl apply -f service-test04.yml
kubectl apply -f nginx-test01.yml

kubectl get all

kubectl exec -it nginx01 -- /bin/bash
## bash 진입

curl 'web-service-externalname'
## 접속결과 ~~