본문 바로가기
Cloud/Kubenetes

[Kubenetes] k8s nodeport

by tankwoong 2023. 11. 1.
반응형

nodeport:

node자체 포트를 개방하고 이 포트로 들어오는 트래픽을 pod로 리다이렉션 한다. 

클라우드 환경에서는 클라우드에서 제공하는 loadbalancer를 앞에 두고 nodeport를 구현한다.

 

nodeport와 loadbalaner와 ingress의 차이점

nodeport는 노드의 자체 포트를 사용해서 pod로 redirection 

 

loadbalancer: 

외부 게이트 웨이를 사용해서 노드포트로 redirection 

 

ingress:

외부에 별도의 리소스를 만들어주고, 이 리소스에 요청이 오면,

하나의 ip로 다수의 서비스를 제공(도메인 네임)

 

loadbalancer는 L4개념, ingress는 L7 개념이다.

 

L2 스위치 (Layer 2 스위치):

레이어 2 스위치 또는 이더넷 스위치로도 알려져 있으며
데이터 링크 레이어에서 동작하며, 

주로 이더넷 프레임을 스위칭하고 

플러딩 및 러닝 스위치(Routing Switch)로 사용된다.


주로 MAC 주소를 기반으로 프레임을 전달하며, 

네트워크 트래픽의 분리와 스위칭을 담당한다.


L3 스위치 (Layer 3 스위치):

레이어 3 스위치 또는 라우터 스위치로도 알려져 있으며

네트워크 레이어에서 동작하며, 

IP 패킷을 라우팅하고 관리한다.


라우팅 및 서브넷화 기능을 제공하며, 

서로 다른 IP 서브넷 간의 패킷 전달을 담당한다.


L4 스위치 (Layer 4 스위치):

레이어 4 스위치 또는 로드 밸런서로도 알려져 있다.

**전송 레이어(Transport Layer)**에서 동작하며, 

네트워크 트래픽을 로드 밸런싱하고 

애플리케이션 레벨에서 세션 관리를 수행한다.


주로 로드 밸런싱, 세션 지속성 및 

애플리케이션 트래픽 관리를 위한 목적으로 사용된다.

 

L4 로드 밸런서는 주로

TCP 및 UDP 포트 정보를 기반으로 트래픽을 분배한다.

 

L7 스위치 (Layer 7 스위치):

레이어 7 스위치 또는 

애플리케이션 딜리버리 컨트롤러(ADC)로도 알려져 있다.


애플리케이션 레이어에서 동작하며, 

웹 애플리케이션 방화벽, 웹 애플리케이션 가속 및 세션 관리와 

같은 고급 기능을 제공한다.

 

HTTP/HTTPS와 같은 애플리케이션 프로토콜을 이해하고, 

웹 애플리케이션 보안 및 성능 최적화에 사용된다.

 

yml파일 생성 

apiVersion: apps/v1
kind: Deployment
metadata:
  name: http-go
  labels:
    app: http-go
spec:
  replicas: 10
  selector:
    matchLabels:
      app: http-go
  template:
    metadata:
      labels:
        app: http-go
    spec:
      containers:
      - name: http-go
        image: myoungseok/http-go
        ports:
        - containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
  name: http-go-svc
spec:
  type: NodePort
  selector:
    app: http-go
  ports:
    - port: 80
      targetPort: 8080
      nodePort: 30007
kubectl create -f http-go-svc.yml
 kubectl get svc

work1과 work2 고루 분포한 것을 확인 

yml파일 만들기-tomcat-deploy.yml

kubectl edit deploy tomcat --> console/tomcat-7.0

apiVersion: apps/v1
kind: Deployment
metadata:
  name: tomcat
spec:
  replicas: 3
  selector:
    matchLabels:
      app: tomcat
  template:
    metadata:
      labels:
        app: tomcat
    spec:
      containers:
      - image: consol/tomcat-7.0
        name: tomcat
        ports:
        - containerPort: 8080

---

apiVersion: v1
kind: Service
metadata:
  name: tomcat1
spec:
  type: LoadBalancer
  selector:
    app: tomcat
  ports:
    - port: 80
      targetPort: 8080

---

apiVersion: v1
kind: Service
metadata:
  name: tomcat2
spec:
  type: NodePort
  selector:
    app: tomcat
  ports:
    - port: 80
      targetPort: 8080
      nodePort: 30003

LoadBalancer와 NodePort를 동시에 매핑해서 적어줬는데 

Nodeport는 30003이라고 하고, LoadBalancer는 지정해주지 않았는데 

자동으로 지정된다.

 

yml파일로 실행해준다.

kubectl apply -f tomcat-deploy.yml

아래와 같이 하나는 work1에 하나는 work2에 서비스가 생성된 것을 볼 수 있다.

 kubectl get pod -o wide

kubectl get all

각각 curl을 통해서 tomcat서비스를 받아오는 것을 확인할 수 있다.

반응형