Project 2: API + ConfigMap + Secret
تشغيل API بسيط مع ConfigMap للإعدادات العامة و Secret للبيانات الحساسة، ثم اختبارها داخل Pod.
المطلوب
Section titled “المطلوب”- Namespace باسم
project-api. - ConfigMap يحتوي
APP_MODE. - Secret يحتوي
API_KEY. - Deployment يقرأ القيم كـ environment variables.
- Service داخلي.
manifest كامل
Section titled “manifest كامل”api-project.yaml:
apiVersion: v1kind: Namespacemetadata: name: project-api---apiVersion: v1kind: ConfigMapmetadata: name: api-config namespace: project-apidata: APP_MODE: "dev"---apiVersion: v1kind: Secretmetadata: name: api-secret namespace: project-apitype: OpaquestringData: API_KEY: "local-demo-key"---apiVersion: apps/v1kind: Deploymentmetadata: name: api namespace: project-api labels: app: apispec: replicas: 2 selector: matchLabels: app: api template: metadata: labels: app: api spec: containers: - name: api image: hashicorp/http-echo:1.0 args: - "-text=api is running" env: - name: APP_MODE valueFrom: configMapKeyRef: name: api-config key: APP_MODE - name: API_KEY valueFrom: secretKeyRef: name: api-secret key: API_KEY ports: - name: http containerPort: 5678 resources: requests: cpu: "50m" memory: "64Mi" limits: cpu: "250m" memory: "128Mi"---apiVersion: v1kind: Servicemetadata: name: api namespace: project-apispec: selector: app: api ports: - name: http port: 80 targetPort: httpLab: API يقرأ ConfigMap وSecret
الهدف: تشغيل API والتأكد من وجود environment variables.
kubectl apply -f api-project.yamlkubectl -n project-api rollout status deployment/apikubectl -n project-api exec deploy/api -- printenv APP_MODEkubectl -n project-api exec deploy/api -- printenv API_KEYkubectl -n project-api run curl --rm -it --image=curlimages/curl:8.10.1 --restart=Never -- curl -s http://apiExpected output
Section titled “Expected output”devlocal-demo-keyapi is runningCleanup
Section titled “Cleanup”kubectl delete namespace project-apiAcceptance criteria
Section titled “Acceptance criteria”- لا توجد أسرار داخل image أو command.
- Secret غير مطبوع في README العام إلا كقيمة demo.
- Service يرد من داخل namespace.