지금까지 만든 구조를 살펴보면 위와 같다. 위의 구조에서 MySQL을 중점적으로 살펴보면 보안에 취약한 점이 있다. 30002번 포트로 MySQL에 직접적으로 접근할 수 있게끔 보안이 설정되어 있다는 점이다. Service의 NodePort를 활용해 30002번 포트를 외부로 오픈해서 MySQL에 아무나 접근할 수 있게 만들었다.
✅ Service 종류 복습
NodePort : 쿠버네티스 내부에서 해당 서비스에 접속하기 위한 포트를 열고 외부에서 접속 가능하도록 한다.
ClusterIP : 쿠버네티스 내부에서만 통신할 수 있는 IP 주소를 부여. 외부에서는 요청할 수 없다.
LoadBalancer : 외부의 로드밸런서(AWS의 로드밸런서 등)를 활용해 외부에서 접속할 수 있도록 연결한다.
✅ 보안적인 문제점 해결
보안적인 문제점 해결을 위해 Service의 종류 중 NodePort를 사용하지 않고 ClusterIP를 활용해야 한다. ClusterIP를 활용함으로써 외부에서 아무나 MySQL에 접근하지 못하게 막아야 한다.
기존 Service 매니페스트 파일 수정하기
mysql-service.yaml
apiVersion: v1
kind: Service
# Service 기본 정보
metadata:
name: mysql-service # Service 이름
# Service 세부 정보
spec:
type: ClusterIP # Service의 종류
selector:
app: mysql-db # 실행되고 있는 파드 중 'app: mysql-db'이라는 값을 가진 파드와 서비스를 연결
ports:
- protocol: TCP # 서비스에 접속하기 위한 프로토콜
port: 3306 # 쿠버네티스 내부에서 Service에 접속하기 위한 포트 번호
targetPort: 3306 # 매핑하기 위한 파드의 포트 번호
nodePort: 30002 # 외부에서 사용자들이 접근하게 될 포트 번호