티스토리 뷰
1. 문제 #1 LB 서비스 및 ExternalTrafficPolicy 설정
1) 시나리오
- 쿠버네티스 클러스터에서 외부 트래픽을 처리하기 위해 로드밸런서 서비스를 구성
(1) 로드밸런서 서비스 생성
- nginx 이미지를 사용하여 Deployment 생성
- 이름: nginx-deployment
- 3개의 레플리카
- LB 이름: nginx-loadbalancer
- 외부 클라이언트가 서비스의 외부 IP를 통해 HTTP 요청을 보낼 수 있도록 구성
(2) ExternalTrafficPolicy 설정
- LB서비스의 ExternalTrafficPolicy를 Local로 설정하여, 트래픽이 로컬노드에서만 처리되도록 구성
- 각 노드에서 실행 중인 Pod만 트래픽을 처리하도록 보장
(3) 결과 확인
- 외부 IP를 통해 HTTP 요청을 보내고 응답이 성공적으로 반환되는지 확인
(4) externalTrafficPolicy
- externalTrafficPolicy: kubernetes의 LB또는 NodePort서비스에서 외부 트래픽을 처리하는 방식을 제어하는 옵션
- 두가지 값: Cluster, Local 을 가질 수있다.
- Cluster: 외부 트래픽이 클러스터 내부의 모든 노드로 전달. Pod가 없는 노드로 전달 가능. 클라이언트의 소 IP가 유지되지 않음 ex) 일반적인 웹 어플리케이션
- Local: 외부 트래픽은 Pod가 실행 중인 노드에서만 처리. 클라이언트의 소스 IP가 유지 ex)클라이언트 IP 기반로깅, 방화벽 규칙 적용 등에 사용
2) 해결과정
(1) YAML 작성
#nginx-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80 # NGINX 기본 HTTP 포트
(2) Deployment 생성
kubectl apply -f nginx-deployment.yaml
(3) LB 서비스 YAML작성
apiVersion: v1
kind: Service
metadata:
name: nginx-loadbalancer
spec:
type: LoadBalancer #외부 로드밸런서를 통해 트래픽 처리
selector:
app: nginx # Deployment와 연결된 Selector 설정
ports:
- protocol: TCP
port:80 #서비스 포트(클라이언트가 접근할 포트)
targetPort: 80 #Pod 내부 컨테이너 포트(NGINX 기본포트)
(4) LB 서비스 생성
kubectl apply -f nginx-loadbalancer.yaml
(5) 외부 IP 확인
kubectl get svc nginx-loadbalancer
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx-loadbalancer LoadBalancer 10.96.233.123 203.0.113.10 80:31234/TCP 30s
(6) 외부 IP로 HTTP 요청 테스트
curl http://203.0.113.10/
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
...
</html>
'쿠버네티스' 카테고리의 다른 글
CKA 기출문제 정리 external name (0) | 2025.01.02 |
---|---|
CKA 기출문제 정리 NetworkPolicy (0) | 2025.01.02 |
CKA 기출 문제 데몬셋 (0) | 2025.01.01 |
CKA 기출문제 정리 HPA (0) | 2025.01.01 |
CKA 기출 문제 정리 Multi-container Pods (0) | 2025.01.01 |