kubectl expose 명령어 상세 가이드
1. 기본 개념
kubectl expose
는 Pod, Deployment, ReplicaSet, Service 등의 쿠버네티스 리소스를 외부에 노출시키는 명령어입니다.
2. 기본 문법
kubectl expose (-f FILENAME | TYPE NAME) [--port=port] [--protocol=TCP|UDP|SCTP] [--target-port=number-or-name] [--name=name] [--external-ip=external-ip-of-service] [--type=type]
3. 주요 옵션
--port
: 서비스가 노출할 포트--target-port
: 실제 애플리케이션이 실행되는 컨테이너 포트--type
: 서비스 타입 (ClusterIP, NodePort, LoadBalancer)--name
: 생성될 서비스의 이름--protocol
: 사용할 프로토콜 (TCP, UDP, SCTP)--external-ip
: 외부 IP 지정
4. 서비스 타입별 예제
4.1 ClusterIP 서비스 생성
# nginx 디플로이먼트 생성
kubectl create deployment nginx --image=nginx
# ClusterIP 서비스로 노출
kubectl expose deployment nginx --port=80 --target-port=80 --type=ClusterIP
# 생성된 서비스 확인
kubectl get svc nginx
4.2 NodePort 서비스 생성
# NodePort로 노출
kubectl expose deployment nginx --port=80 --target-port=80 --type=NodePort
# 생성된 서비스 확인 (30000-32767 범위의 포트가 자동 할당됨)
kubectl get svc nginx
4.3 LoadBalancer 서비스 생성
# LoadBalancer로 노출
kubectl expose deployment nginx --port=80 --target-port=80 --type=LoadBalancer
# 생성된 서비스 확인
kubectl get svc nginx
5. 실제 사용 예제
5.1 여러 포트 노출
# multi-port-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-app
image: my-app:latest
ports:
- containerPort: 8080
- containerPort: 8443
# 여러 포트를 가진 서비스 생성
kubectl expose deployment my-app --name=my-app-svc \
--port=80,443 \
--target-port=8080,8443 \
--type=LoadBalancer
5.2 특정 레이블을 가진 Pod 노출
# 레이블을 지정하여 서비스 생성
kubectl expose pod my-pod --selector="app=my-app" --port=8080 --target-port=80
5.3 외부 IP를 지정한 서비스 생성
kubectl expose deployment nginx \
--port=80 \
--target-port=80 \
--external-ip=203.0.113.10 \
--type=LoadBalancer
6. 고급 사용 예제
6.1 세션 어피니티 설정
kubectl expose deployment nginx \
--port=80 \
--session-affinity=ClientIP \
--type=LoadBalancer
6.2 커스텀 셀렉터 사용
kubectl expose deployment nginx \
--port=80 \
--selector='app=nginx,environment=prod' \
--type=LoadBalancer
6.3 다중 프로토콜 서비스
# multi-protocol-service.yaml
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: my-app
ports:
- name: http
port: 80
targetPort: 8080
protocol: TCP
- name: udp
port: 161
targetPort: 161
protocol: UDP
type: LoadBalancer
7. 서비스 확인 및 디버깅
# 서비스 상세 정보 확인
kubectl describe service nginx
# 엔드포인트 확인
kubectl get endpoints nginx
# 서비스 연결 테스트
kubectl run test-pod --image=busybox -it --rm -- wget -qO- http://nginx
# 서비스 로그 확인
kubectl logs -l app=nginx
8. 주의사항
- LoadBalancer 타입은 클라우드 프로바이더가 지원하는 환경에서만 사용 가능
- NodePort는 보안상 프로덕션 환경에서는 권장되지 않음
- 외부 IP 지정은 클러스터 네트워크 정책에 따라 제한될 수 있음
- 포트 충돌에 주의 필요
'IT > kubernetes[k8s]' 카테고리의 다른 글
POD 실습 50 문제 (2) | 2024.11.17 |
---|---|
Kubernetes emptyDir 가이드 (1) | 2024.11.16 |
Kubernetes PV와 PVC 개요 (0) | 2024.11.16 |
Kubernetes Pod 개요 (2) | 2024.11.16 |
쿠버네티스(Kubernetes)란? (2) | 2024.11.15 |