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서비스를 받아오는 것을 확인할 수 있다.