삽더하기실수
쿠버네티스 서비스 (SVC) 종류 본문
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 트래픽을 클러스터 외부에서 내부 서비스로 라우팅하는 규칙을 정의한 리소스
예시)