-
[Udemy] Secretskubernetes/udemy 2025. 2. 18. 10:46
Secrets
DB password를 Secret을 활용하여 사용해보자
모든 파일은 kube-manifests/ 폴더 안에 넣어두어, 일괄적으로 생성한다.
Storage class 생성
# Storage-class.yaml 파일 생성
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: managed-premium-retain-sc provisioner: kubernetes.io/azure-disk reclaimPolicy: Retain # Default is Delete, recommended is retain volumeBindingMode: WaitForFirstConsumer # Default is Immediate, recommended is WaitForFirstConsumer allowVolumeExpansion: true parameters: storageaccounttype: Premium_LRS # or we can use Standard_LRS kind: Managed # Default is shared, recommended is Managed
Persistent Volume Claim 생성
# Persistent-Volume-Claim.yaml 파일 생성
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: azure-managed-disk-pvc spec: accessModes: - ReadWriteOnce storageClassName: managed-premium-retain-sc resources: requests: storage: 5Gi
ConfigMap 생성
# UserManagement-ConfigMap.yaml 파일 생성
apiVersion: v1 kind: ConfigMap metadata: name: usermanagement-dbcreation-script data: mysql_usermgmt.sql: |- DROP DATABASE IF EXISTS webappdb; CREATE DATABASE webappdb;
mysql Deployment 생성
# mysql-deployment.yaml 파일 생성
apiVersion: apps/v1 kind: Deployment metadata: name: mysql spec: replicas: 1 selector: matchLabels: app: mysql strategy: type: Recreate template: metadata: labels: app: mysql spec: containers: - name: mysql image: mysql:5.6 env: - name: MYSQL_ROOT_PASSWORD valueFrom: secretKeyRef: name: mysql-db-password key: db-password ports: - containerPort: 3306 name: mysql volumeMounts: - name: mysql-persistent-storage mountPath: /var/lib/mysql - name: usermanagement-dbcreation-script mountPath: /docker-entrypoint-initdb.d #https://hub.docker.com/_/mysql Refer Initializing a fresh instance volumes: - name: mysql-persistent-storage persistentVolumeClaim: claimName: azure-managed-disk-pvc - name: usermanagement-dbcreation-script configMap: name: usermanagement-dbcreation-script
DB의 password를
Kubernetes-Secrets.yaml 파일의 mysql-db-password 키값을 가져올거다.
mysql cluster ip 생성
# mysql-clusterip-service.yaml 파일 생성
apiVersion: v1 kind: Service metadata: name: mysql spec: selector: app: mysql ports: - port: 3306 clusterIP: None # This means we are going to use Pod IP
UserMgmtWebApp Deployment 생성
# UserMgmtWebApp-Deployment.yaml 파일 생성
apiVersion: apps/v1 kind: Deployment metadata: name: usermgmt-webapp labels: app: usermgmt-webapp spec: replicas: 1 selector: matchLabels: app: usermgmt-webapp template: metadata: labels: app: usermgmt-webapp spec: initContainers: - name: init-db image: busybox:1.31 command: ['sh', '-c', 'echo -e "Checking for the availability of MySQL Server deployment"; while ! nc -z mysql 3306; do sleep 1; printf "-"; done; echo -e " >> MySQL DB Server has started";'] containers: - name: usermgmt-webapp image: stacksimplify/kube-usermgmt-webapp:1.0.0-MySQLDB imagePullPolicy: Always ports: - containerPort: 8080 env: - name: DB_HOSTNAME value: "mysql" - name: DB_PORT value: "3306" - name: DB_NAME value: "webappdb" - name: DB_USERNAME value: "root" - name: DB_PASSWORD valueFrom: secretKeyRef: name: mysql-db-password key: db-password
DB의 password를
Kubernetes-Secrets.yaml 파일의 mysql-db-password 키값을 가져올거다.
UserMgmtWebApp Service 생성
# UserMgmtWebApp-Service.yaml 파일 생성
apiVersion: v1 kind: Service metadata: name: usermgmt-webapp-service labels: app: usermgmt-webapp spec: type: LoadBalancer selector: app: usermgmt-webapp ports: - port: 80 targetPort: 8080
Secrets 생성
# Kubernetes-Secrets.yaml 파일 생성
apiVersion: v1 kind: Secret metadata: name: mysql-db-password type: Opaque data: db-password: ZGJwYXNzd29yZDEx
해당 패스워드는 base64로 변환하여 적용한다.
dbpassword11 > ZGJwYXNzd29yZDEx
변환 사이트 : https://www.base64encode.org
Base64 Encode and Decode - Online
Encode to Base64 format or decode from it with various advanced options. Our site has an easy to use online tool to convert your data.
www.base64encode.org
생성 및 확인
# 생성
# Create All Objects kubectl apply -f kube-manifests/
# 확인
kubectl get svc --- NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 17h mysql ClusterIP None <none> 3306/TCP 13m usermgmt-webapp-service LoadBalancer 10.0.196.178 4.230.158.250 80:30630/TCP 13m
kubectl get pods --- NAME READY STATUS RESTARTS AGE mysql-5dd79b6f45-jpfj8 1/1 Running 0 55s usermgmt-webapp-5b77897684-kqvhz 1/1 Running 0 55s usermgmt-webapp-f47699955-tqt45 1/1 Terminating 0 13m
# External IP로 접근
[참고 영상]
Udemy - Azure Kubernetes Service with Azure DevOps and Terraform
섹션 8 : Kubernetes Storage
[참고 문서]
https://github.com/stacksimplify/azure-aks-kubernetes-masterclass/tree/master/07-Kubernetes-Secrets
'kubernetes > udemy' 카테고리의 다른 글
[udemy] Ingress (0) 2025.02.18 [udemy] Azure Files (0) 2025.02.18 [Udemy] AKS Storage - Azure Disks (2) (0) 2025.02.14 [Udemy] AKS Storage - Azure Disks (0) 2025.02.14 [Udemy] Services Demo with Cluster IP and Load Balancer Services (Declarative) (0) 2025.02.14