쿠버네티스를 도입한다 하더라도 대부분 애플리케이션만 쿠버네티스 상에서 돌리고, 일반적으로 데이터베이스는 외부 Baremetal 로 실행 중인 경우가 많습니다.

이 경우 굳이 데이터베이스를 쿠버네티스로 옮기지 않아도 쿠버네티스의 애플리케이션이 데이터베이스에 접근할 수 있는 방법이 있습니다.

해결책은 Service 와 Endpoint 를 활용하는 방법입니다. 

일반적으로 Service 를 만들 때 Selector 를 활용하여 다른 Pod 와 연결합니다. 이 때 Selector 가 잘 연결되면 Endpoint 도 자동으로 생성됩니다.

하지만 위의 경우에는 데이터베이스(예: mariadb) 이 쿠버네티스 클러스터 외부에 있으므로 Selector 를 활용할 수 없습니다.

이 경우에는 Endpoint 가 자동으로 생성되지 않으므로 Endpoint 를 수동으로 생성하여 연결하는 방법을 사용하면 됩니다.

---
apiVersion: v1
kind: Service
metadata:
  name: ex-host
spec:
  type: ClusterIP
  ports:
    - name: mariadb
      port: 3306
      targetPort: 3306

---
apiVersion: v1
kind: Endpoints
metadata:
  name: ex-host
subsets:
- addresses:
  - ip: 192.168.30.16
  ports:
  - name: mariadb
    port: 3306
    protocol: TCP

 

위의 경우에는 mariadb 가 192.168.30.16 이라는 Host 에 떠 있으며, 쿠버네티스 내의 Pod 에서는 ex-host 라는 Service 명을 통하여 mariadb에 접근할 수 있습니다.

 

 

+ Recent posts