Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 |
Tags
- 인그래스컨트롤러
- 포트추적
- timesynchronization
- ingressrules
- chrony
- 이미지풀시크릿생성
- kubernetes
- 컨테이너런타임 재시작
- 노드포트
- ingresscontroller
- 쿠버네티스 구조
- networktimeprotocol
- 프라이빗레지스트리
- 인증서설치후 런타임 재시작
- 쿠버네티스
- k8s
- ingressservice
- 여러 레지스트리를 하나의 시크릿으로 묶고
- createvsapply
- 원격서버지원
- servertimesync
- clustermanagement
- ingress
- 인그래스
- servicemesh
- 도커프라이빗레지스트리
- nodeport
- 쿠버네티스 인그래스 컨트롤러 구성 예시
- kubectl
- apply
Archives
- Today
- Total
madebychung
온프레미스 환경에서 Ingress Controller 앞단에 외부 Load Balancer 없이 설정하려면? 본문
온프레미스 환경에서 Ingress Controller 앞단에 외부 Load Balancer 없이 설정하려면?
클라우드에서는 Ingress Controller 앞단에 LoadBalancer 서비스를 쓰면 외부에서 바로 접근할 수 있습니다. 하지만 온프레미스 환경에서는 LoadBalancer 타입이 작동하지 않습니다. EXTERNAL-IP가 <pending> 상태로 계속 남아있죠.
이 글에서는 외부 Load Balancer 없이 NodePort 방식으로 Ingress Controller를 설정하고, 외부에서 직접 접근할 수 있도록 구성하는 방법을 초보자 관점에서 정리합니다.
1. 기본 개념 정리
- LoadBalancer: 클라우드에서 외부 IP를 자동 할당해주는 서비스 타입
- NodePort: 클러스터 외부에서 노드 IP + 포트를 통해 접근하는 방식
온프레미스에서는 NodePort로 외부 접근 통로를 열고, 직접 접속해야 합니다.
2. Ingress Controller 설치
nginx ingress controller 설치 (기본은 LoadBalancer 타입):
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.9.4/deploy/static/provider/cloud/deploy.yaml
✅ 리소스 설치 확인
kubectl get pods -n ingress-nginx
정상 상태: Pod 상태가 Running이고 Ready가 1/1이어야 합니다.
3. Service 타입 NodePort로 변경
설치 직후 서비스 타입은 LoadBalancer입니다. NodePort로 바꿔줍니다:
kubectl -n ingress-nginx edit svc ingress-nginx-controller
수정 전:
spec:
type: LoadBalancer
수정 후:
spec:
type: NodePort
ports:
- name: http
port: 80
nodePort: 30080
- name: https
port: 443
nodePort: 30443
✅ 변경 확인
kubectl get svc -n ingress-nginx
출력 예시:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ingress-nginx-controller NodePort 10.100.20.144 <none> 80:30080/TCP,443:30443/TCP 5m
4. 외부에서 접근 테스트
이제 브라우저 또는 curl을 사용해 접근할 수 있습니다:
curl http://<NODE_IP>:30080
만약 Ingress 리소스 없이 직접 접근하면 404 Not Found 페이지가 나오는 게 정상입니다.
5. 테스트용 서비스 및 Ingress 설정
✅ echo 서버 배포
kubectl create deployment echo-server --image=k8s.gcr.io/echoserver:1.4
kubectl expose deployment echo-server --port=80 --target-port=8080
✅ 서비스 확인
kubectl get svc
결과 예시:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
echo-server ClusterIP 10.99.50.211 <none> 80/TCP 1m
✅ Ingress 리소스 생성
cat <<EOF | kubectl apply -f -
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: echo-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
ingressClassName: nginx
rules:
- host: echo.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: echo-server
port:
number: 80
EOF
✅ Ingress 확인
kubectl get ingress
결과 예시:
NAME CLASS HOSTS ADDRESS PORTS AGE
echo-ingress nginx echo.local <pending> 80 1m
6. /etc/hosts 설정
/etc/hosts 파일을 열고 echo.local을 Node IP에 매핑합니다:
sudo vi /etc/hosts
내용 추가:
192.168.0.10 echo.local
이제 도메인으로도 접속 가능:
curl http://echo.local:30080
또는 브라우저로 http://echo.local:30080 입력
7. 방화벽 포트 확인
NodePort 포트가 열려 있어야 외부 접근이 됩니다.
✅ firewalld 사용하는 경우
sudo firewall-cmd --add-port=30080/tcp --permanent
sudo firewall-cmd --add-port=30443/tcp --permanent
sudo firewall-cmd --reload
정리
- 온프레미스에서는 LoadBalancer를 사용할 수 없기 때문에 NodePort로 전환
- Ingress Controller의 NodePort 포트로 직접 접근
- 도메인 연결은
/etc/hosts로 처리 가능 - 방화벽 포트 열려 있는지 반드시 확인
'K8s' 카테고리의 다른 글
| Kubernetes에서 Private Registry 이미지 Pull 시크릿 설정하기 (0) | 2025.04.08 |
|---|---|
| 쿠버네티스 인그래스 컨트롤러 구성 예시 (0) | 2025.04.08 |
| nginx ingress controller 설치 후 Ingress 리소스 연동하는 방법 (0) | 2025.04.08 |
| 쿠버네티스 Ingress 완전 정리 (Ingress / Ingress Controller / Ingress Service 헷갈림 끝!) (0) | 2025.04.08 |
| 📌 kubectl describe로 리소스 상태 추적하는 방법 (0) | 2025.04.08 |