게으름을 위한 부지런한 게으름뱅리' 블로그

[K8S] 쿠버네티스 "Service" yaml 예시 본문

IT/K8S

[K8S] 쿠버네티스 "Service" yaml 예시

LazismLee 2024. 7. 3. 23:06
반응형

쿠버네티스(Kubernetes)에서의 "서비스(Service)"는 여러 개의 파드(Pod)로 구성된 애플리케이션에 대한 네트워크 서비스를 제공하는 추상화된 개념입니다. 주로 다음과 같은 목적으로 사용됩니다:

1. 내부 네트워크 서비스 제공 : 서비스는 클러스터 내에서 여러 파드에 접근할 수 있는 단일 진입점을 제공합니다. 이를 통해 파드의 IP 주소가 변경되어도 서비스의 DNS 이름을 통해 접근할 수 있습니다.

2. 로드 밸런싱: 여러 개의 파드에 대한 트래픽을 분산하여 로드 밸런싱을 수행합니다. 서비스는 트래픽을 수신하고 이를 백엔드 파드 중 하나에 전달하는 역할을 합니다.

3. 서비스 발견(Discovery): 클라이언트 애플리케이션은 서비스 이름을 DNS로 해석하여 클러스터 내에 있는 특정 애플리케이션을 찾을 수 있습니다.

 

  • ClusterIP : 기본적으로 클러스터 내에서만 접근할 수 있는 서비스입니다.
  • NodePort :각 노드의 지정된 포트를 통해 외부에서 접근할 수 있는 서비스입니다.
  • LoadBalancer:  클라우드 제공 업체의 로드 밸런서를 사용하여 외부에서 접근할 수 있는 서비스입니다.
  • ExternalName: 외부 서비스를 쿠버네티스 내부에서 사용할 수 있도록 DNS 레코드를 제공하는 서비스입니다.

 

ClusterIP 예시 

예시 1: 기본 ClusterIP 서비스

apiVersion: v1
kind: Service  # 쿠버네티스 리소스 종류
metadata:
  name: my-service  # 서비스의 이름
spec:
  selector:
    app: my-app  # 라벨 셀렉터: app=my-app인 파드 선택
  ports:
    - protocol: TCP  # 포트 프로토콜은 TCP
      port: 80  # 서비스가 제공하는 포트
      targetPort: 8080  # 파드의 포트

my-service라는 이름의 서비스를 정의합니다. app: my-app 라벨을 가진 파드들을 대상으로 합니다. 포트 80으로 들어오는 트래픽을 파드의 8080 포트로 전달합니다.

 

예시 2: 여러 포트를 가진 ClusterIP 서비스

apiVersion: v1
kind: Service  # 쿠버네티스 리소스 종류
metadata:
  name: multi-port-service  # 서비스의 이름
spec:
  selector:
    app: backend  # 라벨 셀렉터: app=backend인 파드 선택
  ports:
    - name: http  # 포트 이름
      protocol: TCP  # 포트 프로토콜은 TCP
      port: 80  # 서비스가 제공하는 HTTP 포트
      targetPort: 8080  # 파드의 HTTP 포트
    - name: https  # 포트 이름
      protocol: TCP  # 포트 프로토콜은 TCP
      port: 443  # 서비스가 제공하는 HTTPS 포트
      targetPort: 8443  # 파드의 HTTPS 포트

multi-port-service라는 이름의 서비스를 정의합니다. app: backend 라벨을 가진 파드들을 대상으로 합니다. HTTP(80 -> 8080) 및 HTTPS(443 -> 8443) 포트로 들어오는 트래픽을 각각의 파드 포트로 전달합니다.

 

예시 3: 특정 IP 주소에 대한 ClusterIP 서비스

apiVersion: v1
kind: Service  # 쿠버네티스 리소스 종류
metadata:
  name: internal-service  # 서비스의 이름
spec:
  selector:
    app: internal-app  # 라벨 셀렉터: app=internal-app인 파드 선택
  clusterIP: 10.0.0.100  # 클러스터 IP 주소 직접 지정
  ports:
    - protocol: TCP  # 포트 프로토콜은 TCP
      port: 8080  # 서비스가 제공하는 포트
      targetPort: 8080  # 파드의 포트

internal-service라는 이름의 서비스를 정의합니다. app: internal-app 라벨을 가진 파드들을 대상으로 합니다. 클러스터 IP 주소를 직접 지정하고, 포트 8080으로 들어오는 트래픽을 파드의 8080 포트로 전달합니다.

 

예시 4: 이름이 있는 포트를 가진 ClusterIP 서비스

apiVersion: v1
kind: Service  # 쿠버네티스 리소스 종류
metadata:
  name: named-port-service  # 서비스의 이름
spec:
  selector:
    app: frontend  # 라벨 셀렉터: app=frontend인 파드 선택
  ports:
    - name: http  # 포트 이름
      protocol: TCP  # 포트 프로토콜은 TCP
      port: 80  # 서비스가 제공하는 HTTP 포트
      targetPort: 8080  # 파드의 HTTP 포트
    - name: https  # 포트 이름
      protocol: TCP  # 포트 프로토콜은 TCP
      port: 443  # 서비스가 제공하는 HTTPS 포트
      targetPort: 8443  # 파드의 HTTPS 포트

named-port-service라는 이름의 서비스를 정의합니다. app: frontend 라벨을 가진 파드들을 대상으로 합니다. 이름이 있는 HTTP(80 -> 8080) 및 HTTPS(443 -> 8443) 포트로 들어오는 트래픽을 각각의 파드 포트로 전달합니다.

 

예시 5: 타임아웃 설정이 있는 ClusterIP 서비스

apiVersion: v1
kind: Service  # 쿠버네티스 리소스 종류
metadata:
  name: timeout-service  # 서비스의 이름
spec:
  selector:
    app: backend  # 라벨 셀렉터: app=backend인 파드 선택
  ports:
    - protocol: TCP  # 포트 프로토콜은 TCP
      port: 80  # 서비스가 제공하는 포트
      targetPort: 8080  # 파드의 포트
    timeoutSeconds: 5  # 트래픽 처리 타임아웃 설정

timeout-service라는 이름의 서비스를 정의합니다. app: backend 라벨을 가진 파드들을 대상으로 합니다. 포트 80으로 들어오는 트래픽을 파드의 8080 포트로 전달하며, 트래픽 처리 시간이 5초를 초과하면 타임아웃됩니다.

 

NodePort 예시 

예시 1: 기본 NodePort 서비스

apiVersion: v1
kind: Service  # 쿠버네티스 리소스 종류
metadata:
  name: my-nodeport-service  # 서비스의 이름
spec:
  type: NodePort  # 서비스 유형은 NodePort
  selector:
    app: my-app  # 라벨 셀렉터: app=my-app인 파드 선택
  ports:
    - protocol: TCP  # 포트 프로토콜은 TCP
      port: 80  # 서비스가 제공하는 포트
      targetPort: 8080  # 파드의 포트
      nodePort: 30080  # 노드 포트 설정 (선택적)

my-nodeport-service라는 이름의 NodePort 서비스를 정의합니다. app: my-app 라벨을 가진 파드들을 대상으로 합니다. 포트 80으로 들어오는 트래픽을 파드의 8080 포트로 전달하며, 노드 포트를 30080으로 설정합니다.

 

예시 2: 여러 포트를 가진 NodePort 서비스

apiVersion: v1
kind: Service  # 쿠버네티스 리소스 종류
metadata:
  name: multi-port-nodeport-service  # 서비스의 이름
spec:
  type: NodePort  # 서비스 유형은 NodePort
  selector:
    app: backend  # 라벨 셀렉터: app=backend인 파드 선택
  ports:
    - name: http  # 포트 이름
      protocol: TCP  # 포트 프로토콜은 TCP
      port: 80  # 서비스가 제공하는 HTTP 포트
      targetPort: 8080  # 파드의 HTTP 포트
      nodePort: 30080  # HTTP 노드 포트 설정 (선택적)
    - name: https  # 포트 이름
      protocol: TCP  # 포트 프로토콜은 TCP
      port: 443  # 서비스가 제공하는 HTTPS 포트
      targetPort: 8443  # 파드의 HTTPS 포트
      nodePort: 30443  # HTTPS 노드 포트 설정 (선택적)

multi-port-nodeport-service라는 이름의 NodePort 서비스를 정의합니다. app: backend 라벨을 가진 파드들을 대상으로 합니다. HTTP(80 -> 8080) 및 HTTPS(443 -> 8443) 포트로 들어오는 트래픽을 각각의 파드 포트로 전달하며, 각각의 노드 포트도 설정합니다.

 

예시 3: 특정 IP 주소에 대한 NodePort 서비스

apiVersion: v1
kind: Service  # 쿠버네티스 리소스 종류
metadata:
  name: ip-nodeport-service  # 서비스의 이름
spec:
  type: NodePort  # 서비스 유형은 NodePort
  selector:
    app: internal-app  # 라벨 셀렉터: app=internal-app인 파드 선택
  ports:
    - protocol: TCP  # 포트 프로토콜은 TCP
      port: 8080  # 서비스가 제공하는 포트
      targetPort: 8080  # 파드의 포트
      nodePort: 30080  # 노드 포트 설정 (선택적)

ip-nodeport-service라는 이름의 NodePort 서비스를 정의합니다. app: internal-app 라벨을 가진 파드들을 대상으로 합니다. 포트 8080으로 들어오는 트래픽을 파드의 8080 포트로 전달하며, 노드 포트를 30080으로 설정합니다.

 

예시 4: 타임아웃 설정이 있는 NodePort 서비스

apiVersion: v1
kind: Service  # 쿠버네티스 리소스 종류
metadata:
  name: timeout-nodeport-service  # 서비스의 이름
spec:
  type: NodePort  # 서비스 유형은 NodePort
  selector:
    app: backend  # 라벨 셀렉터: app=backend인 파드 선택
  ports:
    - protocol: TCP  # 포트 프로토콜은 TCP
      port: 80  # 서비스가 제공하는 포트
      targetPort: 8080  # 파드의 포트
      nodePort: 30080  # 노드 포트 설정 (선택적)
    timeoutSeconds: 10  # 트래픽 처리 타임아웃 설정

timeout-nodeport-service라는 이름의 NodePort 서비스를 정의합니다. app: backend 라벨을 가진 파드들을 대상으로 합니다. 포트 80으로 들어오는 트래픽을 파드의 8080 포트로 전달하며, 노드 포트를 30080으로 설정하고 트래픽 처리 시간이 10초를 초과하면 타임아웃됩니다.

 

예시 5: 외부 IP를 사용한 NodePort 서비스

apiVersion: v1
kind: Service  # 쿠버네티스 리소스 종류
metadata:
  name: external-nodeport-service  # 서비스의 이름
spec:
  type: NodePort  # 서비스 유형은 NodePort
  externalIPs:
    - 192.168.1.100  # 외부 IP 주소 설정
  selector:
    app: frontend  # 라벨 셀렉터: app=frontend인 파드 선택
  ports:
    - protocol: TCP  # 포트 프로토콜은 TCP
      port: 80  # 서비스가 제공하는 포트
      targetPort: 8080  # 파드의 포트
      nodePort: 30080  # 노드 포트 설정 (선택적)

external-nodeport-service라는 이름의 NodePort 서비스를 정의합니다. 외부 IP 주소를 192.168.1.100으로 설정하고, app: frontend 라벨을 가진 파드들을 대상으로 합니다. 포트 80으로 들어오는 트래픽을 파드의 8080 포트로 전달하며, 노드 포트를 30080으로 설정합니다.

반응형
Comments