Infra/Kubernetes

Kubernetes - Service와 이를 통한 Ingress

wave35 2023. 6. 7. 21:19

yaml파일을 통하거나 deploy를 통해 파드를 생성하거나 pod는 service를 통해 외부에 접근이 가능하다.

쿠버네티스에서 서비스는 파드의 논리적 집합과 그것들에 접근할 수 있는 정책을 정의하는 추상적 개념이다.

Service.yaml에서 어떤 방식으로 외부에 노출시킬지에 대한 type에는 여러 종류가 있다.

  • ClusterIP (default) - 클러스터 내부에서만 접근 가능한 IP
  • NodePort - Port번호를 통해 외부에서 접근 (NAT 컨샙)
  • Load Balancer - 외부의 Load Balancer를 사용하는 방법
  • ExternalName - kube-dns 컴포넌트로 DNS를 이용하는 방법

 

서비스는 추상적이지만 service와 pods는 내부에서 각기 다른 IP를 갖는다.

따라서 port를 가지며 각 포트를 아래의 3가지를 통해 타겟팅이 가능하다.

  • NodePort
  • Port
  • TargetPort

예를 들어 리눅스 서버의 IP가 192.87.12.2라면 192.87.12.2:30005 주소를 통해 pod에 접근할 수 있다.

해당 범위, 30000 ~ 32767 포트를 주로 사용한다.

 

예제

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    app.kubernetes.io/name: proxy
spec:
  containers:
  - name: nginx
    image: nginx:stable
    ports:
      - containerPort: 80
        name: http-web-svc

---
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    app.kubernetes.io/name: proxy
  ports:
  - name: name-of-service-port
    protocol: TCP
    port: 80
    targetPort: http-web-svc

 

참조 : https://kubernetes.io/ko/docs/concepts/services-networking/service/