تخطَّ إلى المحتوى

Project 2: API + ConfigMap + Secret

تشغيل API بسيط مع ConfigMap للإعدادات العامة و Secret للبيانات الحساسة، ثم اختبارها داخل Pod.

  • Namespace باسم project-api.
  • ConfigMap يحتوي APP_MODE.
  • Secret يحتوي API_KEY.
  • Deployment يقرأ القيم كـ environment variables.
  • Service داخلي.

api-project.yaml:

apiVersion: v1
kind: Namespace
metadata:
name: project-api
---
apiVersion: v1
kind: ConfigMap
metadata:
name: api-config
namespace: project-api
data:
APP_MODE: "dev"
---
apiVersion: v1
kind: Secret
metadata:
name: api-secret
namespace: project-api
type: Opaque
stringData:
API_KEY: "local-demo-key"
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: api
namespace: project-api
labels:
app: api
spec:
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: v1
kind: Service
metadata:
name: api
namespace: project-api
spec:
selector:
app: api
ports:
- name: http
port: 80
targetPort: http

Lab: API يقرأ ConfigMap وSecret

المستوى: مبتدئ الوقت: 35 دقيقة الأدوات: kubectl

الهدف: تشغيل API والتأكد من وجود environment variables.

Terminal window
kubectl apply -f api-project.yaml
kubectl -n project-api rollout status deployment/api
kubectl -n project-api exec deploy/api -- printenv APP_MODE
kubectl -n project-api exec deploy/api -- printenv API_KEY
kubectl -n project-api run curl --rm -it --image=curlimages/curl:8.10.1 --restart=Never -- curl -s http://api
dev
local-demo-key
api is running
Terminal window
kubectl delete namespace project-api
  • لا توجد أسرار داخل image أو command.
  • Secret غير مطبوع في README العام إلا كقيمة demo.
  • Service يرد من داخل namespace.