이 튜토리얼에서는 Minikube를 사용해 로컬 Kubernetes 클러스터를 배포하고, Ansible로 자체 서명 인증서를 생성하고 관리하며, Helm로 Harbor 컨테이너 이미지 저장소를 배포하고, 보안이 적용된 데모 웹 서비스를 배포하는 빠른 시작 가이드를 제공합니다. Kubernetes, Helm, Ansible에 대한 기본 지식을 갖춘 엔지니어를 대상으로 하며, 이 도구들이 어떻게 함께 작동해 안전한 개발 환경을 구축하는지 보여 줍니다.
사전 조건
시작하기 전에 시스템이 다음 요구 사항을 충족하는지 확인하세요:
- Minikube: 로컬 Kubernetes 클러스터를 실행하기 위한 도구 (Minikube 설치).
- Docker: 컨테이너 이미지를 빌드하고 푸시하기 위한 도구 (Docker 설치).
- kubectl: Kubernetes 명령줄 도구 (kubectl 설치).
- Helm: Harbor를 배포하기 위한 도구 (Helm 설치).
- Ansible: 인증서 관리를 자동화하기 위한 도구 (Ansible 설치).
- Kubernetes, Helm, Ansible에 대한 기본 지식.
- 선택 사항: Ansible의
k8s모듈에 사용할 Python Kubernetes 클라이언트(pip install kubernetes).
1부: Minikube로 Kubernetes 설정하기
Minikube는 로컬에서 단일 노드 Kubernetes 클러스터를 실행할 수 있는 경량 도구로, 개발 및 테스트에 매우 적합합니다.
Minikube 시작:
BASHminikube start단일 노드 Kubernetes 클러스터가 시작됩니다.
Ingress 플러그인 활성화: Minikube의 Ingress 플러그인은 외부 HTTP/HTTPS 트래픽을 처리하는 NGINX Ingress 컨트롤러를 제공합니다.
BASHminikube addons enable ingressIngress 컨트롤러가 실행 중인지 확인합니다:
BASHkubectl get pods -n ingress-nginxDNS 구성: Minikube의 IP 주소를 가져옵니다:
BASHminikube ip/etc/hosts파일(관리자 권한 필요)을 편집해 다음 항목을 추가합니다.<minikube ip>는 실제 IP로 바꾸세요:<minikube ip> harbor.example.com demo.example.com이렇게 하면
harbor.example.com및demo.example.com을 통해 서비스에 액세스할 수 있습니다.
2부: Ansible로 자체 서명 인증서 생성
Ansible을 사용해 자체 서명 인증서를 자동으로 생성하고 Kubernetes Secret으로 저장해 Harbor와 웹 서비스에서 사용하겠습니다. 자체 서명 인증서는 개발 환경에 적합하지만, 프로덕션 환경에서는 신뢰할 수 있는 CA 인증서를 사용해야 합니다.
Ansible 컬렉션 설치:
community.crypto및kubernetes.core컬렉션을 설치합니다:BASHansible-galaxy collection install community.crypto ansible-galaxy collection install kubernetes.core인증서 디렉터리 생성:
BASHmkdir certsAnsible 플레이북 생성:
generate_certs.yaml파일을 만들고 다음 내용을 입력합니다:
스크립트 실행:
BASHansible-playbook generate_certs.yaml이 스크립트는
harbor.example.com및demo.example.com용 자체 서명 인증서를 생성하고,harbor-tls및demo-tls라는 Kubernetes Secret을 만듭니다.
3부: Harbor 배포
Harbor는 오픈 소스 컨테이너 이미지 저장소로, 역할 기반 접근 제어, 이미지 취약점 검사 및 이미지 서명 기능을 제공합니다. Helm을 사용해 Harbor를 배포하고 TLS를 구성하여 안전한 통신을 보장하겠습니다.
Harbor Helm 저장소 추가:
BASHhelm repo add harbor https://helm.goharbor.io helm repo updateHelm 구성 파일 생성:
values.yaml파일을 만들고 다음 내용을 입력합니다:
이 구성은 Ingress를 활성화하고 harbor-tls Secret을 통해 TLS를 제공하며 Harbor 관리자 비밀번호를 설정합니다.
Harbor 설치:
BASHhelm install harbor harbor/harbor -f values.yaml배포 확인: Harbor 구성 요소가 실행 중인지 확인합니다:
BASHkubectl get podshttps://harbor.example.com에 접속하고(자체 서명 인증서 경고를 수락해야 할 수도 있습니다), 사용자 이름admin과 비밀번호mysecretpassword를 사용해 로그인합니다.
4부: 데모 웹 서비스 배포
간단한 Node.js 웹 애플리케이션을 만들어 Docker 이미지를 빌드하고 Harbor에 푸시한 다음, Kubernetes에 배포하고 Ingress를 통해 HTTPS로 액세스할 수 있도록 하겠습니다.
웹 애플리케이션 생성:
demo-app디렉터리를 만들고 다음 파일을 추가합니다:app.js:
package.json:
Dockerfile:
FROM node:14
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "app.js"]
Docker 이미지 빌드 및 푸시:
Harbor 로그인:
BASHdocker login harbor.example.com -u admin -p mysecretpassword이미지 빌드:
BASHdocker build -t harbor.example.com/library/demo-app:latest .이미지 푸시:
BASHdocker push harbor.example.com/library/demo-app:latest
Kubernetes 리소스 생성:
deployment.yaml생성:
service.yaml생성:
apiVersion: v1
kind: Service
metadata:
name: demo-service
spec:
selector:
app: demo-app
ports:
- protocol: TCP
port: 80
targetPort: 3000
ingress.yaml생성:
Kubernetes 리소스 적용:
BASHkubectl apply -f deployment.yaml kubectl apply -f service.yaml kubectl apply -f ingress.yaml웹 서비스 액세스: 브라우저를 열고
https://demo.example.com으로 이동합니다. 자체 서명 인증서를 사용하므로 보안 경고를 수락해야 할 수도 있습니다. “Hello from demo app!”라는 메시지가 표시되어야 합니다.