kube 5

azur postgres connection with configMap and kubernetes secret
cloud-computing

az postgres 만들고 deployment, service 생성

# 애저에서 postgres database 만든 상태에서
# postgres 로컬에서 확인하기 위한 pgadmin 띄움
# 이후 pgadmin 화면에서 Servers > register > Host name/address
# 만들어둔 db의 서버이름(ex. roomypg.postgres.database.azure.com) 지정
$ docker run -itd -p 80:80 -e TZ=Asia/Seoul -e PGADMIN_DEFAULT_EMAIL=admin@gmail.com -e PGADMIN_DEFAULT_PASSWORD=postgres --name pgadmin dpage/pgadmin4

# 미리 만들어둔 이미지의 태그를
# 보기 편하도록 컨테이너 레지스트리 이름으로 바꿔봄
$ docker tag kcdhbp/todoapi:latest roomycontainer.azurecr.io/todoapi:v1

# 애져 컨테이너 레지스트리 login
$ az acr login --name roomycontainer

# 미리 만둘어둔 gradle 빌드해놈
$ ./gradlew jibDockerBuild

# 애저로 이미지 올림 (로컬 대신 애져 acr 연결된 상태)
$ docker push roomycontainer.azurecr.io/todoapi:v1

# 아래 yaml파일로 deployment, service 생성
$ kubectl apply -f app.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: todo-api-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: todo-api
  template:
    metadata:
      name: todo-api-pod
      labels:
        app: todo-api
    spec:
      containers:
        - name: todo-api
          image: roomycontainer.azurecr.io/todoapi:v1
          ports:
            - containerPort: 8080
              protocol: TCP
          env:
            - name: SPRING_PROFILES_ACTIVE
              value: production
            - name: TODO_DATASOURCE
              valueFrom:
                configMapKeyRef:
                  name: todo-datasource-config
                  key: todo_datasource
            - name: TODO_USER
              valueFrom:
                secretKeyRef:
                  name: todo-datasource-credentials
                  key: POSTGRES_USER
            - name: TODO_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: todo-datasource-credentials
                  key: POSTGRES_PASSWORD

---
apiVersion: v1
kind: Service
metadata:
  name: todo-api
spec:
  type: LoadBalancer
  ports:
    - port: 80
      targetPort: 8080
  selector:
    app: todo-api
# 이제 todo-api는 external-ip로 접근 가능하다.
$ kubectl get service


configMap, kubernetes secret

apiVersion: v1
kind: ConfigMap
metadata:
  name: todo-datasource-config
data:
  todo_datasource: postgres:5432
apiVersion: v1
kind: Secret
metadata:
  name: todo-datasource-credentials
type: Opaque
data:
  POSTGRES_DB: dG9kbw==
  POSTGRES_USER: dG9kbw==
  POSTGRES_PASSWORD: dG9kbw==