관리 메뉴

삽더하기실수

쿠버네티스 서비스 (SVC) 종류 본문

K8s

쿠버네티스 서비스 (SVC) 종류

삽수 2024. 5. 26. 08:15
728x90

 

port-forward

 

개념

로컬 머신에서 쿠버네티스 클러스터 내의 특정 포드(Pod)로 직접 네트워크 트래픽을 전달하는 방법

 

예시)

더보기

파드를 하나 생성해준다

 

port-forward.yaml
kind: Pod
metadata:
  name: fwd-chk-hn
spec:
  containers:
  - name: chk-hn
    image: sysnet4admin/chk-hn



k port-forward fwd-chk-hn 80:80
> 해당 명령어를 사용하면 127.0.0.1로 curl 을 보내면 


k port-forward --address 0.0.0.0 fwd-chk-hn 80:80

> 해당 명령어를 사용하면 127.0.0.1로 curl 을 보내면 

 

 보통 내부에서 포트를 임의로 포워딩 해줄 때 사용 한다.

 


HostPort


개념

포드 내의 컨테이너가 실행되는 노드의 특정 포트를 사용하도록 하는 방식

 

예시)

더보기

파드를 하나 생성한다.

apiVersion: v1
kind: Pod
metadata:
  name: hp-chk-hn
spec:
  containers:
  - name: chk-hn
    image: sysnet4admin/chk-hn
    ports:
    - containerPort: 80
      hostPort: 8080

 

ContainerPort:80

hostPort: 8080 

부분을 설명하면 해당 내용은 만약 워커노드 2에 80포트로 가게되면 해당 파드의 80으로 가게 하는것이다.

사용자 -> worknode 8080 - > 80

! 현실적으로 워커 노드의 ip와 포트를 알아야 하기에 사용 하기에는 어려워 보인다.

 


HostNetwork

개념

포드가 노드의 네트워크 네임스페이스를 공유하여, 포드의 IP가 곧 노드의 IP가 되는 설정

 

예시)

더보기

파드를 하나 생성한다.

apiVersion: v1
kind: Pod
metadata:
	name: hnet-chk-hn
spec:
	hostNetwork: true
    containers:
    	- name: chk-hn
          image: sysnet4admin/chk-hn

 

워커노드가 80포트에 열려 있으면 그대로 80포트로 연결해주는것

사용자 -> worknode 80

 

 


NodePort

 

개념

쿠버네티스 서비스의 한 종류로, 클러스터 내 모든 노드의 특정 포트에서 서비스로의 트래픽을 포워딩

 

예시)

더보기

두개의 오브젝트를 생성해준다.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: deploy-nginx
  labels:
    app: deploy-nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: deploy-nginx
  template:
    metadata:
      labels:
        app: deploy-nginx
    spec:
      containers:
      - name: nginx
        image: nginx
---
apiVersion: v1
kind: Service
metadata:
  name: np-nginx
spec:
  selector:
    app: deploy-nginx
  ports:
    - name: http
      port: 80
      targetPort: 80
      nodePort: 30000 #option
  type: NodePort

 

user -> node:30000 -> svc:80 -> pod:80 형식으로 진행된다.

                                    port           targetPort

 

 

 


LoadBalancer(MetalLb)

개념

클라우드 제공자의 로드 밸런서를 통해 외부 트래픽을 쿠버네티스 서비스로 전달

 

예시)

더보기

 

오브젝트를 하나 만들어본다.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: deploy-nginx
  labels:
    app: deploy-nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: deploy-nginx
  template:
    metadata:
      labels:
        app: deploy-nginx
    spec:
      containers:
      - name: nginx
        image: nginx
---
apiVersion: v1
kind: Service
metadata:
  name: lb-nginx
spec:
  selector:
    app: deploy-nginx
  ports:
    - name: http
      port: 80
      targetPort: 80
  type: LoadBalancer

 

사용자 ->  svc(external ip):80 -> pod :80

 


ExternalName

 

개념

쿠버네티스 서비스의 한 종류로, 서비스 이름을 외부 DNS 이름으로 매핑

 

예시)

더보기

svc를 하나 만들어 준다.

apiVersion: v1
kind: Service
metadata:
  name: ex-url-1
  namespace: default
spec:
  type: ExternalName
  externalName: [자신의 도메인 주소]

 

쿠버네티스 클러스터 안에서 해당 도메인으로 매핑이 된다

cluster -> pod:도메인

 

 

ClusterIP

개념

기본적인 쿠버네티스 서비스 타입으로, 클러스터 내부에서만 접근 가능한 가상 IP를 생성

 

예시)

더보기

 오브젝트 2개를 생성한다

apiVersion: apps/v1
kind: Deployment
metadata:
  name: deploy-nginx
  labels:
    app: deploy-nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: deploy-nginx
  template:
    metadata:
      labels:
        app: deploy-nginx
    spec:
      containers:
      - name: nginx
        image: nginx
---
apiVersion: v1
kind: Service
metadata:
  name: cl-nginx
spec:
  selector:
    app: deploy-nginx
  ports:
    - name: http
      port: 80
      targetPort: 80
  type: ClusterIP

 

내부용으로 사용 한다.

pod:80 <-> svc <-> pod:80

 

 

Headless

개념

클러스터IP를 할당하지 않는 서비스로, 직접 포드 IP를 반환

 

예시)

더보기

오브젝트 2개를 만들어준다.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: deploy-nginx
  labels:
    app: deploy-nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: deploy-nginx
  template:
    metadata:
      labels:
        app: deploy-nginx
    spec:
      containers:
      - name: nginx
        image: nginx
---
apiVersion: v1
kind: Service
metadata:
  name: hdl-nginx
spec:
  selector:
    app: deploy-nginx
  ports:
    - name: http
      port: 80
      targetPort: 80
  clusterIP: None

 

Cluster 내부에서 IP의 손실 없이 도메인으로만 연결이 가능하다 

!Cluster에 statefulset으로 연결되어있을경우

 

pod:domain <-> svc <-> pod:domain

 

 

Endpoints

개념

서비스와 연결된 실제 포드의 IP 주소와 포트를 명시한 객체

 

예시)

더보기

 

kind: Service
metadata:
  name: external-data
spec:
  ports:
    - name: http
      port: 80
      targetPort: 80
---
apiVersion: v1
kind: Endpoints
metadata:
  name: external-data
subsets:
  - addresses:
      - ip: 192.168.1.11
    ports:
      - name: http
        port: 80

 

도착할 수 있는 IP 라고 생각하면된다.

 

 

 

Ingress

개념

TTP 및 HTTPS 트래픽을 클러스터 외부에서 내부 서비스로 라우팅하는 규칙을 정의한 리소스

 

예시)

 





728x90