쿠버네티스 패키지 매니저 설치
wget https://get.helm.sh/helm-v3.17.3-linux-amd64.tar.gz
tar -zxvf helm-v3.17.3-linux-amd64.tar.gz
mv linux-amd64/helm /usr/local/bin/helm
#helm 통해 ingress controllor 설치
helm upgrade --install ingress-nginx ingress-nginx --repo https://kubernetes.github.io/ingress-nginx --namespace ingress-nginx --create-namespace --set controller.admissionWebhooks.enabled=false
kubectl get all -n ingress-nginx
-n : 특정 네임 스페이스만 보기
#ingress-nginx-controller 서비스를 수정
kubectl edit svc ingress-nginx-controller -n ingress-nginx
쿠버네티스 웹 Pod 생성
(httpd, nginx, Tomcat) Pod 생성 및 Service 생성, Ingress 리소스를 통해 외부에 접근할 수 있도록 전체 프로젝트 구성
생성파일.yaml
# [1] NGINX Deployment: Nginx 웹 서버를 2개의 Pod로 실행
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deploy
spec:
replicas: 2 # 파드 2개 생성하여 부하분산 가능하게 함
selector:
matchLabels:
app: nginx # 파드 선택 조건 (서비스와 연결될 label)
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx # 공식 Nginx 이미지 사용
---
# [2] NGINX Service: ClusterIP 방식으로 NGINX 파드 묶음에 접근 가능하게 설정
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx # nginx 파드 선택
ports:
- port: 80 # 서비스 포트 (클러스터 내부용)
---
# [3] HTTPD Deployment: Apache HTTP Server 파드를 2개 실행
apiVersion: apps/v1
kind: Deployment
metadata:
name: httpd-deploy
spec:
replicas: 2
selector:
matchLabels:
app: httpd
template:
metadata:
labels:
app: httpd
spec:
containers:
- name: httpd
image: httpd # Apache HTTP Server 이미지
---
# [4] HTTPD Service: ClusterIP 방식으로 HTTPD 파드에 접근 가능
apiVersion: v1
kind: Service
metadata:
name: httpd-service
spec:
selector:
app: httpd
ports:
- port: 80
---
# [5] Tomcat Deployment: Tomcat 서버 파드를 2개 실행
apiVersion: apps/v1
kind: Deployment
metadata:
name: tomcat-deploy
spec:
replicas: 2
selector:
matchLabels:
app: tomcat
template:
metadata:
labels:
app: tomcat
spec:
containers:
- name: tomcat
image: tomcat # 공식 Tomcat 이미지 (8080 포트 사용)
---
# [6] Tomcat Service: 클러스터 내부에서 Tomcat 접근 (포트 매핑 필요)
apiVersion: v1
kind: Service
metadata:
name: tomcat-service
spec:
selector:
app: tomcat
ports:
- port: 80 # 서비스로 접근 시 사용하는 포트
targetPort: 8080 # 실제 Tomcat 컨테이너가 사용하는 포트
---
# [7] Ingress: 클라이언트의 요청 경로에 따라 백엔드 서비스로 연결
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: project-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: / # 요청 경로를 '/'로 재작성
spec:
ingressClassName: nginx # NGINX Ingress Controller를 사용할 것
rules:
- http:
paths:
- path: /4glnginx # /4glnginx 경로로 들어오면
pathType: Prefix
backend:
service:
name: nginx-service # nginx-service로 연결
port:
number: 80
- path: /4glhttpd # /4glhttpd 경로 → httpd-service로 연결
pathType: Prefix
backend:
service:
name: httpd-service
port:
number: 80
- path: /4gltomcat # /4gltomcat 경로 → tomcat-service로 연결
pathType: Prefix
backend:
service:
name: tomcat-service
port:
number: 80 # Tomcat은 실제로 8080이지만, 서비스가 80으로 노출됨
Router 53 호스트 연결
일전에 생성 해 두었던 도메인을 내가 가진 웹 서버에 연결하고자 한다
순서 :
- 로드밸런서 및 대상그룹 설정
- 접속 하려는 레코드 생성
- HTTPS 통한 접근을 위한 인증서 생성
- 로드밸런서에 HTTPS 인증서 연
1.로드밸런서 생성
2.레코드 생성
3.ACM을 통한 인증서 생성
4. 로드밸런서에 HTTPS 연결
5. 성공적으로 연결 확인
삭제
#생성 pod 삭제
kubectl delete -f 4glingress.yaml
#helm ingress controller 삭제
helm uninstall ingress-nginx -n ingress-nginx
#
kubectl delete ns ingress-nginx
'DevOps > K8s' 카테고리의 다른 글
[k8s] Pods 구성 및 도메인 연동 실습 (0) | 2025.04.22 |
---|---|
[k8s] 쿠버네티스 연결 담당 서비스 (0) | 2025.04.09 |
[K8s] 쿠버네티스 기초 (0) | 2025.04.02 |