쿠버네티스 환경에서 DVWA를 설치해보도록 하자.
다양한 방법이 있지만 helm 차트를 통해서 아주 간단하게 설치하는 것으로 결정!
단계별 설치 방법
1. Helm 설치
먼저 Helm을 설치해야 합니다. 아래 명령어를 사용해 Helm을 설치합니다:
2. DVWA Helm 차트 다운로드
DVWA를 설치하기 위한 Helm 차트를 작성하거나 이미 작성된 차트를 사용합니다. 아래는 DVWA의 간단한 Helm 차트 예제입니다.
Helm 차트 생성
values.yaml 수정
Helm 차트의 values.yaml 파일을 수정하여 DVWA와 MySQL을 설정합니다:
# values.yaml
mysql:
image: mysql:5.7
rootPassword: rootpassword
database: dvwa
service:
port: 3306
dvwa:
image: vulnerables/web-dvwa
service:
port: 80
environment:
- name: MYSQL_HOST
value: mysql
- name: MYSQL_USER
value: root
- name: MYSQL_PASSWORD
value: rootpassword
- name: MYSQL_DB
value: dvwa
3. Helm 차트 배포
이제 Helm 차트를 사용해 DVWA를 쿠버네티스에 배포할 수 있습니다:
4. DVWA 접속
배포가 완료되면, kubectl get svc 명령어를 사용해 DVWA 서비스의 외부 IP 주소를 확인한 후 웹 브라우저에서 해당 주소로 접속합니다:
요약!!
- Helm 설치
- DVWA를 위한 Helm 차트 작성 및 values.yaml 파일 수정
- Helm 차트를 사용해 DVWA 배포
- 서비스의 외부 IP 주소 확인 후 접속
** 만약, 자동으로 curl을 통해 설치가 되지 않는다면? 수동으로 설치 가능!!
Helm 수동 설치 방법
1. Helm 바이너리 다운로드
먼저 Helm 바이너리를 다운로드합니다. 최신 버전은 Helm 공식 웹사이트에서 확인할 수 있습니다. 아래는 Helm 3.11.2 버전을 예시로.
2. 압축 해제
DVWA Helm 차트 설치
1. Helm 차트 생성
새로운 Helm 차트를 생성합니다.
values.yaml 파일을 수정하여 DVWA와 MySQL의 설정을 정의합니다.
# values.yaml
mysql:
image: mysql:5.7
rootPassword: rootpassword
database: dvwa
service:
port: 3306
dvwa:
image: vulnerables/web-dvwa
service:
port: 80
environment:
- name: MYSQL_HOST
value: mysql
- name: MYSQL_USER
value: root
- name: MYSQL_PASSWORD
value: rootpassword
- name: MYSQL_DB
value: dvwa
3. Helm 차트 배포
Helm을 사용하여 DVWA를 배포합니다.
요약
- Helm 바이너리를 수동으로 다운로드하고 설치합니다.
- DVWA를 위한 Helm 차트를 생성하고 values.yaml 파일을 수정합니다.
- Helm 차트를 사용하여 DVWA를 배포합니다.
- 쿠버네티스 서비스의 외부 IP 주소를 확인하여 DVWA에 접속합니다.
[결과 확인 - 예시]
kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
my-dvwa NodePort *.*.*.* <none> 80:30662/TCP 20m
mysql ClusterIP *.*.*.* <none> 3306/TCP 20m
여기에서 응용하여 외부에서 접근 가능하도록 nodeport 형태로 바꾸어서 해보도록 하겠다.
1. my-dvwa 서비스 타입 변경
1.1 my-dvwa 서비스 타입을 NodePort로 변경
type: ClusterIP를 type: NodePort로 변경합니다. 변경 후 YAML 파일은 다음과 같을 것입니다:
clusterIP -> nodeport로 변경
apiVersion: v1
kind: Service
metadata:
name: my-dvwa
spec:
selector:
app: dvwa
ports:
- protocol: TCP
port: 80
targetPort: 80
nodePort: 30080 # NodePort 설정 (기본적으로 30000-32767 범위 내에서 설정)
type: NodePort
2. 서비스 접속
2.1 노드 IP 확인
[출력 예시]
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
node1 Ready control-plane 24m v1.19.3 192.168.1.1 <none> Ubuntu 18.04.5 LTS 4.15.0-128-generic docker://19.3.12
2.2 NodePort를 통한 접속
웹 브라우저에서 http://<노드 IP>:<NodePort> 형식으로 접속합니다.
예를 들어, 노드 IP가 192.168.1.1이고 NodePort가 30080이라면, 다음과 같이 접속합니다:
요약
- my-dvwa 서비스 타입을 ClusterIP에서 NodePort로 변경합니다.
- 쿠버네티스 노드의 IP 주소를 확인합니다.
- 노드 IP와 NodePort를 사용하여 웹 브라우저에서 DVWA에 접속합니다.
** 여기서 노드의 IP는 어떻게 아는지 궁금하다?!
1. 노드 IP 주소 확인
다음 명령어를 사용하여 노드의 IP 주소를 확인합니다:
이 명령어는 각 노드의 상태와 함께 IP 주소를 표시합니다.
출력 예시:
예를 들어, node1의 내부 IP 주소는 192.168.1.1입니다.
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
node1 Ready control-plane 24m v1.19.3 192.168.1.1 <none> Ubuntu 18.04.5 LTS 4.15.0-128-generic docker://19.3.12
node2 Ready <none> 24m v1.19.3 192.168.1.2 <none> Ubuntu 18.04.5 LTS 4.15.0-128-generic docker://19.3.12
2. NodePort를 통한 접속
웹 브라우저에서 노드의 IP 주소와 NodePort를 사용하여 DVWA 애플리케이션에 접속합니다. 예를 들어, 노드 IP가 192.168.1.1이고 NodePort가 30080이라면 다음과 같이 접속합니다:
이렇게 하면 DVWA 웹 애플리케이션에 접근할 수 있습니다.